Extern 32.768 kHz cristal för timer1, problem..

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ASTRX
Inlägg: 68
Blev medlem: 12 januari 2005, 16:58:13

Extern 32.768 kHz cristal för timer1, problem..

Inlägg av ASTRX »

håller på att pilla till en realtidsklocka med en atmega8535 men har stött på ett problem. jag började med att klocka timern med avseende på systemklockan som fås av den interna oscillatorn @ 1Mhz. jag valde då prescaler på 1024 och en compare match interrupt vid 976 avbrott. det ger ett avbross varje:

1000000/(1024*976)=1.000576332 s

vilket gör att klockan drar sig typ 2s/tim. och då har jag ändå räknat med att den interna oscillatorn går i exakt 1 MHz, vilket ju inte är fallet i verkligheten. Detta är ju kass.

Så jag vill ha en extern 32.768 kHz kristall som jag kopplar in över T0/T1. men när jag ändrar min clock-select på timern till extern så får jag inga avbrott alls?!!

jag har bara kopplat in kristallen direkt, utan capacitanser eller nåt. vart har jag klantat mig?
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nu kan jag inte AVR men på PIC måste man även berätta för timern att den ska starta oscillatorn...
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Du måste nyttja timer2 till T0/T1.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Det är pinnarna TOSC1 och TOSC2 som gäller om du ska köra med en extra klockkristall. Kolla databladet.

Se även AVR134: Real-Time Clock using the Asynchronous Timer
ASTRX
Inlägg: 68
Blev medlem: 12 januari 2005, 16:58:13

Inlägg av ASTRX »

cykze: ni säger ju olika saker. i databladet står det att när man väljer extern kristall för timer1 så står det "External clock source on T1-pin, clock on rising edge.". alltså ska man inte använda TOSC1/TOSC2 när man använder timer1, eller hur?

PaniC: däremot med timer2 som man kan köra i asyncronous mode där ska man använda TOSC1/TOSC2 genom att sätta AS2-biten till 1.

jag kan ju inte använda timer2 eftersom den bara är 8 bitar och jag behöver 16 för att representera 32768, alltså timer1.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

"External clock source on T1-pin..." betyder att om du vill klocka den med en extern klocka ska denna klocka kopplas till T1-pinnen.

Detta har INGET att göra med extern kristall.

Edit: Men vad med att vara lite smart i stället: ta ett 1,024MHz kristall och sätt som systemklocka.....
ASTRX
Inlägg: 68
Blev medlem: 12 januari 2005, 16:58:13

Inlägg av ASTRX »

Jahaaa :) så jag ska koppla kristallen till TOSC1/TOSC2 även om jag använder timer1? men hur berättar jag för timern att den ska använda den källan? verkar ju som om bara timer2 har den funktionen?

annars får jag göra som du säger och använda en 1.024MHz kristall som systemklocka. hittade iofs bara en 4.096Mhz kristall på elfa ( 74-502-08 ) , men det borde ju funka lika bra.
men eftersom jag är helkass på capacitanser osv så undrar jag om jag behöver några externa kondensatorer till kristallen?

EDIT: upptäckte nu att jag kan ju använda min 32.768kHz kristall som systemklocka. och då kan jag dessutom använda interna capacitanser och slipper externa genom att programmera CKOPT. hastigheten borde ändå räcka gott och väl. låter bra va? :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Det är bara Timer2 som kan användas tillsammans med en klockkristall på TOSC-pinnarna.

Fördelen med en extern klockkristall (32768 Hz) till TOSC-pinnarna är att den även går när AVR:en är i strömsparläge.

32768 Hz som systemklocka går nog lite väl långsamt.
ASTRX
Inlägg: 68
Blev medlem: 12 januari 2005, 16:58:13

Inlägg av ASTRX »

ja det går långsamt, men inte för långsam skulle jag tro. det som skall göras mellan interrupten borde med råge hinnas med inom 1 sekund, även med en 32khz-kristall, eller hur. alternativet är en extern snabb kristall. får se om det fungerar bra med en 32khz annars får det bli en 4.096MHz kristall.

man måste ju inte ha snabbare klocka än vad systemet kräver.
bearing
Inlägg: 11674
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Om du har simuleringsprogram kan du ju kolla om det som ska göras mellan interrupten använder mindre än 32768 cykler (-marginal för interrupt osv.)
ASTRX
Inlägg: 68
Blev medlem: 12 januari 2005, 16:58:13

Inlägg av ASTRX »

satte CKOPT till 1 och klock-fusarna till low-frequency external crystal (CKSEL=1001, SUT=10) men då dog hel uC:n. den tappade kontakten med programmeraren och efter ett antal försök med att high-voltage erase och justering av stk500:ans clockfrekvens så lyckades jag få igång den. men nu funkar det inte att läsa från programminnet, bara skriva???

i övrigt verkar den fungera som den ska. men man blir ju lite rädd för att prova med extern kristall igen när det händer sådär :?
ASTRX
Inlägg: 68
Blev medlem: 12 januari 2005, 16:58:13

Inlägg av ASTRX »

fick det att fungera. tänkte inte på att timer2 kunde köras med prescaler. nu kör jag en extern kristall på TOSC1/TOSC2 och en prescaler på 256. sedan ett compare match interrupt som genereras när räknaren blir 128. funkar super. tack för all hjälp.
Användarvisningsbild
manw
Inlägg: 207
Blev medlem: 16 november 2005, 11:16:17
Ort: Södermalm

Tips på extern oscillator

Inlägg av manw »

Jag behövde Timer1 till annat (16bit frekvensräknare), och 1 sekunds interupt via Timer0, samma problem som i tråden.

Byggde en extern kristalloscillator med en inverterare i en 74HCT14 krets:
- 9,1 Mohm från ingång till utgång på inverteraren.
- 470 kohm från utgången från inverteraren till ena kristallbenet.
- Andra kristallbenet till ingången på inverteraren.
- Från varje kristallben 27pF till jord.

Funkade bra, men låg något fel i frekvens, tror att det beror på att jag valt lite fel värden på komponenterna, men om man filar vidare på det. På detta sätt kan Timer0 användas till ett 1s interrupt om man nu vill använda Timer1 till annat.
Skriv svar