Sida 1 av 2
Programmera 12F629, mystiska I/O pinnar?
Postat: 20 juli 2006, 19:17:02
av Cenorpa
Hejsan alla duktiga elektroniknissar!
Har för ett tag sen shoppat löss lite från Sodjan, varav några PIC 12F629 processorer som ska användas till ett projekt men jag kommer ingen vart med dessa
Snart kommer jag få grov kritik över programmeringsspråket jag använder men för tillfäller skriver jag i basic.
Nåväl, nu till problemet.
Inför varje ny processor jag använder så brukar jag prova med ett enkelt blinka led program för att testa så det funkar men nu har jag kört fast.
Har använt koden nedan för att blinka 3 lysdioder över tre av GPIO pinnarna men det är bara den sista som tänds av dom definierade pinnarna.
Ser koden ut såhär så blir enbart LED2 hög.
LED0 = 1
LED1 = 1
LED2 = 1
Såhär ser hela koden ut:
Kod: Markera allt
'*-----------------PIC 12F629 TEST-----------------*
LED0 var GPIO.0
LED1 var GPIO.1
LED2 var GPIO.2
'*---------------------------------------------------------*
START:
GOSUB INIT 'Run Init.BAS
RUN:
LED0 = 1
LED1 = 0
LED2 = 0
PAUSE 250
LED0 = 0
LED1 = 1
LED2 = 0
PAUSE 250
LED0 = 0
LED1 = 0
LED2 = 1 <--Detta är enda stället och enda utgången som blir hög.
PAUSE 250
GOTO RUN
'*---------------------------------------------------------*
'*Subroutine INIT
'*---------------------------------------------------------*
INIT:
OUTPUT GPIO.0
OUTPUT GPIO.1
OUTPUT GPIO.2
RETURN
'*---------------------------------------------------------*
END
Är det någon som ser vad felet är eller vad det är jag har glömt att göra? Det är säkert en jätte enkel grej
PS Sodjan, det kan bli aktuellt med lite mer shopping av dig snart
Edit: Ändrade 12F626 till 12F629
Postat: 20 juli 2006, 19:18:37
av cyr
Låter misstänkt likt :
http://www.elektronikforumet.com/forum/ ... hp?t=12153
Fast i det här fallet undrar jag om inte min första förklaring stämmer.
Har du gjort något för att ange om pinnarna ska vara analoga eller inte?
edit: Just det, glömde ju... BASIC? Bläää

Postat: 20 juli 2006, 19:23:24
av Cenorpa
Hmm, ska kika igenom JimmyAnderssons tråd.
Koden du ser är den jag har använt, pinnarna kan väl inte vara av analog sort på F629:an ?
Ändrade första inlägget lite...
Postat: 20 juli 2006, 19:35:22
av JimmyAndersson
"Inför varje ny processor jag använder så brukar jag prova med ett enkelt blinka led program för att testa så det funkar men nu har jag kört fast."
Låter precis som om jag skulle ha skrivit det.
Motsvarande program i Mikrobasic för 12F675 (väldigt lik 629) skulle ha sett ut såhär:
(OBS: Problemet kvarstår, ville bara visa som jämförelse.)
Kod: Markera allt
'Använder interna oscillatorn.
'INTRC_OSC_NOCLKOUT ska vara satt i Project -> Edit -> Device Flags.
'MCLRE_ON ska också vara satt. (Datablad sid 52. sid 54 enligt Acrobat.)
'Fixar så att man skriva LED istället för GPIO
symbol LED0 = GPIO.0
symbol LED1 = GPIO.1
symbol LED2 = GPIO.2
sub procedure Init
TRISIO = %00001000 ' Utgångar överallt, förutom GP3 är alltid ingång.
IOC = %00000000 ' Interrupt on change - Disabled
CMCON.CM2 = 1 ' Comparator OFF
CMCON.CM1 = 1 ' Comparator OFF
CMCON.CM0 = 1 ' Comparator OFF
VRCON = 0 ' VoltRef (Comparator) off
T1CON.TMR1ON = 0 ' Stoppar timern
ANSEL.ANS3 = 0 ' Digital I/O
ANSEL.ANS2 = 0 ' Digital I/O
ANSEL.ANS1 = 0 ' Digital I/O
ANSEL.ANS0 = 0 ' Digital I/O
LED0 = 0
LED1 = 0
LED2 = 0
end sub
main:
init
while true
LED2 = 1
LED1 = 0
LED0 = 0
delay_ms(250)
LED2 = 0
LED1 = 1
LED0 = 0
delay_ms(250)
LED2 = 0
LED1 = 0
LED0 = 1
delay_ms(250)
wend
end.
Det finns visserligen betydligt lättare sätt. Man kunde t.ex ha satt 4, 2, 1 (som blir 100, 010, 001) på porten.
Postat: 20 juli 2006, 19:35:53
av cyr
Analoga kan de vara (den har ingen AD-omvandlare, men däremot komparator).
Och pinnarna brukar vara analoga som default på PIC.
Postat: 20 juli 2006, 19:38:19
av JimmyAndersson
Precis. Därav:
ANSEL.ANS3 = 0 ' Digital I/O
ANSEL.ANS2 = 0 ' Digital I/O
ANSEL.ANS1 = 0 ' Digital I/O
ANSEL.ANS0 = 0 ' Digital I/O
..plus resten i "Init" för att stänga av interrupt mm.
Postat: 20 juli 2006, 19:46:51
av sodjan
> Det är säkert en jätte enkel grej
Visst är det det !
Slarvig genomläsning av databladet, helt enkelt.
Läs kapitlet om GPIO en gång till, *speciellt* lilla grå rutan
med ram runt där det står "Note:" i fet stil.
Att det står i en egen liten ruta betyder att det är *viktigt*...
Från Jimmys kod:
> CMCON.CM2 = 1 ' Comparator OFF
> CMCON.CM1 = 1 ' Comparator OFF
> CMCON.CM0 = 1 ' Comparator OFF
"CMCON = 7" är lite enklare (fast jag hade angivit "7" som en binär konstant).
ANSEL saknas på 629'an, och kommer att (eller bör) ge fel vid kompileringen.
Så glöm ANSEL...
EDIT : En sak till...
Notera att när man sätter enstaka bitar på samma port direkt eftervarandra,
så *kan* man åka på R-M-W problemet. Om det går i den Basic som
används, så kan man lägga in en eller två NOP mellan varje kommando.
Jag antar att "LED0 = 0" kompileras som en "BCF ...."
Postat: 20 juli 2006, 20:00:31
av Cenorpa
Nämen, vilka snabba svar, och det funkar till och med!
Lade till det Sodjan föreslog med CMCON=7 och det funkar nu, men jag skulle vilja ha en lite närmare beskrivning på vad CMCON gör för något, någon som är sugen på att förklara?
Kollade i databladet, och visst, där var den där lilla lömska rutan, trots att jag läst det kapitlet så hade jag missat den, fy på mig
Men tack för hjälpen!
Edit:
Kom på att jag nåste fråga en till sak, är denna pic väldigt känslig för störningar?
Nu driver jag den från ett batterpack genom en 7805 reg. men tar jag på regualtorns GND pinne så stannar picen.

Postat: 20 juli 2006, 20:07:40
av JimmyAndersson
Kul att det fungerar!
Måste ändå säga att databladet för 12F675/629 är lite ..ihop-pressat. T.ex "Interrupt" finns under "Special features of the CPU". Så är det inte för databladen i t.ex 18F-serien som har många fler funktioner och kapitel.
"Den lilla lömska rutan" är däremot tydlig. Det gäller bara att hitta den..
edit:
"Kom på att jag nåste fråga en till sak, är denna pic väldigt känslig för störningar?"
Det mesta (särskillt det som sitter på en labbplatta) är känsligt för störningar. Standard-reglerna brukar vara:
*Inga oanslutna ingångar.
*Korta anslutningar till (speciellt) matningspänningen.
*Avstörnings-konding på ca 100nF. (0.1µF)
En människa är en lysande antenn för att plocka upp diverse störningar. Sätter man fingret nära en labplattan som inte har det jag listade ovan så kan det mesta hända.
Postat: 20 juli 2006, 20:16:07
av sodjan
"CMCON" = "CoMparator CONfiguration"
> Kollade i databladet...
Kolla även upp CMCON när du ändå är uppe i varv...
Tips : behåll databladen som PDF, då går det snabbt att trycka ctrl-F
och söka efter register. Men det är klar, kapitlet om "Comparator"
är väl inte någon dålig gissning...
Jimmy> T.ex "Interrupt" finns under "Special features of the CPU".
Gäller allmänt för PIC16-serien.
12F är väldigt enkla processorer och databladet är tunt som ett höstlöv...
Jimmy> "Den lilla lömska rutan" är däremot tydlig. Det gäller bara att hitta den..
Alltså , databladet ska läsas pärm till pärm innan man skriven en enda
rad kod, så det *går* inte att missa någonting...
Jimmy> Standard-reglerna brukar vara:
Vill lägga till: MCLR via 10Kohm till 5V.
> Kom på att jag nåste fråga en till sak, är denna pic väldigt känslig för störningar?
Inte mer än någon annan.
Postat: 20 juli 2006, 20:18:35
av Cenorpa
Hmm, så du säger att saker på labbplattor kan bli utsatta för störningar
(Kollade med scopet på ett project på labbplattan förut och kunde se de mest märkliga fenomenen...)
Här gäller det alltså att avkoppla det mesta, men när det kommer bli fastlött på ett kretskort så blir det nog inte lika känsligt.
Fast lite skumt var detta fenomen, har aldrig hänt med den gamla goda 16F84:an vad jag kan minnas.
Men en lite gullig krabat är den där lilla F629:an iallafall.

Postat: 20 juli 2006, 20:22:07
av sodjan
> har aldrig hänt med den gamla goda 16F84:an
Allt kan hända med vilken modell som helst, om man gör fel.
Jag är säker på att jag skulle kunna få en F84 att uppträda märkligt
med lite "våld"...

Postat: 20 juli 2006, 20:41:36
av JimmyAndersson
"Vill lägga till: MCLR via 10Kohm till 5V."
Tur att du är med!
Jag tror att jag ska gå ut och rasta hjärnan eller nåt..

Postat: 20 juli 2006, 22:04:20
av Cenorpa
Ghhaaaaa, hur kunde jag missa MCLR?!, nu är jag helt trög i huvet, en sådan självklar sak
Nej, nu är det bäst att gå och lägga sig, imorgon ska man upp tidigt o jobba

Postat: 21 juli 2006, 01:37:55
av JimmyAndersson
Se till så att du även konfigurerar MCLR rätt. Annars har du en PIC-krets mindre.