ankan skrev:Okey det fungerade.. Så alltså är alla mina kristaller trasig eller så har jag börjat koppla fel på något konstigt sätt.
Kristallen ska väll kopplas mellan T1OSI och T1OSO och sedan ska det kopplas en konding mellan T1OSI och jord och en konding mellan T1OSO och jord.
Jag fattar inte vad som har börjat bli fel!
Ja det ska vara kondingar kopplade som du beskrivit. Men inte vilka som helst, kolla datablad för din kristall, men gissningsvis funkar 15-20pF.
Men som jag fattat det så ska du väcka processorn ur sleep med extern klocka på timer1? Då måste den vara inställd rätt, du får inte synka med 8MHz-kristallen bl.a. Jag har gjort så här: (Men skall nämna att jag har strul att köra igång resten av koden när den vaknat ur sleep och ska köra programmet från main igen).
PIETemp = PIE1; //Sparar undan inställningarna
temp = T1CON;
CCP1Temp = CCP1CON;
T1OSCEN = 1; //Starta 32kHz-osc.
ms = 103; //OSC-start up delay
while(ms>1); //Avbrotts baserad delay
TMR1L = TIOSEKL; //Ladda TIMER1 för 10sek-avbrott
TMR1H = TIOSEKH;
CCP1CON = 0x00;
T1CON = 0b00111111; //Prescaler = 1/8, enable ext
osc, ej synk, T1 på EXTERN osc,
TMR1ON = ON.
Sleep = 1; //Sleepflagga.
PIE1 = 0x00000001; //Endast TIMER1 Overflow Interrupt
while(delay >= 1) //Ligg i Sleep tills nästa jämna timma.
{
sleep(); //God natt..
nop(); //Denna rad exekveras ALLTID vid wake
up, SEN avbrottet.
}
Sleep = 0; //Nollställ flaggan
CCP1CON = CCP1Temp; //Återställ inställningarna
T1CON = temp;
PIR1 = 0b00000000;
PIE1 = PIETemp;
Men som sagt så funkar den perfekt så att den vaknar upp var 10:e sekund och räknar ned registret "delay" och den går ur while-loopen när delay räknats ned MEN när den beter sig skummt efter det. Den går i sleep igen och ligger kvar i while-loopen och räknar ner delay från 0xFFFF var 10:e sekund. Har någon nåt förslag mottages det tacksamt. Men hur som helst så funkar TIMER1 med extern klocka i sleep här iaf.. Hoppas det är till nån hjälp..
/Robert