TMR0 16f84a
Moderátor: Moderátoři
TMR0 16f84a
Mám ještš jeden problém: nefunguje mi TMR0, mám ho nastavený, aby čítal impulsy na RA4, poté ho přesouvám do W a následně zobrazuji binárně na port B. a je v něm pořád 1, nic se neděje. Kde asi dělám chybu? Prosím poraďte. Díky
Já bych to napsal tak
;***************************************
nějaká hlavička pprogramu, tzn. nadefinování proměných atd
;***************************************
poté
org h"00"
goto start_programu
org h"04"
goto preruseni
;***************************************
ted ta čás co jsi měl, nevím tet jestě jestli máš dobře nastený option registr ae snad jo
startprogramu BSF STATUS,RP0
clrf trisb
BCF STATUS,RP0
movlw b'11101000'
option
stop goto stop ;zde jakoby zastavíš procesor a čeká jenom na přerušení
proruseni movlw tmr0
movwf portb
goto Stop
Snad jsi to pochopil pokud ne tak dej vědět.
;***************************************
nějaká hlavička pprogramu, tzn. nadefinování proměných atd
;***************************************
poté
org h"00"
goto start_programu
org h"04"
goto preruseni
;***************************************
ted ta čás co jsi měl, nevím tet jestě jestli máš dobře nastený option registr ae snad jo
startprogramu BSF STATUS,RP0
clrf trisb
BCF STATUS,RP0
movlw b'11101000'
option
stop goto stop ;zde jakoby zastavíš procesor a čeká jenom na přerušení
proruseni movlw tmr0
movwf portb
goto Stop
Snad jsi to pochopil pokud ne tak dej vědět.
Vektor přerušení nemám, to je věc, se kterou jsem zatím nepracoval. Totiž já jsem s pic začal ze zájmu, sice už to nějaký pátek je, ale vzhledem k tomu, že se jimi zabývám jen když mám možnost, prokousávám se dost pomalu kupředu. No a přerušení jsem tenkrát nějak jen naťukl a protože jsem ho nepotřeboval, tak jsem se zabýval jinými problémy. Nějaký program, který mi řídí bufíka v autě, už jsem stvořil, ale protože ho chci zdokonalit, potřebuji snímat hallovým snímačem otáčky ventilátoru a v závislosti na nich měnit jeho výkon (zp. vazba). Zkoušel jsem ty impilsy ze snímače čítat do registru, ale nastal problém se zpožděním proc. při měření. Prostě buď se čítaly impulsy, nebo regulovalo. Impulsy jsou relativně pomalé, měření muselo trvat poměrně dlouho... Prostě tudy cesta asi nevede. A tak mne napadlo použít TMR0, o kterém se domnívám, že by mohl čítat při každem cyklu, procesor by mohl stíhat regulaci a podle potřeby bych se jen ptal na stav TMR0 nebo ho nuloval. Je to reálný?
RADIX DEC
CONFIG 0x3FF9
CBLOCK 0x0C
ENDC
ORG 0
CLRF TMR0
BSF STATUS,RP0
MOVLW B'11111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00011111'
MOVWF OPTION_REG
MOVLW B'00011111'
MOVWF INTCON
BCF STATUS,RP0
ZPOMAL1 equ 12h
ZPOMAL2 equ 13h
ZPOMAL3 equ 14h
ZPOMAL4 equ 15h
START MOVF OPTION_REG,0
MOVWF PORTB
CALL cas0
GOTO START
cas0 movlw 1
movwf ZPOMAL4
NASTAV1 movlw 1
movwf ZPOMAL3
NASTAV2 movlw 20
movwf ZPOMAL2
NASTAV3 movlw 10
movwf ZPOMAL1
clrwdt
NASTAV4 decfsz ZPOMAL1,1
goto NASTAV4
decfsz ZPOMAL2,1
goto NASTAV3
decfsz ZPOMAL3,1
goto NASTAV2
decfsz ZPOMAL4.1
goto NASTAV1
return
Jasně, to jsem se upsal, dík. Ale v předchozích pokusech jsem to měl správně a stejně to nechodilo. V tom programu výše uvedeném se snažím zobrazit Option - výsledkem je celý portb na log. 1. Kde jen dělám tu zásadní chybu???
CONFIG 0x3FF9
CBLOCK 0x0C
ENDC
ORG 0
CLRF TMR0
BSF STATUS,RP0
MOVLW B'11111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00011111'
MOVWF OPTION_REG
MOVLW B'00011111'
MOVWF INTCON
BCF STATUS,RP0
ZPOMAL1 equ 12h
ZPOMAL2 equ 13h
ZPOMAL3 equ 14h
ZPOMAL4 equ 15h
START MOVF OPTION_REG,0
MOVWF PORTB
CALL cas0
GOTO START
cas0 movlw 1
movwf ZPOMAL4
NASTAV1 movlw 1
movwf ZPOMAL3
NASTAV2 movlw 20
movwf ZPOMAL2
NASTAV3 movlw 10
movwf ZPOMAL1
clrwdt
NASTAV4 decfsz ZPOMAL1,1
goto NASTAV4
decfsz ZPOMAL2,1
goto NASTAV3
decfsz ZPOMAL3,1
goto NASTAV2
decfsz ZPOMAL4.1
goto NASTAV1
return
Jasně, to jsem se upsal, dík. Ale v předchozích pokusech jsem to měl správně a stejně to nechodilo. V tom programu výše uvedeném se snažím zobrazit Option - výsledkem je celý portb na log. 1. Kde jen dělám tu zásadní chybu???
Hmm, to je divný.
Chyby máš 2, ale asi by se mìly projevovat jinak.
1) Když èteš OPTION_REG, tak jsi zrovna v nulté stránce. Musíš dát pøed ètení BSF STATUS,RP0 a za ètení zase BCF STATUS,RP0. Takhle se ti neète OPTION_REG, ale TMR0, což je ale divný, protože pak by se ty hodnoty mìly mìnit a ne být trvale na 1.
2)Stejnou chybu máš hned na zaèátku, kde nuluješ TMR0, ale nepøepnul ses do nulté stránky. Takhle mùžeš nulovat i OPTION_REG. Ono se to asi neprojeví, protože bit RP0 je po inicializaci nastavenej na 0, ale není to hezké.
Takže nevím, proè to nejde. Kdyžtak to zkus oživovat postupnì. Nejdøív si vyzkoušej porty. Tøeba na ten B dávej konstantu a koukej, jestli tam je. Pak zkoušej složitìjší vìci. Taky ten PIC mùže být spálenej?
Chyby máš 2, ale asi by se mìly projevovat jinak.
1) Když èteš OPTION_REG, tak jsi zrovna v nulté stránce. Musíš dát pøed ètení BSF STATUS,RP0 a za ètení zase BCF STATUS,RP0. Takhle se ti neète OPTION_REG, ale TMR0, což je ale divný, protože pak by se ty hodnoty mìly mìnit a ne být trvale na 1.
2)Stejnou chybu máš hned na zaèátku, kde nuluješ TMR0, ale nepøepnul ses do nulté stránky. Takhle mùžeš nulovat i OPTION_REG. Ono se to asi neprojeví, protože bit RP0 je po inicializaci nastavenej na 0, ale není to hezké.
Takže nevím, proè to nejde. Kdyžtak to zkus oživovat postupnì. Nejdøív si vyzkoušej porty. Tøeba na ten B dávej konstantu a koukej, jestli tam je. Pak zkoušej složitìjší vìci. Taky ten PIC mùže být spálenej?
Děkuji za informace, nemám teď možnost vše odzkoušet, snad večer. Pic je ok, když do něj nahraju jiný program, vše je v pohodě. Chyba je v programu. Ještě bych se chtel zeptat, jak by se měl zapojit, jestli to není problém, procesor na počítač, abych ho nemusel neustále přendávat z programátoru (Pony prog) do zkušební desky (doma dělaná, obsahuje pouze krystal, na PA tlačítka a na PB LED). To jsou už stovky vyndat/zandat...
A ještě jeden dotaz: když budu mít SW v pořádku, bude se v TMR0 zvyšovat stav s každým impulsem na RA 4? Nezávisle na pracovním kmitočtu procesoru? Ten je mnohonásobně vyšší, než pulsy na RA 4.
A ještě jeden dotaz: když budu mít SW v pořádku, bude se v TMR0 zvyšovat stav s každým impulsem na RA 4? Nezávisle na pracovním kmitočtu procesoru? Ten je mnohonásobně vyšší, než pulsy na RA 4.
Já jsem taky ten PIC poøád zandaval a vyndaval. Nìjak to ale zapojit jde, aby se programoval uvnitø zapojení. Je to popsáno v datasheetu. Já to ale nikdy nepoužil.
Ty máš v OPTION_REG hodnotu B'00011111'. Proto se ti bude TMR0 zvyšovat podle hodin PICu, každý takt o jednièku. RA4 to bude ignorovat.
Pokud chceš, aby TMR0 èítal impluzy na RA4, tak musíš zmìnit hodnotu v OPTION_REG na B'00101111' nebo B'00111111'. Ta první hodnota zpùsobí, že to reaguje na vzestupnou hranu, ta druhá na sestupnou.
Já to teda nikdy nepoužil, ale podle datasheetu to tak má být.
Ty máš v OPTION_REG hodnotu B'00011111'. Proto se ti bude TMR0 zvyšovat podle hodin PICu, každý takt o jednièku. RA4 to bude ignorovat.
Pokud chceš, aby TMR0 èítal impluzy na RA4, tak musíš zmìnit hodnotu v OPTION_REG na B'00101111' nebo B'00111111'. Ta první hodnota zpùsobí, že to reaguje na vzestupnou hranu, ta druhá na sestupnou.
Já to teda nikdy nepoužil, ale podle datasheetu to tak má být.
Teprve ted jsem se dostal zase k pracovnímu stolu, přepsal jsem v reg option jednu nulu na jedničku, nahrál do procesoru a ono to dělá, co má, t.j. čítá a zobrazuje impulsy. Několik dní se s tím po večerech trápím a popravdě řečeno, nechápu, kde jsem dělal tu chybu. Konkrétně tento registr byl nejsledovanější a myslím, že jindy jsem tam tuto chybu sice neměl, ale byla tam zase jiná. Např. nesprávná banka.
Fajn, mám radost. Děkuji za rady, dál zase pokročím sám a až zase narazím a nebudu si vědět rady, poprosím tě ještě o postrčení kupředu. Ještě jednou dík a pokud by se mi podařilo to programování v zapojení, ozvu se také.
Fajn, mám radost. Děkuji za rady, dál zase pokročím sám a až zase narazím a nebudu si vědět rady, poprosím tě ještě o postrčení kupředu. Ještě jednou dík a pokud by se mi podařilo to programování v zapojení, ozvu se také.