PIC12F683 visar 2.5V på en ingång

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

PIC12F683 visar 2.5V på en ingång

Inlägg av bos »

Jag initialiserar min 12F såhär:

Kod: Markera allt

start
        banksel OSCCON
        movlw   b'00010001'                         ; Intosc, 125kHz
        movwf   OSCCON

        clrf    ANSEL                               ; No analog inputs
        clrf    OPTION_REG                          ; Disable WPU, INT falling edge

        movlw   b'00000100'                         ; GP2 IOC
        movwf   IOC

        clrf    INTCON
        bsf     INTCON, PEIE                        ; Enable peripheral interrupts
        bsf     INTCON, GPIE                        ; IOC interrupt

        clrf    PIE1
        bsf     PIE1, TMR1IE                        ; Enable Timer1-interrupt

        movlw   b'10011000'                         ; Timer1 LP, 1:2 prescale
        movwf   T1CON

        movlw   b'00000110'                         ; GP0 out, GP1/2 in
        movwf   TRISIO

        banksel GPIO
        clrf    GPIO
På GP0 sitter en lysdiod och 330ohm. På GP1 och GP2 sitter var sitt pull down-motstånd (10k) samt en tryckknapp (NO) mellan +Vcc och ingången.

Kretskoden fungerar inte som det är tänkt, så jag scopar GP1 och GP2. Nivåerna på GP1 är som förväntat; 0V utan knapp, respektive 5V med knapp.

GP2 däremot visar ~3.9V när knappen inte trycks, och spänningen pendlar upp och ner till 5V lite då och då. Trycker jag på knappen blir det låst på 5V. Se bild. Gul linje = GP1, grön = GP2.

Jag fattar inget. Beteendet känns lite som att det är en analog ingång, men ANSEL är helt rensat så pinnarna är digitala.

Vad händer här?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av sodjan »

> upp och ner till 5V lite då och då.

"Då och då" är ingen speciellt bra tidsangivelse... :-)
Använd gärna den vedertagna enheten "sekunder"
(och de härledda ms, us o.s.v...). Det vet alla vad det är...

Är det 1s/ruta eller ser jag fel? Hur har du det med watchdog?
Du har klippt koden så det går inte att se allt...
Senast redigerad av sodjan 17 april 2015, 10:25:06, redigerad totalt 1 gång.
Användarvisningsbild
Klas-Kenny
Inlägg: 11840
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av Klas-Kenny »

Det allra första jag tänker på är intern pull-up. Du har skrivit i kommentaren för OPTION_REG att du stänger av WPU, men i själva verket aktiverar du dem.

Säkert något mer som orsakar växlingen (gissar något med Timer0 utan att kolla noggrannare på det), men det är nog en bra början vid pull-up.

Edit: Pinnen var visst bara ingång för Timer0, inte utgång, så det har nog inte med det att göra förresten.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av bos »

sodjan skrev:> upp och ner till 5V lite då och då.
Är det 1s/ruta eller ser jag fel? Hur har du det med watchdog?
Du har klippt koden så det går inte att se allt...
Sorry, det är länge sen jag hackade PIC så jag har glömt vad som är relevant att visa och inte. Efter initialiseringen kör jag bara loop: goto loop.

Config-bitarna är __CONFIG _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

Och ja, det är 1s/div. Pulserna är 600ms breda och de höga flankerna kommer med 2.2s mellanrum. Om jag håller inne testknapparna så ser jag en konstant 5V-linje på scopet.

Nu testade jag att sätta en etta på GP0 (lysdioden) och den blinkar. Sätter jag proben där så ser det ut som på den här bilden (gul = lysdiod).

Är det någon reset inblandad här? Hur kan jag undersöka vilken?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Klas-Kenny
Inlägg: 11840
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av Klas-Kenny »

Du har ju MCLRE aktiverad, men har inte nämnt att du kopplat något till den ingången. Så förmodligen resetar µC'n lite slumpmässigt.

Inaktivera MCLRE alternativt koppla GP3 till +5V (genom motstånd).
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av YD1150 »

Hur är det med _MCLRE_ON, har du yttre reset via en GPx-pinne eller "inre" ?
Användarvisningsbild
SeniorLemuren
Inlägg: 8426
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av SeniorLemuren »

I databladet kan man läsa :
The ANSEL and CMCON0 registers must
be initialized to configure an analog
channel as a digital input. Pins configured
as analog inputs will read ‘0’ and cannot
generate an interrupt.
Ser inte CMCON0 någonstans.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av bos »

Oj, CMCON gick mig helt förbi. Där vill jag definitivt skriva en 7:a, ja. Som det är nu läser jag alltså av komparatorns utgång, och det skulle förklara ungefär allt.

MCLR var också fel. Hade den satt till ON men pinnen låg flytande.

Tack för tipsen. Ska testa dem på måndag när jag är tillbaka i verkstan.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7468
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: PIC12F683 visar 2.5V på en ingång

Inlägg av Marta »

Du skall nog ta och se över Dina config settings. Ser ut som Du sätter den till att använda INTRC som är en ungefär 31kHz oscillator med låg strömförbrukning, så Ditt program körs väldigt sakta. Det är antagligen INTOSC Du vill använda.

Pulserna kommer sannolikt från ett programfel och inte från en fritt hängande MCLR. Det är gansak orimligt att den skulle kunna orsaka sådana långsamma regelbundna pulser. Hur som helst skall den ha en pull-up, t.ex. 10k. Stäng inte av MCLR i config annat än om denna ingång verkligen behövs till annat. Stängs den av krävs det Vpp före Vdd nästa gång kretsen skall flashas om.

Det visas för lite av programmet för att se vad som händer. Du har i varje fall dribblat bort Dig med minnesbankerna minst en gång, T1CON är i bank0.
Skriv svar