16f690, 32,768 kHz kristall

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
rbkanders
Inlägg: 5
Blev medlem: 24 oktober 2011, 10:29:55

16f690, 32,768 kHz kristall

Inlägg av rbkanders »

Hej allihopa.
Jag sitter här i den skånska myllan med MPLAB IDE, pic16f690 och en 32,768 kHz kristall och är sugen på att skapa något..har lite planer men de behöver jag inte tråka ut er med här, än så länge..;)

Vad jag först tänkte reda ut är att få min pic att hålla reda på hur många sekunder som passerar. Detta genom att låta Timer1 inkrementera med en 32,768 kHz kristall och generera ett interrupt.
Innan jag börjar koda i assembler (vilket jag är hyfsat hemtam i sen mina högskoleår) så tänkte jag reda ut begreppen lite grann vad gäller extern kristall, tycker att databladet från Microchip är informativt men det är ändå lite frågetecken.

Ok, here it goes.

1) För att det hela ska funka så måste ju Timer1 veta att den ska inkrementera på kristalloscillatorn och inget annat. Detta görs enligt databladet med T1OSCEN=1, dock med tillägget "If INTOSC without CLKOUT oscillator is active" (s. 77). Betyder detta att jag ska ställa interna oscillatorn i läget INTOSCIO, dvs FOSC = '100'? Detta skulle väl i så fall göra att all exekvering av instruktioner i koden görs med frekvensen som väljs för den interna oscillatorn och asynkront med det så kommer det ett interrupt från Timer1 varje sekund?

2) Om mina antaganden i första frågan är korrekt så kommer nästa fråga, är valet mellan LFINTOSC och HFINTOSC en "smaksak"?

3) Timer1 är 16 bitar och ger interrupt på varje overflow, dvs när den slår om från 65535 till 0. För att få overflow var 32768:e gång så kan man väl antingen använda prescaler och dela med 2 eller sätta TMR1H<7>=1 vid varje overflow?

4) På sidan 78 i databladet för mikrokontrollern så står det "Table 3-1 shows the capacitor
selection for the Timer1 oscillator." men den tabellen innehåller inget sånt matnyttigt alls. Har sett application notes från Microchip som rekommenderar 22 pF så tänkte väl prova med det som en första ansats.

5) Interrupt-rutinen med flagg-reset och sådant tror jag att jag har koll på.

Så ja, det var de första frågorna som jag kommit på här..är mycket tacksam för svar..;)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 16f690, 32,768 kHz kristall

Inlägg av sodjan »

Du tänker alltså köra med klock-kristallen även till huvud-oscillatorn.
Ja det fungerar nog, men annars är det kanske lite vanligare att man
kör med klock-kristallen enbart till oscillatorn för timer1 och låter
resten av processorn köra "som vanligt" t.ex på INTOSC. Det bli
ju lite dålig "snurr" på programmet om det också ska gå 32 KHz.
rbkanders
Inlägg: 5
Blev medlem: 24 oktober 2011, 10:29:55

Re: 16f690, 32,768 kHz kristall

Inlägg av rbkanders »

Haha, det var just det jag INTE tänkte göra..;)

Såsom jag läste databladet (s. 78, 6.6) så enablar man kristalloscillatorn för Timer 1 med T1OSCEN=1. I nästa stycke så instrueras man att även köra den interna oscillatorn, "Timer1 can use this mode only when the primary system clock is derived from the internal oscillator."

Detta, tillsammans med instruktionen på sidan 77:
"If INTOSC without CLKOUT oscillator is active:
1 = LP oscillator is enabled for Timer1 clock
0 = LP oscillator is off"
...tolkade jag som att det är INTOSCIO-läget som man menar.

Men jag kanske fått allt om bakfoten/blandar äpplen med päron/läser databladet såsom Juholt läser instruktioner för att fylla i utläggsblanketter? ;)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 16f690, 32,768 kHz kristall

Inlägg av sodjan »

Jag har inte kollat just nu, men som jag minns det så väljer man först
varifrån timer1 ska få sin "klocka". Det kan bl.a vara från den ordinarie
oscillatorn (oavsett hur den körs) eller från timer1s egen osciallator (och
då är det oberoende av hur den ordinare oscillatorn körs).

Kristallen monteras på ed två speciella pinnarna för timer1-osc, vilket
alltså inte är samma som de ordinare kristall-pinnarna.
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: 16f690, 32,768 kHz kristall

Inlägg av Icecap »

1: T1OSCEN slår på eller av oscillatorn. Med TMR1CS=1 väljer du att Timer1 ska klocka på den källa. Då Timer1 är på 16 bit kommer den att ge en overflow-interrupt varannan sekund på det sätt.
2: LFINTOSC och HFINTOSC är väl skillnaden mellan vilken processorhastighet som kärnan kör och har inget med Timer1 att göra i detta.
3: Om du delar med 2 kommer du att få en interrupt var fjärde sekund, knappast vad du vill ha. En lösning kan vara att sätta MSB i Timer1 men kolla i databladet om det går att göra utan att nollställa Timer1.
4: På sid 78 i mitt datablad står det om RC4 & RC5 så du kanske ska definiera vilket datablad du pratar om... men 22pF brukar fungera ganska OK.
5: Då så, kör hårt.
rbkanders
Inlägg: 5
Blev medlem: 24 oktober 2011, 10:29:55

Re: 16f690, 32,768 kHz kristall

Inlägg av rbkanders »

Hehe, prescalern glömmer vi då..tänkte lite bakvänt där. Varannan sekund, check, sätter MSB till etta i TMR1H på så sätt att det inte ställer till det med uppräkningen.

Den enda frågan som då återstår är kring instruktionen i kapitel 6.6: "Timer1 can use this mode only when
the primary system clock is derived from the internal oscillator." - Hur ska jag ställa in kretsen för att detta ska hända, är det default eller det kräver några extra bitar satta till nånting speciellt?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 16f690, 32,768 kHz kristall

Inlägg av sodjan »

Är det inte i "6.4 Timer1 Oscillator" ??
Jäkligt förvirrande när inte referensrna stämmer...

Men OK, jag ser det nu. Timer1 delar osciallator med den
vanliga "LP" oscillatorn. Och det säkert som databladet säger
att man får köra med t.ex INTOSC om man användet timer1
osciallatorn. Eftersom de delar pinnar så kan man ju inte hänga
på t.ex en 20 MHz oscillator samtigt, på samma pinnar...

Jag skulle köra med 32 KHz kristallen för timer1 och köra
resten på valfri hastighet med INTOSC. Det spelar ju ingen
större roll om timingen i koden inte är exakt, bara timer1
går på kristallen.
rbkanders
Inlägg: 5
Blev medlem: 24 oktober 2011, 10:29:55

Re: 16f690, 32,768 kHz kristall

Inlägg av rbkanders »

Okidoke, kör på det så länge, tack för svaren..;)
rbkanders
Inlägg: 5
Blev medlem: 24 oktober 2011, 10:29:55

Re: 16f690, 32,768 kHz kristall

Inlägg av rbkanders »

...en sak till bara.

Man måste väl bara se till att man sätter INTOSC så så att ingen Fosc/4 kommer ut på en av de här två pinnarna (så som är fallet på en del av lägena som man kan konfigurera systemklockan i)?
Skulle väl ställa till det att blanda Fosc/4 och kristalloscillatorns frekvens på det viset?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 16f690, 32,768 kHz kristall

Inlägg av sodjan »

Ja, det är ju ganska sällan som man har behov av at få
ut klockan extern. _INTOSCIO är mitt standardvärde.
Skriv svar