Hej Nu har jag en fundering till angående pic 16f84 krets

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

Hej Nu har jag en fundering till angående pic 16f84 krets

Inlägg av Markus »

Hej på er era pic gudar. Nu ska jag ger er en lätt fråga.

Frågan lyder:

Jag har en PIC16f84A krets. Den vilj jag ha en timer0 fördröjning på 25 ms. Men jag börjar och räkna på det. Det värkar som det inte går PGA det inte finns ett större TRM0 register än 8 bitar att skriva till. för om man räknar på det så blir det följande värde som ska matas in i TRM0. se beräkningar nedan.

Upggifter som är givna och satta via Konfigruering

Prescale= 1:256
kristallen 20MHZ
8-bitars TRM0 register
Fördröjningstiden jag vill ha är 25 ms.


0.02*20000000=500 000 instruktioner

500 000/prescale=500 000/256=1953 instruktioner.

FF i Timer0 som är det högsta värdet =255. skiljer en aning mellan 1953 och 255; 255-1953=-1698 instruktioner. Jag går back med dessa instruktioner.

Min fråga är vad fan gör jag.Dom alternativ jag fundera på att göra är följande.

Ena är att köpa en ic-krets som har 16 bitarts Timer 0 register. Problemet blir att jag vill bara ha en krets med 18 benars Dil sockel precis som Pic16f84 kretsen har. Så min första fråga blir finns det någon krets med 18 bens dil sockel med 16 bitars Timer 0 register. Varför jag inte kan ha större krets är rent fysika problem. Har ingen mer plats på kopplingsplattan.Plattan är precis anpassad till där han ska sitta sedan. Vil bara ha en anna krets med samma antal ben på ,men med 16 bitars Timer 0 register i stället för 8 bitar som jag har nu.Någon som vet om någon lämplig krets.

Andra frågan är om man kunde påverka oscillatorn. alltså kristallen som har en grundfrekvens på 20 MHZ och ställa ner den så att jag kommer under 255 instruktioner skulle då enligt mina beräkningar vara under .

255*256=65280 instruktioner=> 65280/0.025=2,6 MHZ. Alltså om man kör med samma fysik utrustning men stryper kristallen med konfigruationer inne i pic:en. så slipper jag göra något. Går det frågar jag mig?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Varför måste just *TMR0* ha 16 bitar ????
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

1: Varför designa en grej med en F84???
2: Varför skulle det inte gå att klara fördröjningen med Timer0?
3: Och om du verkligen ska fördröja.... varför använda 20MHz kristall?
4: Precis som sodjan skriver: varför just Timer0?

Man klarar längre fördröjningar vid att räkna ett antal korta, alltså om du kan sätta timern (<-OBS:ingen specifik) till att t.ex. ge 5ms interrupt, då är det bara att räkna 5 st, sen är det klart.
Markus
Inlägg: 105
Blev medlem: 4 november 2005, 02:35:06
Kontakt:

varför timer0 16 bitars

Inlägg av Markus »

har redan förklart pga 8-bitar timer 0 räker inte till. Vet ni något sätt att fixa till det förutom det som icecap nämde.går det att strypa hastigheten med hjälp av picen så att hastigheten går med 20 mhz extern men hastigheten internt är lägre typ under 2.6 MHZ. finns det någon sådan konfrigurering. Vad finns det för andra pic processorer som jobbar med 16 bitar timer 0 och som har 18 pinnars dil sockel.finns det några sådana så skulle problemet vara löst. om jag inte byggersom icecap sa.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En gång till, varför envisas du med att använda TRM0 ??

Duger inte TMR1 eller 2 ?

Jag känner inte till någon PIC med 16 bitars TMR0, jag använder
TMR1 eller TMR2 i sådana fall...
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Om kristallen går med 20 MHz får du 5 miljoner instruktioner / sekund. (1/4-del)

Jag föreslår att du fixar timerinterrupt varje millisekund. I interruptet ökar du en variabel. När variabeln har blivit 25 gör du det du ville göra efter fördöjningen samt nollställer variabeln.

Du får 5000 instruktioner på 1 ms. Använd presc 32 och minska TMR0 med 156 vid varje interrupt så blir det ungefär 1 ms. Vill du ha det mer excakt kan du minska med 157 var fjärde gång.

Eller så gör som de andra skriver, byt krets till en med fler timers och större möjligheter.
Skriv svar