INTOSC på nyare/halvgamla PIC ?
INTOSC på nyare/halvgamla PIC ?
Har kämpat med en 16F1939 och försökt få INTOSC att funka på ett vettigt sätt. Givetvis läst noga i databladet, men det är något jag missar.
Programmet körs och fungerar antagligen, men exekveras i krypfart med något av 31kHz-alternativen. Möjligen T1OSC (eller vad de kallar den numera).
Config är satt till INTOSC och jag har testat flera alternativ med OSCCON. Tydligen finns det en liten obskyr bit någonstans som hamnat på tvären. Två chip är testade, båda samma resultat.
Programmet körs och fungerar antagligen, men exekveras i krypfart med något av 31kHz-alternativen. Möjligen T1OSC (eller vad de kallar den numera).
Config är satt till INTOSC och jag har testat flera alternativ med OSCCON. Tydligen finns det en liten obskyr bit någonstans som hamnat på tvären. Två chip är testade, båda samma resultat.
Re: INTOSC på nyare/halvgamla PIC ?
Du får publicera din konfiguration.
Vilket IDE använder du?
Kontrollera att konfigurationen stämmer överens i den färdigkompilerade koden.
Hur ser koden ut som hanterar dina oscillatorer i runtime
Vilket IDE använder du?
Kontrollera att konfigurationen stämmer överens i den färdigkompilerade koden.
Hur ser koden ut som hanterar dina oscillatorer i runtime
Re: INTOSC på nyare/halvgamla PIC ?
Inget IDE, manuell config. Koden är i assembler.
Config words 1 och 2.
%_0_1_1_00_1_1_1_1_00_100
%_1_1_1_1_1_0_11_11_11_11
OSCCON
%0_0111_0_00
Många fler alternativ än dessa är testade.
Det finns massor av finesser kring oscillatorerna. Utöver config words är alla SFR's lämnade som de är efter reset.
Har även testat ett program som endast sätter OSCCON samt en port som utgång och därefter en loop som pulsar denna port.
Det är "two speed startup", "clock failsafe" och liknande som jag aldrig använt och kan noll om som jag antar är felet. En obskyr bit i ett nytillkommet SFR vars namn inte antyder något om vad det är.
Den här kretsen har också en massa LCD-krafs som inte används. Det var den end som EK hade, annars hade något annat valts.
Config words 1 och 2.
%_0_1_1_00_1_1_1_1_00_100
%_1_1_1_1_1_0_11_11_11_11
OSCCON
%0_0111_0_00
Många fler alternativ än dessa är testade.
Det finns massor av finesser kring oscillatorerna. Utöver config words är alla SFR's lämnade som de är efter reset.
Har även testat ett program som endast sätter OSCCON samt en port som utgång och därefter en loop som pulsar denna port.
Det är "two speed startup", "clock failsafe" och liknande som jag aldrig använt och kan noll om som jag antar är felet. En obskyr bit i ett nytillkommet SFR vars namn inte antyder något om vad det är.
Den här kretsen har också en massa LCD-krafs som inte används. Det var den end som EK hade, annars hade något annat valts.
Re: INTOSC på nyare/halvgamla PIC ?
4, 8, 16 eller 32MHz PLL skulle alla fungera för att komma vidare.
Antar Du har hela härket från Microchip och kan åstadkomma en automatgenererad init-kod. Innehåller den allt som behövs, inklusive config words, så löser det sig nog att hitta var felet är. Så en sådan för t.ex 8MHz vore fint.
Antar Du har hela härket från Microchip och kan åstadkomma en automatgenererad init-kod. Innehåller den allt som behövs, inklusive config words, så löser det sig nog att hitta var felet är. Så en sådan för t.ex 8MHz vore fint.
Re: INTOSC på nyare/halvgamla PIC ?
Du konfigurerar enbart för 500kHz inget annat.
Du måste i din startupkod sätta OSCCON FOSC<2:0> till den frekvens du vill ha, som det är nu sätter du den till 500 kHz
om du slår på PLLen, så blir 8MHz-valet 32 MHz i stället.
VId varje reset eller boot, så ställs INTOSC till 500 kHz
Du har satt
För att få 32MHz, Testa med
I din Startup-kod
För att få 8MHz, Testa med
I din Startup-kod
Du måste i din startupkod sätta OSCCON FOSC<2:0> till den frekvens du vill ha, som det är nu sätter du den till 500 kHz
om du slår på PLLen, så blir 8MHz-valet 32 MHz i stället.
VId varje reset eller boot, så ställs INTOSC till 500 kHz
Du har satt
Kod: Markera allt
Config #1
FOSC = INTOSC
WDTE = Av
PWRT = Av
MCLR = Av
CProt = Av
Dprot = Av
BOREN = Av
CLKOUT = Av
IESO = Av
FailSafe = Av
Kod: Markera allt
Config #2
LVP = På
Debug = Av
BOR = Låg Nivå
OFL = Reset
4xPLL = Av
WP = Av
Kod: Markera allt
OSCCON
SPLLEN 4xPLL = Av
ICRF = 500kHz
SCS FOSC = Config#1
Kod: Markera allt
Config #2
LVP = På
Debug = Av
BOR = Låg Nivå
OFL = Reset
4xPLL = På
WP = Av
Kod: Markera allt
OSCCON
SPLLEN 4xPLL = På
ICRF = 8MHz
SCS FOSC = Config#1
Kod: Markera allt
Config #2
LVP = På
Debug = Av
BOR = Låg Nivå
OFL = Reset
4xPLL = Av
WP = Av
Kod: Markera allt
OSCCON
SPLLEN 4xPLL = Av
ICRF = 8MHz
SCS FOSC = Config#1
Re: INTOSC på nyare/halvgamla PIC ?
Tackar för hjälpen. Sk*t bakom tangenterna... Nu funkar det OK.
Hade missat att PLL inte kan väljas annat än via config, alltså 00 som avslutning på OSCCON. Dessutom hade det kommit in ett skräptecken i källkoden som ställde BS fel, OSCCON ändrades inte. Ovanpå detta har Microchip ändrat på prescalern till TIMER2, ny kod för /16, så det blev /64.
PLL-valet i cfg2 är inte nödvändigt. Det och bit7 i OSCCON fungerar som en OR-funktion. Däremot måste cfg1 sättas till INTOSC och bit 1:0 i OSCCON vara 00 för att kunna välja PLL.
Ser nu också att Microship gjort en total omstuvning av SFR's i de nyaste 16+.
Mer logiskt grupperat, men tappar att det mest använda fanns i bank0. Så det är inget drop-in utbyte mot den här strömslukaren jag har nu och den nya som drar mindre än 1/10 i sleep mode och T1OSC (eller vad de nu hittat på att kalla den). Det är den interna sp.reg. för kärnan som inte stängs av i det äldre chipet.
Hade missat att PLL inte kan väljas annat än via config, alltså 00 som avslutning på OSCCON. Dessutom hade det kommit in ett skräptecken i källkoden som ställde BS fel, OSCCON ändrades inte. Ovanpå detta har Microchip ändrat på prescalern till TIMER2, ny kod för /16, så det blev /64.
PLL-valet i cfg2 är inte nödvändigt. Det och bit7 i OSCCON fungerar som en OR-funktion. Däremot måste cfg1 sättas till INTOSC och bit 1:0 i OSCCON vara 00 för att kunna välja PLL.
Ser nu också att Microship gjort en total omstuvning av SFR's i de nyaste 16+.
