frequenzimetro con pic in asm

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

Reply to
Antonio
Loading thread data ...

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

prova così

formatting link

stefano delfiore

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

formatting link

Reply to
stefano delfiore

Si e' questo scusate.

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

ha scritto:

Reply to
Antonio

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...

Reply to
spad83

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...

Reply to
Antonio

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!!

Reply to
spad83

"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 =----

Reply to
Celsius

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

Reply to
spad83

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

Reply to
spad83

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

Reply to
Antonio

"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 =----

Reply to
Celsius

"spad83" ha scritto

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

Reply to
Airone

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

=----

Reply to
Antonio

=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----

Reply to
spad83

"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 =----

Reply to
Celsius

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

Reply to
Antonio

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

Reply to
Antonio

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

Reply to
spad83

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.