Extern oscillator för Timer0 hos PIC12F675.
Extern oscillator för Timer0 hos PIC12F675.
Hej!
Jag använder en PIC12F675 för att styra en stegmotor med krav på att hålla exakt tid.
Vad jag förstår av databladet, så kan man för Timer0 använda både PIC:ens egen inre oscillator, eller använda en extern oscillator, som man kopplar in på klockingången.
Min fråga: -Hur säger man till PIC:en att man vill använda den externa oscillatorn?
Vad jag förstår, så finns det inga operationskoder, för att göra detta, utan det ska göras när man "bränner" ner programkoden i PIC:en. Hur då?
Frågvisa Hälsningar från Mölndal!
Magnus Jacobson.
Jag använder en PIC12F675 för att styra en stegmotor med krav på att hålla exakt tid.
Vad jag förstår av databladet, så kan man för Timer0 använda både PIC:ens egen inre oscillator, eller använda en extern oscillator, som man kopplar in på klockingången.
Min fråga: -Hur säger man till PIC:en att man vill använda den externa oscillatorn?
Vad jag förstår, så finns det inga operationskoder, för att göra detta, utan det ska göras när man "bränner" ner programkoden i PIC:en. Hur då?
Frågvisa Hälsningar från Mölndal!
Magnus Jacobson.
> "Jag använder en PIC12F675..."
Vad menar du med "använder" ??
Har du själv skrivit applikationer ?
Om du kan peka lite mer direkt på vad som var oklart i databladet så är det lättare att svara !
> "med krav på att hålla exakt tid."
Det finns ingen "exakt tid" !!!
Vad menar du *igentligen* ?
> "Min fråga: -Hur säger man till PIC:en att man vill använda den externa oscillatorn?"
Man läser databladet och gör som det står, så klart.
För du har väll databladet ? Du säger i alla fall det på raden innan...
Om du kan peka lite mer specifikt på vad som är oklart så reder vi ut det.
> "Vad jag förstår, så finns det inga operationskoder, för att göra detta,..."
Jo, i princip. Det finns bitar i SFR register som styr det.
> "utan det ska göras när man "bränner" ner programkoden i PIC:en."
Nej.
> "Hur då?"
Databladet, kapitel 4.0 "TIMER0 MODULE". Det är ju bara tre sidor...
Men, som sagt, du får nog beskriva vad du försöker göra.
Vad har du tänkt för extern oscillator ?
Är den noggrannare än den du använder nu ?
Icecap skrev :
> "Kolla in CONFIG settings, där brukar det framgå."
Sorry, men det är fel...
Vad menar du med "använder" ??
Har du själv skrivit applikationer ?
Om du kan peka lite mer direkt på vad som var oklart i databladet så är det lättare att svara !
> "med krav på att hålla exakt tid."
Det finns ingen "exakt tid" !!!
Vad menar du *igentligen* ?
> "Min fråga: -Hur säger man till PIC:en att man vill använda den externa oscillatorn?"
Man läser databladet och gör som det står, så klart.

För du har väll databladet ? Du säger i alla fall det på raden innan...
Om du kan peka lite mer specifikt på vad som är oklart så reder vi ut det.
> "Vad jag förstår, så finns det inga operationskoder, för att göra detta,..."
Jo, i princip. Det finns bitar i SFR register som styr det.
> "utan det ska göras när man "bränner" ner programkoden i PIC:en."
Nej.
> "Hur då?"
Databladet, kapitel 4.0 "TIMER0 MODULE". Det är ju bara tre sidor...
Men, som sagt, du får nog beskriva vad du försöker göra.
Vad har du tänkt för extern oscillator ?
Är den noggrannare än den du använder nu ?
Icecap skrev :
> "Kolla in CONFIG settings, där brukar det framgå."
Sorry, men det är fel...

Det är oklart om Jacobson avsåg den externa klockingången till *huvudoscillatorn* (som kontrolleras via __CONFIG), eller (så som jag tolkade det) den externa klockingången till *TMR0* (vilken *inte* styrs via __CONFIG).
Men när det kommer ett förtydligande på den punkten så klarnar det väll...
Om OSC pinnarna är lediga så är det väll bara att slänga på en kristall !?
Men en kristall är ju å andra sidan inte det samma som en "extern oscillator".
Vi måste även veta vad som menas med "exakt tid". Duger en standard kristall eller behövs en "riktig" extern precisions oscillator ?
Men när det kommer ett förtydligande på den punkten så klarnar det väll...

Om OSC pinnarna är lediga så är det väll bara att slänga på en kristall !?
Men en kristall är ju å andra sidan inte det samma som en "extern oscillator".
Vi måste även veta vad som menas med "exakt tid". Duger en standard kristall eller behövs en "riktig" extern precisions oscillator ?
Extern oscillator för Timer0 hos PIC12F675.
Ja, ehu... Det var ju flera goda tankar.
Är lite ny här, men gillar Era snabba svar.
Jag använder mycket riktigt MP-LAB, och den s.k. Flash Starter Kit som brännare.
Jag ber att få återkomma, när jag har mer tid... antagligen under veckan.
Klart jag läser databladet, men hittade inte detta.
mvh från Mölndal, Magnus.
Är lite ny här, men gillar Era snabba svar.
Jag använder mycket riktigt MP-LAB, och den s.k. Flash Starter Kit som brännare.
Jag ber att få återkomma, när jag har mer tid... antagligen under veckan.
Klart jag läser databladet, men hittade inte detta.
mvh från Mölndal, Magnus.
> "Klart jag läser databladet, men hittade inte detta."
Figur 4-1, sidan 27. Notera hur signalen "T0CS" ("Timer 0 Clock Select") styr valet av klocka från "CLKOUT" eller "T0CKI".
Register 4-1, sidan 28. Notera bit 5 i OPTION_REG.
Notera även Figur 5-1 på sidan 30. Där ser du att Timer 1 har en egen oscillator (till skillnad från Timer 0) och det behövs bara en extern vanlig standard kristall på 32 Khz (en "klockkristall") för att få en klocka i applikationern oberoende på hur resten an PICen "körs".
Vad var det som du tänke "mata in" på Timer 0's klockingång ?
Figur 4-1, sidan 27. Notera hur signalen "T0CS" ("Timer 0 Clock Select") styr valet av klocka från "CLKOUT" eller "T0CKI".
Register 4-1, sidan 28. Notera bit 5 i OPTION_REG.
Notera även Figur 5-1 på sidan 30. Där ser du att Timer 1 har en egen oscillator (till skillnad från Timer 0) och det behövs bara en extern vanlig standard kristall på 32 Khz (en "klockkristall") för att få en klocka i applikationern oberoende på hur resten an PICen "körs".
Vad var det som du tänke "mata in" på Timer 0's klockingång ?
Man skulle kunna köra in 256 Hz på klockingången för timer 0. Då får man ett "timer 0 overflow interrupt" varje sekund. Om det nu är det man vill ha.
Det har ju inte framgåt än vilken frekvens som skulle köras in på klockingången eller på vilket sätt timern är inblandad i stegmotorstyrningen, så det är nog svårt att komma längre än så här just nu.
Annars är standardmetoden att sätta en 32768 Hz kristall på timer 1's oscillator. Den oscillatorn är optimerad (stabilitet och låg strömförbrukning) till just 32768 Hz "klockkristaller".
At kristall-styra hela processorn är naturligtsvis en annan metod, då kan Timer 0 matas direkt från den interna signalen så nära "exakt" som man kan komma med en standard kristall. Om det är *tillräckligt* nära "exakt" vet vi inte heller just nu.
Det har ju inte framgåt än vilken frekvens som skulle köras in på klockingången eller på vilket sätt timern är inblandad i stegmotorstyrningen, så det är nog svårt att komma längre än så här just nu.
Annars är standardmetoden att sätta en 32768 Hz kristall på timer 1's oscillator. Den oscillatorn är optimerad (stabilitet och låg strömförbrukning) till just 32768 Hz "klockkristaller".
At kristall-styra hela processorn är naturligtsvis en annan metod, då kan Timer 0 matas direkt från den interna signalen så nära "exakt" som man kan komma med en standard kristall. Om det är *tillräckligt* nära "exakt" vet vi inte heller just nu.
Extern oscillator för Timer0 hos PIC12F675.
Hej igen och tack igen!
Jo, nu tror jag att jag har fått lösningen. Sodjan skrev om Timer 0 Clock Source Select Bit - T0CS, och det verkar ju just som det jag behöver. Jag förstår inte varför jag missat den, när jag läste databladet.
Angående min applikation, så gäller det en ganska enkel varvtalsräknare, men mitt utvecklargäng antog, att den inre 4MHz klockan inte är tillräckligt noggrann, så vi har använt en 32 kHz klocka på klockingången. Det gäller bara att välja den från koden, bara...
Det är alltså snarare en kristall än en extern oscillator.
Förresten - jag undrar om jag borde ha använt Timer1 istället för detta.
Vad gäller CONFIG, så hoppas jag att jag slipper använda den. Det verkar lite råddigt... Likaledes SFR.
Jag ber att få återkomma, när jag har testat i verkligheten, vilket kan ta ett litet tag.
mvh
från Mölndal,
Magnus Jacobson.
Jo, nu tror jag att jag har fått lösningen. Sodjan skrev om Timer 0 Clock Source Select Bit - T0CS, och det verkar ju just som det jag behöver. Jag förstår inte varför jag missat den, när jag läste databladet.
Angående min applikation, så gäller det en ganska enkel varvtalsräknare, men mitt utvecklargäng antog, att den inre 4MHz klockan inte är tillräckligt noggrann, så vi har använt en 32 kHz klocka på klockingången. Det gäller bara att välja den från koden, bara...
Det är alltså snarare en kristall än en extern oscillator.
Förresten - jag undrar om jag borde ha använt Timer1 istället för detta.
Vad gäller CONFIG, så hoppas jag att jag slipper använda den. Det verkar lite råddigt... Likaledes SFR.
Jag ber att få återkomma, när jag har testat i verkligheten, vilket kan ta ett litet tag.
mvh

Magnus Jacobson.
> "så vi har använt en 32 kHz klocka på klockingången..."
Du talar fortfarande om klockingången till Timer 0, eller hur ?
> "Det är alltså snarare en kristall än en extern oscillator."
???
Du kan inte ansluta en *kristall* direkt till Timer 0.
Timer 0 har ingen egen oscillator.
> "Förresten - jag undrar om jag borde ha använt Timer1 istället för detta."
Timer 1 *har* en egen oscillator, och man kan ansluta en kristall direkt dit.
det är vanligare att man använder Timer 0 som RTC ("Real Time Clock") eftrsom den är en 16-bitars räknare, och med en vanlig "klock-kristall" på (ca) 32 Khz, så får man enkelt 1 sekunds "ticks" i applikationen.
Om du kör in en 32Khz signal till Timer 0, kommer du att få 128 interrupt per sekund. Helt OK om man behöver den upplösningen på sin RTC, lite onödigt i annan fall.
> "Vad gäller CONFIG, så hoppas jag att jag slipper använda den. Det verkar lite råddigt..."
Det är inget du kommer ifrån. Du *SKA* sätta alla __CONFIG alternativ så som *din* applikation vill ha dom. Lite inte på några "defaults", konfigurera __CONFIG korrekt från början. Vad mer specifikt är det som är "råddigt" (vad nu "råddigt" är...)
Det är ju bara att lägga till ett __CONFIG i källkoden och plocka lämpliga alternativ från slutet av INC filen för din processor.
> "...Likaledes SFR."
???
SFR = "Special Function Register". Vad menar du igentligen ?
Du kan inte göra någonting med en PIC utan att "röra" flera SFR's...
Fråga på bara ! En bra fråga är halva svaret !
Du talar fortfarande om klockingången till Timer 0, eller hur ?
> "Det är alltså snarare en kristall än en extern oscillator."
???
Du kan inte ansluta en *kristall* direkt till Timer 0.
Timer 0 har ingen egen oscillator.
> "Förresten - jag undrar om jag borde ha använt Timer1 istället för detta."
Timer 1 *har* en egen oscillator, och man kan ansluta en kristall direkt dit.
det är vanligare att man använder Timer 0 som RTC ("Real Time Clock") eftrsom den är en 16-bitars räknare, och med en vanlig "klock-kristall" på (ca) 32 Khz, så får man enkelt 1 sekunds "ticks" i applikationen.
Om du kör in en 32Khz signal till Timer 0, kommer du att få 128 interrupt per sekund. Helt OK om man behöver den upplösningen på sin RTC, lite onödigt i annan fall.
> "Vad gäller CONFIG, så hoppas jag att jag slipper använda den. Det verkar lite råddigt..."
Det är inget du kommer ifrån. Du *SKA* sätta alla __CONFIG alternativ så som *din* applikation vill ha dom. Lite inte på några "defaults", konfigurera __CONFIG korrekt från början. Vad mer specifikt är det som är "råddigt" (vad nu "råddigt" är...)
Det är ju bara att lägga till ett __CONFIG i källkoden och plocka lämpliga alternativ från slutet av INC filen för din processor.
> "...Likaledes SFR."
???
SFR = "Special Function Register". Vad menar du igentligen ?
Du kan inte göra någonting med en PIC utan att "röra" flera SFR's...
Fråga på bara ! En bra fråga är halva svaret !

Extern oscillator för Timer0 hos PIC12F675.
Hallå eller! Jag tror att jag fattar lite.
Extern kristall anslutes till Timer1. Och möjligen i annat fall en klocka till Timer0.
Med SFR menade jag förut de register som bara kan nås med EEADR och EEDATA, men SFR är väl alla register. Det var EE-instruktionerna som var lite råddiga eller knepiga.
CONFIG är väl ännu en annan typ av register? Jag kollade och såg att jag redan har en __CONFIG-instruktion med mig från start. Jag har kopierat stommen av mitt program, men aldrig fattat vad denna instruktion gjorde.
Jag undrar nästan hur ens något kunde fungera för mig förut, men jag har mest använt trial-and-error-metoden.
Tack och Hej från Mölndal igen!
Magnus Jacobson.
P.S. Det tar nog ett tag innan jag får ordning på allt och kan testa. Det finns ju annat att göra också än att sitta framför datorn. D.S.
Extern kristall anslutes till Timer1. Och möjligen i annat fall en klocka till Timer0.
Med SFR menade jag förut de register som bara kan nås med EEADR och EEDATA, men SFR är väl alla register. Det var EE-instruktionerna som var lite råddiga eller knepiga.
CONFIG är väl ännu en annan typ av register? Jag kollade och såg att jag redan har en __CONFIG-instruktion med mig från start. Jag har kopierat stommen av mitt program, men aldrig fattat vad denna instruktion gjorde.
Jag undrar nästan hur ens något kunde fungera för mig förut, men jag har mest använt trial-and-error-metoden.
Tack och Hej från Mölndal igen!
Magnus Jacobson.
P.S. Det tar nog ett tag innan jag får ordning på allt och kan testa. Det finns ju annat att göra också än att sitta framför datorn. D.S.
> "Med SFR menade jag förut de register som bara kan nås med EEADR och EEDATA,"
EEADR och EEDATA *är* SFRs !
Och de register man man nå via EEADR/EEDATA är inte SFRs utan EEPROM arean.
> "men SFR är väl alla register."
Nja, alla SFR är SFR... Kolla minnesmappen i databladet, den visar vad som är SFRs och vad som är GPR ("General Purpose Registers" som används till "variabler").
> "Det var EE-instruktionerna som var lite råddiga eller knepiga."
OK. Jo, det kan det vara. Läsa från EEPROM är väll ganska rättfram, bara sätta adressen och läsa data. Skriva till EEPROM kräver lit mer, men det beskrivs tydligt och det finns en kod-snutt i data bladet.
> "CONFIG är väl ännu en annan typ av register?"
Det kan man säga. Det kan enbart skrivas och raderas under programmering av PICen. Man kommer alltså inte år CONFIG registret från sin egan kod (normalt inte, jag tror att det finns några PICs som kan läsa CONFIG registret och eventuellt skriva också, dock kanske bara vissa bitar i CONFIG).
> "Jag kollade och såg att jag redan har en __CONFIG-instruktion med mig från start. Jag har kopierat stommen av mitt program, men aldrig fattat vad denna instruktion gjorde."
Den definierar upp bitarna för CONFIG registret, så att de kan läggas in på rätt address i HEX filen. Den programmerare som man använder läser sedan detta och ser till att CONFIG bitarna sätts rätt i PICen.
Se avsnittet om CONFIG registret i data bladet och slutet av INC filen som du använder. Där finns de alternativ som just din PIC stöder.
EEADR och EEDATA *är* SFRs !

Och de register man man nå via EEADR/EEDATA är inte SFRs utan EEPROM arean.
> "men SFR är väl alla register."
Nja, alla SFR är SFR... Kolla minnesmappen i databladet, den visar vad som är SFRs och vad som är GPR ("General Purpose Registers" som används till "variabler").
> "Det var EE-instruktionerna som var lite råddiga eller knepiga."
OK. Jo, det kan det vara. Läsa från EEPROM är väll ganska rättfram, bara sätta adressen och läsa data. Skriva till EEPROM kräver lit mer, men det beskrivs tydligt och det finns en kod-snutt i data bladet.
> "CONFIG är väl ännu en annan typ av register?"
Det kan man säga. Det kan enbart skrivas och raderas under programmering av PICen. Man kommer alltså inte år CONFIG registret från sin egan kod (normalt inte, jag tror att det finns några PICs som kan läsa CONFIG registret och eventuellt skriva också, dock kanske bara vissa bitar i CONFIG).
> "Jag kollade och såg att jag redan har en __CONFIG-instruktion med mig från start. Jag har kopierat stommen av mitt program, men aldrig fattat vad denna instruktion gjorde."
Den definierar upp bitarna för CONFIG registret, så att de kan läggas in på rätt address i HEX filen. Den programmerare som man använder läser sedan detta och ser till att CONFIG bitarna sätts rätt i PICen.
Se avsnittet om CONFIG registret i data bladet och slutet av INC filen som du använder. Där finns de alternativ som just din PIC stöder.