Intern oscillator i PIC18F1320 ?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26568
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Intern oscillator i PIC18F1320 ?

Inlägg av JimmyAndersson »

PIC-kretsen är rätt inkopplad. Kondensator för 'avstörning', så den delen är ok. Kretsen programmeras, men det händer inget.
Vad vill jag ska hända? Jo:

Som test gjorde jag en blink-a-led som blinkar med hela portarna, typ:

TRISA = 0
TRISB = 0
WHILE TRUE
PORTA = 1
PORTB = 0
delay_ms(500)
PORTA = 0
PORTB = 1
delay_ms(500)
WEND

i MikroBasic.


PORTA är hög hela tiden. PORTB är låg hela tiden. Hela tiden = tills jag stänger av labbagget. :)


Vill som sagt (i rubriken) köra med den interna oscillatorn. Maxfrekvensen för PIC18F1320 är då 8MHz. Därför har jag satt INTIO2 hög och ställt in clock = 8MHz i MikroBasic. Men jag måste ha missat något mer. Har läst databladet men inte hittat vad jag glömt.



Tips?
Användarvisningsbild
DeVille
Inlägg: 2361
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

Grejar inte med PIC egentligen.. men kan det vara något register där du skall sätta PortA och B till utgångar..

Finns funktionen delay_ms() ?? kan man göra sådana funktionsanrop när du programmerar till en PIC?
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nu har jag inte databladet men man ska väl ange att den ska använda den interna osc i flaggorna, det ska jag i alla fall när jag kör PIC16F628A'n.

I "min" MikroC (mycket trevligt program faktisk) ställar jag in det under Projekt->Edit Project...->Device flags, jag ställer även in Code Protect osv. där.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Jag säger bara osccon... :)
(Kan inte MicroBasic)
Användarvisningsbild
JimmyAndersson
Inlägg: 26568
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

DeVille:
Den delen har jag koll på. Koden fungerar med extern oscillator. Pga utrymmesbrist (och inte särskillt CPU-tid-krävande kod) så klarar jag mig med den interna oscillatorn.

Icecap:
Det låter som om MikroC och MikroBasic är likadant uppbyggt. Troligen är det så med tanke på att det är samma tillverkare.

Klasg:
Jag har hittat osccon i databladet, men det finns ingen inställning för det i Device flags.


Här är databladet om ni vill kika. :)



edit: Med INTIO2 väljer man den interna oscillatorn. Men det har inte hjälpt tyvärr.
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

Inlägg av dr. Agoz »

skriv till OSCCON som du skriver till TRISx
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

Eftersom jag inte använder MicroBasic så vet jag inte hur man ska göra där. Tog bara en snabbtitt på databladet nu, har du testat: idlen=0 och scs1=1?

EDIT: Och ircf2 och ircf0 så klart...
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Det ska ställas in i "Config Register 1H", då jag gjorde ett projekt med den CPU var det bara att bocka in "INTIO2_OSC_1H = $00F8", sen var det klart.

Det är INGET man kan programmera under drift för hur ska programmet köra utan klocka? Man kan kanske välja senare men det är en annan sak.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Har du satt CONFIG till intosc ?
(Hur man gör det i M-B får du kolla själv !)

> PORTA = 1

PORTA är ett 8 bitars register !!
Ange ett hex värde eller ett 8 bitars binär värde.

> PORTA är hög hela tiden.

PORTA är 8 I/O pinnar. Vilken har du mätt på ? Alla 8 ?

Indentera WHILE/WEND, tack !
Så att det går att läsa koden utan ansträngning.

> Koden fungerar med extern oscillator.

OK. Och vad har du gjort för att byta till INTOSC ?
Förrutom att plocka bort kristallen, alltså... :-)

> Jag har hittat osccon i databladet, men det finns ingen inställning för det i Device flags.

Korrekt. OSCCON är en *FSR*, inget CONFIG register !
Kolla i CONFIG delen hur du switchar till INTOSC.
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

Inlägg av dr. Agoz »

Jag vet inte vad OSCCON har för startvärde i denna krets i 16F88 tror jag att det var 32KHz så där måste man sätta OSCON till rätt värde i början. annars kommer din delay ta LÅÅNG tid

men har man som, påpekats tidigare, glömt att ställa in kretsen på att körsa på INTOSC så spelar det mindre roll.

edit: behöver inte tilldela PORTA ett binär värde eller hex värde detta (i C iaf) det behandlas som ett unsigned char och förstår att 0xFF och 255 är samma sak, ser bara olika ut för programeraren. (sen är det kanske snyggare)
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OSCCON = 31 Khz vid POR i den aktuella processorn...
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

Inlägg av dr. Agoz »

så det blir en delay på 64.5 sekunder ungefär =)
Användarvisningsbild
JimmyAndersson
Inlägg: 26568
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Filen explorer.exe (i WinXP) brakade ihop. Tog en stund att fixa men nu är jag tillbaka. :)

Icecap: Då hade jag alltså gjort rätt. Tack för att du bekräftade det. :)

sodjan: Koden var visserligen bara ett exempel, men du har helt rätt.
Det jag gjorde för att byta till INTOSC var precis som Icecap skrev i hans senaste inlägg.

Det jag hade missat var att jag behövde sätta OSCCON rätt. Det fungerar nu, men precis som dr.Agoz skrev så blir det en (för) lång delay.


Nu får jag kanske skylla mig själv som använder MikroBasic, :) men jag förstår inte förhållandet mellan delay_ms-kommandot och OSCCON. Jag menar: Skriver jag delay_ms(500) så betyder det ett delay på 500ms. Men i verkligheten så blir det mer än dubbelt så långt... Hur ska jag räkna för att kunna sätta OSCCON rätt?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

MikroBasic (och delay_ms) har naturligtsvis inte en aning om hur
snabbt din PIC snurrar i VERKLIGHETEN. Koden du skriver har heller
inte någon som helst metod (utan en extern tidsref) att ta reda på
hur snabbt den går.

Alltså måste (t.ex) delay_ms *lita* på den hastighet du *påstår*
att den kommer att köras i med hjälp av något kommando/direktiv
i MikroBasic (eller inställning i någon meny). Om du påstår att du
tänker köra i 8 Mhz, så gör naturligtsvis MikroBasic en fördröjning på
500 ms av delay_ms(500), under förutsättning att du faktiskt kör
i 8 Mhz. Annars kan det bli vilken tid oms helst...

Det du säger med delay_ms(500) är :

"Gör en delay i det antal processorcykler som tar 500 ms vid 8 Mhz".

Oavsett med vilken hastighet du senare faktiskt kör din PIC, så kommer
den alltid att göra en delay med samma antal *cykler*.

Ett annat sätt att se på det är att en PIC inte har en aning om
vad en "sekund" är, den kan bara räkna sina egna cykler...

> Men i verkligheten så blir det mer än dubbelt så långt...

1. Bug i delay_ms()
2. Du har angivit fel hastighet i MikroBasic.
3. Du har ställt in OSCCON fel.

*Normalt* ska du inte räkna alls. Ställ in OSCCON rätt, tala om för M-B
vilket hastighet du har valt, och delay_ms() ska ge rätt tid.

Men problemet var väl att du hade en delay som var *mycket* mer än
dubbelt för lång ?

> Det jag hade missat var att jag behövde sätta OSCCON rätt.
> Det fungerar nu, men precis som dr.Agoz skrev så blir det en (för) lång delay.

Här hänger jag inte med, det var väl en för lång delay *innan* du fixade OSCCON !?
Användarvisningsbild
JimmyAndersson
Inlägg: 26568
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Tack för lektionen! Värdefullt. :)

>> Det jag hade missat var att jag behövde sätta OSCCON rätt.
>> Det fungerar nu, men precis som dr.Agoz skrev så blir det en (för) lång delay.

>Här hänger jag inte med, det var väl en för lång delay *innan* du fixade OSCCON !?

Helt riktigt. Det skulle ha stått "..så blev det en (för) lång delay."
Skriv svar