frequenzimetro con pic in asm

Jan 04, 2006 18 Replies

Tempo fa avevo pescato questo semplicissimo frequenzimetro con pic16f84a e lcd in un sito tedesco tra l'altro molto ben fatto (peccato x la lingua). Mi sembrava semplice e siccome mi serviva come strumento per una radio che avevo costruito (togliendo il valore di media freq) mi sono deciso di farlo ma a parte la scritta "Hallo" con, dopo uno spazio, un cursore lampeggiante mettendo sul pin 3 una frequenza da un generatore sinusoidale che arriva anche a 12vpp non segnava nulla. Chiedevo un aiuto per farlo andare in quanto la mia conoscenza di assembler e' alquanto scarsa. L'unica cosa HW che non ho fatto e' il reset. La cosa insolita e' il collegamento del RW che solitamente si abilita solo in scrittura almeno in questi progetti, mettendolo a massa.



ecco il link:



formatting link


per comodita' vi allego il listato asm. Premetto che ho usato un quarzo da 4MHz e un lcd 1x16.



P.S. non e' necessario triggerare l'ingresso?


Citazione: list p=16f84 ;************************************************************** ;* Pinbelegung ;* ---------------------------------- ;* PORTA: 0 - ;* 1 - ;* 2 - ;* 3 - ;* 4 - ;* PORTB: 0 LCD Display E ;* 1 ;* 2 LCD Display RS ;* 3 LCD Display R/W ;* 4-7 LCD Display D4 .. D7 ;* ;************************************************************** ; ;sprut (zero) Bredendiek 05/2000 (mod. 15.01.2002) ; ; LCD-Display mit Matrixtastatur ; ; Taktquelle: 4 MHz ; ;************************************************************** ; Includedatei für den 16F84 einbinden



#include



; Configuration festlegen ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator



__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC



;************************************************************** ; Variablen festlegen



w_copy Equ 0x20 s_copy Equ 0x21 LcdDaten Equ 0x22 LcdStatus Equ 0x23 loops EQU 0x24 loops2 EQU 0x25



; Constanten festlegen



PORTC equ PORTB ; LCD-Control-Port PORTD equ PORTB ; LCD-Daten-Port LcdE equ 0 ; enable Lcd LcdRw equ 3 ; read Lcd LcdRs equ 2 ; Daten Lcd (nicht control) Ini_con Equ B'00000000' ; TMR0 -> Intetupt disable Ini_opt Equ B'00000010' ; pull-up



;******************************************************** ; Das Programm beginnt mit der Initialisierung



Init bsf STATUS, RP0 ; Bank 1 movlw Ini_opt ; pull-up on movwf OPTION_REG movlw B'11111000' ; RA0 .. RA2 outputs, RA3, RA4 input movwf TRISA ; movlw B'00000000' ; PortB alle outputs movwf TRISB bcf STATUS, RP0 ; Bank 0 clrf PORTA clrf PORTB



movlw Ini_con ; Interupt disable movwf INTCON



call InitLCD ; Display initialisieren



; am LCD "Hallo" ausgeben



movlw 'H' movwf LcdDaten call OutLcdDaten movlw 'a' movwf LcdDaten call OutLcdDaten movlw 'l' movwf LcdDaten call OutLcdDaten movlw 'l' movwf LcdDaten call OutLcdDaten movlw 'o' movwf LcdDaten call OutLcdDaten



sleep Main goto Main



;***************************************************************** ;Zeitverzögerung um loops * 1 ms ; 4MHz externer Takt bedeutet 1MHz interner Takt ; also dauert 1 ms genau 1000 Befehle ; 110 Schleifen a 9 Befehle sind 990 Befehle = 0.99 ms ; die restlichen 10 Befehle für Einsprung und Rücksprung



WAIT top movlw .110 ; timing adjustment variable (1ms) movwf loops2 top2 nop ; sit and wait nop nop nop nop nop decfsz loops2, F ; inner loops complete? goto top2 ; no, go again ; decfsz loops, F ; outer loops complete? goto top ; no, go again retlw 0 ; yes, return from subWAIT



;********************************************************** ; Initialisierung des LCD-Displays



InitLCD movlw D'255' ; 250 ms Pause nach dem Einschalten movwf loops call WAIT



movlw B'00110000' ; 1 movwf PORTB bsf PORTB, LcdE nop bcf PORTB, LcdE



movlw D'50' ; 50 ms Pause movwf loops call WAIT



movlw B'00110000' ; 2 call Control8Bit movlw B'00110000' ; 3 call Control8Bit movlw B'00100000' ; 4 call Control8Bit



movlw B'00000001' ; löschen und cusor home call OutLcdControl movlw B'00101000' ; 5 function set, 4-bit 2-zeilig, 5x7 call OutLcdControl movlw B'00001000' ; 6 display off call OutLcdControl movlw B'00000110' ; 7 entry mode, increment, disable display-shift call OutLcdControl movlw B'00000011' ; 8 cursor home, cursor home call OutLcdControl movlw B'00001111' ; 9 display on call OutLcdControl return



; ein Steuerbyte 8-bittig übertragen Control8Bit movwf PORTB bsf PORTB, LcdE nop bcf PORTB, LcdE movlw D'10' movwf loops call WAIT return



; darauf warten, daß das Display bereit zur Datenannahme ist LcdBusy bsf PORTA, 1 ; Test LED 1 on bsf STATUS, RP0 ; make Port B4..7 input movlw B'11110000' iorwf TRISB, f bcf STATUS, RP0 BusyLoop bcf PORTC, LcdRs bsf PORTC, LcdRw ; Lesen bsf PORTC, LcdE nop movf PORTD, w movwf LcdStatus bcf PORTC, LcdE nop bsf PORTC, LcdE ; Enable nop bcf PORTC, LcdE btfsc LcdStatus, 7 ; teste bit 7 goto BusyLoop bcf PORTC, LcdRw bsf STATUS, RP0 ; make Port B4..7 output movlw B'00001111' andwf TRISB, f bcf STATUS, RP0 bcf PORTA, 1 ; Test LED 1 off return



; ein Byte mit Steuerdaten von LcdDaten zum Display übertragen OutLcdControl movwf LcdDaten call LcdBusy movf LcdDaten, w andlw H'F0' movwf PORTD ; Hi-teil Daten schreiben bsf PORTC, LcdE nop bcf PORTC, LcdE ; Disable LcdBus swapf LcdDaten, w andlw H'F0' movwf PORTD ; Lo-teil Daten schreiben bsf PORTC, LcdE nop bcf PORTC, LcdE ; Disable LcdBus return



; ein Datenbyte von LCDDaten zum Display übertragen OutLcdDaten bsf PORTA, 2 ; Test LED 2 on movwf LcdDaten call LcdBusy movf LcdDaten, w andlw H'F0' movwf PORTD ; Hi-teil Daten schreiben bsf PORTC, LcdRs ; Daten bsf PORTC, LcdE ; Enable LcdBus nop bcf PORTC, LcdE ; Disable LcdBus swapf LcdDaten, w andlw H'F0' movwf PORTD ; Lo-teil Daten schreiben bsf PORTC, LcdRs ; Daten bsf PORTC, LcdE nop bcf PORTC, LcdE ; Disable LcdBus bcf PORTC, LcdRs ; bcf PORTA, 2 ; Test LED 2 on return



end


Il 04 Gen 2006, 18:22, "spad83" ha scritto:

prova così

formatting link

stefano delfiore

-------------------------------- Inviato via

formatting link

Si e' questo scusate.

"stefano delfiore" ha scritto nel messaggio news: snipped-for-privacy@usenet.libero.it...

ha scritto:

antonio quale dei tre hai? sei sicuro che con il tuo generatore non stai sotto la soglia di lettura del frequenzimetro? intendo come frequenza io comunque un prescaler ce lo metterei se lo vuoi usare come frequenzimetro se lo devi collegare al tuo trasmettitore in un punto in cui non rischi di caricare l'oscillatore non ci sono problemi credo comunque molto carini come progetti peccato la lingua che nn la capisco quasi quasi lo provo...

Io ho fatto questo da max 50MHz pero' per prova ho messo quello del codice che mi sembra a 4MHz. Ci metterei in ingresso un bel transistor a farmi da trigger. Il codice lo sai valutare? Io conosco un po' il c e il basic (mikrobasic). Questo e' il link al progetto.

formatting link
Il 04 Gen 2006, 18:22, "spad83" ha scritto:

antonio quale dei tre hai? sei sicuro che con il tuo generatore non stai sotto la soglia di lettura del frequenzimetro? intendo come frequenza io comunque un prescaler ce lo metterei se lo vuoi usare come frequenzimetro se lo devi collegare al tuo trasmettitore in un punto in cui non rischi di caricare l'oscillatore non ci sono problemi credo comunque molto carini come progetti peccato la lingua che nn la capisco quasi quasi lo provo...

sinceramente ora su due piedi non riesco proprio a guardarti il codice sorry ma per il fatto del codice puoi provarli tutti e tre indifferentemente tanto lo schema =E8 lo stesso :) x il transistor in ingresso non credo ci siano problemi se vai di generatore... magari sparaci dentro un segnale a onda quadra al 50 percento di deauticycle =E8 strano che non t riveli niente.. prova a variare la frequenza e a ricontrollare i collegamenti tra il generatore e la scheda e prova gli altri software nn so come aiutarti ma facci sapere se riesci che sono proprio curioso di sapere come va ciao!!

"Antonio" ha scritto nel messaggio

Io ne ho montato uno leggermente differente e funziona, se vuoi il progetto confermami se la tua email e' valida.

Ciao Celso

.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.

pagina d'elettronica:

formatting link
`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.

----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----

formatting link
The #1 Newsgroup Service in the World! 120,000+ Newsgroups

----= East and West-Coast Server Farms - Total Privacy via Encryption =----

per antonio: non =E8 che il tuo problema sta nel quarzo che =E8 da 4 Mhz contro quello di loro che =E8 da 10Mhz se il frequenzimetro si calcola i tempi di riferimento sulla base di quello... ecco che si sfalsa tutto.. per celsius: non =E8 che me lo puoi mandare anche a me se non disturba la mia mail =E8 valida

per antonio: non =E8 che il tuo problema sta nel quarzo che =E8 da 4 Mhz contro quello di loro che =E8 da 10Mhz se il frequenzimetro si calcola i tempi di riferimento sulla base di quello... ecco che si sfalsa tutto.. per celsius: non =E8 che me lo puoi mandare anche a me se non disturba la mia mail =E8 valida grazie mille

Si la mia mail e' valida. Ti ringrazio. Stasera ho fatto il circuito di ingresso con un transistor a emittore comune e riesco a ottener in uscita sul pin3 (che ha al suo interno un trigger di schmitt) un segnale da 4vpp anche abbastanza squadrato anche se non serve ma non rileva lo stesso. Provero' l'altro sw e per ultimo cambo il pic che magari a quella porta fusa. Celcius il sorgente in che linguaggio e'?

"spad83" ha scritto nel messaggio news: snipped-for-privacy@o13g2000cwo.googlegroups.com... per antonio: non è che il tuo problema sta nel quarzo che è da 4 Mhz contro quello di loro che è da 10Mhz se il frequenzimetro si calcola i tempi di riferimento sulla base di quello... ecco che si sfalsa tutto.. per celsius: non è che me lo puoi mandare anche a me se non disturba la mia mail è valida grazie mille

"spad83" ha scritto nel messaggio

Ho provato a spedirtelo due volte ma la tua casella non accetta allegati, dammi un altro indirizzo email.

Ciao Celso

.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.

pagina d'elettronica:

formatting link
`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.

----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----

formatting link
The #1 Newsgroup Service in the World! 120,000+ Newsgroups

----= East and West-Coast Server Farms - Total Privacy via Encryption =----

"spad83" ha scritto

"""; Prozessor-Takt 10 MHz (Quarz!!)"""

L'ho ricevuto. Grazie L'antivirus accetta solo gli zip

"Celsius" ha scritto nel messaggio news:1136417712 snipped-for-privacy@spool6-east.superfeed.net...

News==----

Newsgroups

=----

=E8

=B7=B4=AF`=B7.=B8=B8.=B7=B4=AF`=B7.=B8=B8.=B7=B4=AF`=B7.=B8=B8.

=B7=B4=AF`=B7.=B8=B8.=B7=B4=AF`=B7.=B8=B8.=B7=B4=AF`=B7.=B8=B8.

t News=3D=3D----

Newsgroups

=3D----

"spad83" ha scritto nel messaggio

Si.

Ho provato questo e non e' tornato indietro, dimmi se e' arrivato. PS: usa ASCII puro per spedire i msg altrimenti devo quotare manualmente.

Ciao Celso

.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.

pagina d'elettronica:

formatting link
`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.

----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----

formatting link
The #1 Newsgroup Service in the World! 120,000+ Newsgroups

----= East and West-Coast Server Farms - Total Privacy via Encryption =----

X Spad83 ho eseguito anche il codice x 4MHz ma non va lo stesso. Provero' a farmene uno io di sw in mikrobasic o in c oppure faccio il ciurcuito di Celsius. Volevo testare TMR0 che dovrebbe incrementarsi ad ogni evento del pin TOKI per provare l'HW prima di desistere.

"Antonio" ha scritto nel messaggio news:CXXuf.16175$ snipped-for-privacy@tornado.fastwebnet.it...

comune

ma

Buona notizia questo circuito semplicissimo ha funzionato alla prima. Andate in questo sito

formatting link
e cercate Autoranging frequency meter Ricordatevi di mettere la resistenza di pull-up sul pin d'ingresso. Nell'asm c'e' lo schema.

"Antonio" ha scritto nel messaggio news:UHbvf.17089$ snipped-for-privacy@tornado.fastwebnet.it...

di

serve

grande antonio!! ora non t resta che lavorare per fare il prescaler!!

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required