Keypad interrupt, hjälp.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Keypad interrupt, hjälp.

Inlägg av klasg »

Tja.
Jag håller på och skriver ett program som ska få interrupt när man trycker ner en av de 4x4 knapparna på en keypad. Rows ettor och IOCA på cols. Kanske ska avslöja att det här är första gången som jag använder interrupt. Jag har två problem för tillfället:

1. Blir ingen interrupt.
Jag kan inte ens tvinga den till interrupt genom att sätta RAIF i koden. (Borde väl gå?) (En fråga: Visst ska programmet hoppa till interruptrutinen direkt vid interrupt utan att man ska behöva testa om RAIF har blivit satt?)

Init interrupt

Kod: Markera allt

            banksel option_reg
            bcf     option_reg,7    ; "not_rapu". har läst att den måste clearas.
            banksel ioca
            movlw   b'00111111'     ; Enable interrupt on change på PORTA.
            movwf   ioca
            banksel wpua
            movlw   b'00010111'     ; Enable weak pull up.
            movwf   wpua
            banksel intcon
            clrf    intcon
            bcf     intcon,raif     ; Clear porta, interrupt flag.
            bcf     intcon,intf
            bsf     intcon,inte
            ;bsf     intcon,raie    ; Sätter jag den här så funkar inte USART...
            bsf     intcon,gie      ; Enable interrupts.


På flera ställen i koden så har jag skrivit ut några tecken på LCDn, så jag ser vart i programmet den är. Jag ser tydligt när/om den kommer dit det är tänkt.

<GLÖM DET HÄR, DET FUNKAR SOM DET SKA>
2. Mäter jag keypad-pinnarnas nivåerna så blir bara ena kolumnen så hög som 5V när man trycker på en knapp i den kolumnen. De andra är K1=1V, K2=1V, K4=1,4V. Jag har tolkat databladet som så att sätter man WPUA så behöver man inte använda några yttre resistorer till keypaden, så den har jag satt.
</GLÖM DET HÄR, DET FUNKAR SOM DET SKA>

Vidare så är det meningen att programmet, efter interrupt, ska skanna av vilken knapp som orsakade interrupten och för tillfället skriva ut samma tecken på LCDn. Om detta fungerar som det ska vet jag inte, men det spelar inte heller någon roll nu. Det viktiga är interrupten, och jag skulle uppskatta lite hjälp.

Jag använder:
PIC16F688
MPLAB IDE v7.20
/Klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag kan inte ens tvinga den till interrupt genom att sätta RAIF i koden. (Borde väl gå?)

> En fråga: Visst ska programmet hoppa till interruptrutinen direkt vid interrupt utan att man ska behöva testa om RAIF har blivit satt?

Ja till båda, *om* rellevanta xxxE flggor (GIE, RAIE, IOACx o.s.v) är satta.

Det är lite oklart hur du har kopplat. WPU håller en ingång "hög", och man kan sedan lägga den "låg" genom en switch som t.ex jordar pinnen.

> ;bsf intcon,raie ; Sätter jag den här så funkar inte USART...

RAIE måste vara "satt" för att IOC skall fungera. Antagligen så är "funkar inte USART" en sidoeffekt, t.ex p.g.a av att du har felkonfigurerat IOC eller felkopplat tgnt bordet så att IOC trigger hela tiden...
Användarvisningsbild
klasg
Inlägg: 187
Blev medlem: 29 juni 2005, 21:12:24

Inlägg av klasg »

sodjan:
Jag testade nu med att ta bort WPU och koppla in några motstånd till jord istället och satt RAIE igen. Då blev det interrupt direkt... :)

Men nu hittar jag en massa andra fel. Dels så verkar jag ha en massa osc-signaler ut från flera ben, därför funkar bara en col (den utan störand signaler). Sedan så funkar den bara ibland...man måste start om den flera gånger innan man kan testa trycka...

Är störningar på RA0, RA1, RA2.
/Klas
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.
Du får väll kolla dina kopplingar.
Det är för lite konkret i din beskrivning
för att kommentera mer just nu.
Vad menar du med "störning" och "osc-signaler" ?
Skriv svar