Sida 1 av 3
Få en PIC18F1320 att snurra
Postat: 20 april 2007, 14:48:49
av ankan
Tänkte börja koda på en PIC18F1320. Får den inte ens en lysdiod att blinka.
Kör med en extern kristall på 20Mhz.
Det var många configurationsregtister för bränningen men jag kör på default som är HS_OSC_1H, WDT_OFF_2H och LVP_OFF_4L.
Här kommer min kod:
Kod: Markera allt
void main() {
PORTB = 0;
TRISB = 0; // PORTB is output
do {
PORTB = ~PORTB; // Bitwise negation of pins on PORTB
Delay_ms(1000); // 1 second delay
} while(1); // endless loop
}//~!
}
Postat: 20 april 2007, 15:07:33
av ankan
Portarna verkar bara vara högohmiga hela tiden trots att jag sätter TRISB = 0..
Postat: 20 april 2007, 17:39:36
av Marta
Tänker Du börja om med en ny processor så är det ju ett ypperligt tillfälle att arkivera C-kompilatorn i /dev/null och övergå till assembler. Då vet Du exakt vad som görs och kan göra exakt det Du vill.
Postat: 20 april 2007, 18:47:14
av sodjan
Exakt *hur* mycket har du igentligen läst i databladet !!??
Om man har jobbat med *någon* PIC överhuvudtaget så borde man
vid det här laget veta att *ANALOGA* funktioner på portarna ska
stängas av (om man inte behöver dom). Detta beskrivs både i texten
och i kodexemplet på sidan som beskriver PORTB. Jag är inte 100% säker
på att det löser ditt problem, men att det saknas i din kod visar
ju tydligt att du har slarvat med förarbetet (d.v.s att läsa databladet
5 gånger fram och tillbaka

).
Jo förresten, jag är ganska säker på att det *är* ditt problem.
*LÄS* databladet och fundera på hur din kod kommer at fungera
med pinnarna som analoga pinnar. Speciellt "PORTB = ~PORTB"...
> Det var många configurationsregtister för bränningen...
Japp, och vart och ett av dom finns där av en anledning.
> men jag kör på default...
Gör aldrig det ! Kör på de inställningar som *du* vill ha.
Risken är annars stor att du missat en inställning som du inte förstog
men som visar sig vara fel för just ditt fall.
Så, genvägar och slarv gör *inte* att det går snabbare att komma igång, tvärtom...

Postat: 20 april 2007, 21:50:02
av ankan
I PIC16 serien var det PORTA som var analog. Men för att vara på den säkra sidan så kollade jag ADCON1 och satte den till 0. Så visst har jag läst på.
Har provat både PORTA och PORTB men de är alla högohmiga. Dvs de är alla ingångar.
Något jag inte stött på i PIC16 serien var att portarna hade LATx som jag inte riktigt förstår mig på..
Koden jag visade var direkt ur ett exempel som fanns med kompilatorn som var för en PIC18.
PIC18 verkar vara lite kluriga att komma igång med. De verkar vara uppsatta lite annorluda mot PIC16 så jag är tacksam för de tips och den hjälp jag kan få för att komma igång..
Visst man ska läsa databladet ett antal gånger.. Men de är rätt mastiga och vet man inte vad man letar efter så e det rätt tungt. Kan ju finnas nya finneser som gör så att jag inte får det att fungera utan att jag vet om det.
Postat: 20 april 2007, 22:21:38
av Marta
Skillnaden mellan PORTx och LATx är att den senare läser registret istället för pinnen. Det kan vara bra i vissa sammanhang att kunna göra på det sättet. Oberoende av TRISx eller ompinnen är nedlastad så läser Du med LATx det som skrivits till porten.
PIC18 är inte alls svåra, tvärt om, de är mycket mera lika en vanllig processor än vad PIC16 är. Känns databladet mastigt så titta på blockschemorna över de olika delarna och sammanfattningarna om registeranvändningen.
Varför det inte fungerar är omöjligt att säga när det är skrivet i C och det händer massar av magi i bakgrunden som användaren inte ser. I assembler hade Du visst exakt vad som gjordes ellr inte gjordes. Nu hänger allt i luften och Du är utlämnad till kompilatorn i mångt och mycket.
Jag tycker helt seriöst att Du skall omvärdera assembler och överväga en övergång till detta. det är inte alls svårt, men tröskeln för att komma igång kan vara lite högre. Det är inte kodningen som är det svåra i att kunna programmera, när problemen väl är lösta är den lätt.
Postat: 20 april 2007, 23:04:23
av sodjan
> Men för att vara på den säkra sidan så kollade jag ADCON1 och satte den till 0.
Varför 0 ?
> Så visst har jag läst på.
Sure...
Du har t.ex inte läst sidan som handlar om PORTB.
Speciellt "EXAMPLE 10-2: INITIALIZING PORTB". Notera
vilket värde som de sätter ADCON1 till *där* !
Inte alls "noll", eller hur ?
Om man kollar beskrivningen av ADCON1 i ADC kapitlet så ser
man också att just 0 är power-on läget, och det vet vi ju redan
att det inte fungerar, så det måste vara något annat än 0 den
ska sättas till.
> PIC18 verkar vara lite kluriga att komma igång med.
Jo, det är mer komplexa på sätt och vis. Men de är å andra sidan
enklare att programmera när man väl kommer igång. Renare
arkitektur med bl.a linjära program och dataminnen utan alla page
och bank problem som PIC16 har (i stort sätt, inte helt och hållet...).
> ...och vet man inte vad man letar efter...
Om man har problem med PORTB så är det sidan som beskriver
PORTB man bör kolla på.
Postat: 21 april 2007, 13:08:21
av Marta
Konfiguration som analog ingån är nog inte problemet, det tvingar inte porten att bli ingång. TRIS gäller även i det läget, men den läser alltid som nolla och pull-up stängs av.
Min vilda gissning är att det sitter en bit på tvären i något config register. Det är mycket stökigare att konfigurera PIC18 än PIC16.
Edit: De pinnar som är analoga borde låsa sig på 1 om progrmmet verkligen körs, inte bli högohmiga. Har Du provat alla pinnarna på PORTB?
Svänger oscillatorn?
Postat: 22 april 2007, 00:00:41
av sodjan
> Konfiguration som analog ingån är nog inte problemet,
Det är det helt säkert.
> det tvingar inte porten att bli ingång.
Nej, men alla läsningar från PORTx ger "0" om pinnen har
sin analoga funktion "på", oavsett TRISx. It's in the datasheet...
> men den läser alltid som nolla
Just det...
> inte bli högohmiga.
Jag har inte sett något som säger att de är just "högohmiga", det kan
mycket väl vara en misstolkning från ankan av de resultat han får.
> De pinnar som är analoga borde låsa sig på 1 om progrmmet verkligen körs,
Där kan jag hålla med dock...
Skit samma, sätt bara upp det hela som man ska (enl datablad)
så ska det nog fungera.
Postat: 22 april 2007, 00:39:49
av bearing
Få en PIC18F1320 att snurra
Testa med en Propeller.

Postat: 22 april 2007, 02:00:22
av Marta
Han har skrivit "Portarna verkar bara vara högohmiga hela tiden trots att jag sätter TRISB = 0.." och är det som han skriver att de är högohmiga och eftersom han skriver i pluralis alla pinnarna är på samma sätt så håller jag fast vid att det inte är analogingångarna so orsakar felet.
Är de däremot låsta på en etta så håller jag med Dig om att detta är det troligaste. Fast några av pinnarna är ju digitala efter POR och borde blinka.
Hur han har fått det till att de är högohmiga om de inte är det är ju en annan sak. Mäter de 0 eller +5 så är de troligen inte högohmiga. Mäter de mitt emellan och har en släckt lysdiod ansluten så är de högohmiga, alternativt är något sönder.
Postat: 22 april 2007, 18:27:27
av ankan
Om jag inte får en diod att lysa om jag ansluter till någon av pinnarna varesig jag ansluter mot +5 eller jord så är antagligen portarna ingångar och därför högohmiga.. Det var därför jag skrev så..
Postat: 22 april 2007, 18:43:23
av Icecap
Låter mest som att -MCLR hänger i fel läge....
Ska ju ligga till VCC via ett 10K motstånd.
Postat: 22 april 2007, 21:05:34
av ankan
Jo jag vet..
Postat: 22 april 2007, 21:21:28
av bearing
Tycker också att allt verkar te sig som att oscillatorn inte går. Testa att göra ett program som sätter varenda utgång till 1 och kolla om *någon* pinne ger ström.