Frekvencmetar u PB. Nikako da ozivi - Printable Version +- DIY Electronic projects (https://forum.yu3ma.net) +-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forumdisplay.php?fid=52) +--- Forum: Microchip PIC (https://forum.yu3ma.net/forumdisplay.php?fid=53) +--- Thread: Frekvencmetar u PB. Nikako da ozivi (/showthread.php?tid=2469) |
Frekvencmetar u PB. Nikako da ozivi - MILANNN - 10-11-2020 Ovo sam odavno pronasao i pokusavao kad kako imam vremena da napravim ali nikako da proradi.Pronalazio sam neka objasnjenja ali nista u pic basic-u uvezi ovog programa pa ako neko zna gde je ovde greska da je ispravimo.Ja sam ovde samo dodao komande za lcd displej. Quote:DEFINE LCD_BITS 4 RE: Frekvencmetar u PB. Nikako da ozivi - ZASto - 10-11-2020 ovo Code: TMR1_Vred = 64536 neće da može. Može samo Code: TMR1_Vred = 64535 65535 je 0b1111111111111111 -> 16 bitova što uslovljava da Code: TMR1L = TMR1_Vred.lowbyte RE: Frekvencmetar u PB. Nikako da ozivi - MILANNN - 10-11-2020 Probam odma cim stignem kuci. RE: Frekvencmetar u PB. Nikako da ozivi - MILANNN - 10-11-2020 Ponovo nece ali nepredajemo se.Sad je samo pokazao neke druge vrednosti na displeju isto bezveze.Dovodio sam mu u proteusu od 100Hz do nekoliko KHz i rezultalt je uvek neki broj koji nema veza sa onim sto treba da pokaze. RE: Frekvencmetar u PB. Nikako da ozivi - gorankg - 10-11-2020 Proveri vrednost oscilatora koju koristis u proteusu. Kod ti nije dobar jer ne koristis prekide. Sta sve moze da se desi dok ti pises po displeju!? RE: Frekvencmetar u PB. Nikako da ozivi - MILANNN - 10-11-2020 Na displej u ispise neku vrednost 49 hiljada i nesto i tako stoji. Probao sam nesto da ubacim prekide ali mi izgleda neide pa sam postavio kod kakav je bio kad sam ga skinuo. Oscilator je na 4MHz RE: Frekvencmetar u PB. Nikako da ozivi - MILANNN - 10-12-2020 Evo probao sam da ubacim nesto (oznacio sam isprekidanim linijama) i posle bezbroj pokusaja nista,samo menja neki broj na displeju bezveze.Sta bi jos trebalo da se uradi? neznam sta jos da probam. DEFINE LCD_BITS 4 DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 2 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 0 DEFINE LCD_RWREG PORTB DEFINE LCD_RWBIT 3 DEFINE LCD_LINES 2 pause 100 lcdout $FE, 2 lcdout $FE, $80, "BROJ=" trisc.2=1 capture VAR PIR1.2 ' CCP1 capture flag overflow VAR PIR1.0 ' Timer1 overflow flag period VAR WORD ' Word variable that stores the value broj var word TMR1_Vred Var word TMR1_Vred = 64535 CCP1CON = %00000100 ' Enable the CCP1 capture, falling edge T1CON = %00000001 ' TMR1 prescale=1, and turn it on (1uS per count) mainloop: pie1.0=1--------------- pie1.2=1--------------- intcon.7=1---------------- IF (capture = 0) Then mainloop ' Wait here until captured TMR1L = TMR1_Vred.lowbyte 'Postavi TMR1 na 64536 TMR1H = TMR1_Vred.highbyte period.lowbyte = CCPR1L ' Store the captured value in period.highbyte = CCPR1H ' period variable IF overflow = 0 Then ' Skip the output if the timer overflowed lcdout $FE, $80, "BROJ=",#period EndIF capture = 0 ' Clear the capture flag reset: IF (capture = 0) Then reset ' Wait for beginning of next period TMR1L = 0 ' Clear Timer1 low register TMR1H = 0 ' Clear Timer1 high register capture = 0 ' Clear capture flag overflow = 0 ' Clear overflow flag intcon.7=0----------------- pie1.0=0--------------------- pie1.2=0----------------- GoTo mainloop ' Do it forever End RE: Frekvencmetar u PB. Nikako da ozivi - misamilanovic - 10-18-2020 Ne koriste se prekidi tako. Možeš ti da setuješ i resetuješ INTCON i PIE koliko hoćeš, kad mikro ne zna ništa o tome. U PIC BASIC-u se prekidi koriste na dva načina; ili se piše asemblerski podprogram za obradu prekida, ili se koristi komanda ON INTERRUPT GOTO. Prvi način je najbrži i najteži ako ne znaš asembler. Drugi način je mnogo prostiji ali malo usporava program. Kad ubaciš komandu ON INTERRUPT kompajler iza svake tvoje instrukcije ubacuje svoju kojom proverava da li je došlo do nekog prekida, pa ako jeste onda skače na rutinu obrade prekida koju si mu napisao. Grešku si napravio upravo sa LCDOUT komandom jer si napisao: Code: lcdout $FE, $80, "BROJ=",#period Code: lcdout $FE, $1, "BROJ=",#period Code: lcdout $FE, $80, "BROJ=",#period, " " Inače onaj program ne zahteva nikakve prekide. Radi otprilike ovako: Ako posmatraš od labele reset ovde se program vrti u brzoj petlji i čeka silaznu ivicu nekog signala. Kad se to desi, capture postaje 1, izlazi se iz petlje. U tajmer se upisuju nule i skače se na mainloop gde se program ponovo zaglavi u petlji i čeka capture, dok tajmer polako napreduje. Kad se desi capture, podatak se izvuče iz CCPR1 i prosledi na displej, što može da traje i pola sata nebitno je. Posle prikaza očisti se capture flag i ponovo uđe u reset petlju i čeka nova ivica signala. Ono upisivanje 64535 nisam siguran čemu služi, daje 1000 us ili 1ms do overflow-a, ali ovde ne vidim svrhu jer program radi (probao sam u proteusu) i bez toga. Inače program ne meri frekvenciju već periodu signala od nekoliko us do 65535 us. RE: Frekvencmetar u PB. Nikako da ozivi - MILANNN - 10-19-2020 Nebitno,meni je odgovaralo da meri i periodu ili bar samo trajanje log1 U svakom slucaju hvala na odgovoru.Za asembler iskreno nemam poima a znam da je za obradu prekida najbolje sa njim ,trebalo bi mi mnogo vremena da se snadjem pa zato ostaje u picbasicu.Ono 64545,neznam,ja sam to pronasao negde na internetu i pokusao da ga ozivim. |