Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PIC18F1220 problemi sa Timer0

[es] :: Elektronika :: Mikrokontroleri :: PIC18F1220 problemi sa Timer0

[ Pregleda: 2301 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pioneer cdj 200
Rovinj

Član broj: 150380
Poruke: 1279
*.adsl.net.t-com.hr.

Sajt: www.crotehnika.com


+18 Profil

icon PIC18F1220 problemi sa Timer007.12.2014. u 16:39 - pre 114 meseci
Imam jedan problem i hitno mi je (jer moram večeras predati zadaću). Dakle koristim Timer0 s prekidom za brojanje 5 sekundi, PIC radi na 10 kHz i treba mi 16-bitni counter. Stvar je da 16-bitna opcija na Timer0 ne radi! Kad stavim 8-bitni, uredno generira prekide, ali kad prebacim na 16-bitni, ništa. I onda sam se malo igrao i shvatio da on broji samo niže bitove odnosno TMR0L a TMR0H ne mrda od postavljene vrijednosti. A budući da se prekid izaziva kod prelaska sa FFFF na 0000, prekida neće nikad biti jer moj counter očito kad dođe na 00FF, prelazi opet u 0000, gornji bitovi se nikad ne mjenjaju! Kako je to moguće!??

A do tog zaključka sam došao tako što sam u main dijelu programa, unutar while(1) petlje probao staviti neki if (TMR0L = 0xFE) npr. i uredno se izvrši ono što je unutar if uvjeta. I ako recimo stavim if(TMR0H = početna_vrijednost) isto tako će se izvršiti. Ako stavim if(TMR0H = 0x05) npr a početna vrijednost je 0x00, nikad neće ući u taj if.

EDIT: budući da radim u Proteusu simulaciju, stavio sam u Watch Window timer kao Internal Timer 0 i tamo se svih 16-bitova inkrementira i debugger pokazuje neku aktivnost kad sa FFFF prede u 0000 ali prekid i dalje ne radi. Je li to bug u programu? Evo moj kod:

Code:

/* Main.c file generated by New Project wizard
 *
 * Created:   uto pro 2 2014
 * Processor: PIC18F1220
 * Compiler:  MPLAB C18
 */

#include <p18f1220.h>

#pragma config WDT = OFF
#pragma config PWRT= ON
#pragma config MCLRE=OFF

void high_isr(void); // prototip prekidne rutine

#pragma code high_vector=0x08 // direktiva pretprocesoru – slijedi
                              // prekidni vektor

void interrupt_at_high_vector(void)
{
   _asm GOTO high_isr _endasm // skoci na prekidnu rutinu
}

#pragma code // kraj prekidnog vektora

#pragma interrupt high_isr // direktiva pretprocesoru - slijedi prekidna rutina visokog prioriteta

void high_isr (void)
{
   PORTB = 0xFF;
}

#pragma code // kraj programskog koda prekidne rutine

void main()

   PORTB = 0; // Brisanje porta B
   TRISB = 0; // Svi portovi porta B izlazni
   INTCON = 0xA0; // Uključivanje prekida
   T0CON = 0x88; // Postavljanje i pokretanje brojaca, 16-bit, interni clock, bez prescalera*/
   TMR0L = 0x00;
   TMR0H = 0xFF; // 0x09
    
   while (1){
   }
}


[Ovu poruku je menjao Pioneer cdj 200 dana 07.12.2014. u 17:55 GMT+1]
...njemu i kućno zvonce zvoni u A klasi... hh
 
Odgovor na temu

foxhunter1
KN03NL

Član broj: 234323
Poruke: 238
*.dynamic.isp.telekom.rs.



+48 Profil

icon Re: PIC18F1220 problemi sa Timer007.12.2014. u 16:56 - pre 114 meseci
T0CON: TIMER0 CONTROL REGISTER

bit 6 T08BIT: Timer0 8-bit/16-bit Control bit

1 = Timer0 is configured as an 8-bit timer/counter
0 = Timer0 is configured as a 16-bit timer/counter

Ne znam koji je kompajler u pitanju i kako odredjujes 8 ili 16 bitni mod. Jesi li probao direktno da inicijalizujes T0CON registar?

T0CON.6 = 0 // 16 bitni mod

U medjuvremenu si dodao kod, pa sam video da si vec uradio ovo sto sam ja napisao... nisam ti od neke pomoci?
73 de YU1OL
 
Odgovor na temu

Pioneer cdj 200
Rovinj

Član broj: 150380
Poruke: 1279
*.adsl.net.t-com.hr.

Sajt: www.crotehnika.com


+18 Profil

icon Re: PIC18F1220 problemi sa Timer007.12.2014. u 17:25 - pre 114 meseci
Kompajler je C18, radim u Proteusu (simulacija, ne pravi hardverski PIC). Ovo je sve prolupalo :/ Dakle odustao sam od 16-bitnog i otišao na 8-bitni. Frekvencija je 10 kHz, postavio sam prescaler na 1:4, i još se frekvencija djeli sa 4 uopće na ulazu u oscilator, je tako? Dakle 10 000 / 16 je 625. Pošto mogu brojati do 255, namjestio sam brojilo da broji do 125 i tako mora brojati 5 puta da bi dobio 1 sekundu. Pošto meni treba 5 sekundi, stavio sam varijablu s vrijednošču 25 koja se na svaki prekid umanjuje i kad dođe do nule, onda napravi ono što bi trebao. dakle 25 * 125 (brojilo) * 4 (prescaler) * 4 (zbog Fosc/4) = 50 000. Kako je frekvencija 10 000, to je točno 5 sekundi. Međutim, on uopće ne čeka 5 sekundi nego puno manje. Tek kad mu stavim varijablu u 500 umjesto 25, onda čeka nešto manje od 5 sekundi. Koji vrag se tu dešava !?

EDIT: našao problem za ovo drugo, zaboravio sam zaustaviti brojilo kad obavi što ima
...njemu i kućno zvonce zvoni u A klasi... hh
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: PIC18F1220 problemi sa Timer007.12.2014. u 17:46 - pre 114 meseci
C18 ili XC8?
proteus ti nije bas siguran za rad, hw ume cesto drugacije da se ponasa
16bitni tajmer mora da sljaka ako si ga dobro podesio, ako ti radi samo donji bajt znaci da nisi konfigurisao, ne znam kakav ti je profa ali ako mu doneses zadatak tako nabudzen nece mu se svideti!!
ne vidim kako si setovao RCON, da li ti je enabled priority ili ne, pogledaj stranu 74 datasheet-a


 
Odgovor na temu

Pioneer cdj 200
Rovinj

Član broj: 150380
Poruke: 1279
*.adsl.net.t-com.hr.

Sajt: www.crotehnika.com


+18 Profil

icon Re: PIC18F1220 problemi sa Timer007.12.2014. u 17:56 - pre 114 meseci
Pa ako radi 8-bitni, ne bi li trebao raditi i 16-bitni? RCON nisam ni dirao, niti išta oko prioriteta jer sam se vodio tom logikom da ako radi 8-bitni, mora i 16-bitni. Dakle treba i to ispodešavati?
...njemu i kućno zvonce zvoni u A klasi... hh
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: PIC18F1220 problemi sa Timer007.12.2014. u 18:03 - pre 114 meseci
ne znam taj pic direkt ali ima retardiranih resenja tipa osmobitni
interapt ide na high a 16bitni na low priority i tako neke retardacije
... dodatno pitanje kako proteus postavlja inicijalno vrednosti tako da
ne smes da racunas na proteusov default vec lepo sam podesis sve .. u
tvom slucaju najbolje ugasis prioritete skroz i to je to

u svakom slucaju proteus je vrlo nesiguran tu..
 
Odgovor na temu

Pioneer cdj 200
Rovinj

Član broj: 150380
Poruke: 1279
*.adsl.net.t-com.hr.

Sajt: www.crotehnika.com


+18 Profil

icon Re: PIC18F1220 problemi sa Timer007.12.2014. u 18:17 - pre 114 meseci
Hvala, budem se probao poigrati s tim, iako sam već gotovo pa napisao na ovakav način. Koliko vidim, i ostali kolege su koristili 8-bitni, ja sam namjerno htio 16-bitni jer je puno precizniji. Budući da se gubi neko vrijeme na poziv prekidnom potprograma, nije isto da li za svaku promjenu stanja treba pozivati 25 puta prekidni potprogram ili samo jednom. Ovako imam odstupanja od gotovo čitave sekunde, iako me u zadatku traži upravo da izmjerim odstupanja i objasnim radi čega nastaju. Ali pretpostavljam da i sa 16-bitnim to neće biti baš 5 sekundi ravnih.

EDIT: pogodio si ga ravno u srž! Stavio sam RCON u 0 i eto radi :) Malo mi je retardirano to da ovisno da li je 8/16 bit izaziva prekid niskog ili visokog prioriteta, nikad mi to ne bi palo na pamet. Hvala!
...njemu i kućno zvonce zvoni u A klasi... hh
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC18F1220 problemi sa Timer0

[ Pregleda: 2301 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.