Sida 1 av 1

PIC12F683 visar 2.5V på en ingång

Postat: 17 april 2015, 10:08:46
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?

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

Postat: 17 april 2015, 10:22:22
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...

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

Postat: 17 april 2015, 10:24:03
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.

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

Postat: 17 april 2015, 10:34:56
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?

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

Postat: 17 april 2015, 10:41:10
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).

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

Postat: 17 april 2015, 10:45:12
av YD1150
Hur är det med _MCLRE_ON, har du yttre reset via en GPx-pinne eller "inre" ?

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

Postat: 17 april 2015, 11:18:20
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.

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

Postat: 17 april 2015, 14:03:18
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.

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

Postat: 20 april 2015, 00:22:19
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.