Hallo Leute, bräucht da mal hilfe aber kuckt zuerst in den schaltplan habe die Portpins wie folgt konfiguriert: cbi(DDRx,x); //set as input sbi(PORTx,x);//set pull up stimmt oder oder ? Interrupt kommt aber die tasten werden nicht erkannt, HIIILLLFEEE ! ;) meine Interruptrouriene: PORTC,3 ist eine Led zum anzeigen dass eine Taste erkannt wurde. (wenn ich die Led ohne Prüfung aktiviere funktioniert alles nach 250ms schaltet die wieder ab) SIGNAL(SIG_INTERRUPT0) { cbi(GICR,INT0); disable interrupt INT0 wait_ms(250); enable interrupt INT0 after 250 ms //sbi(PORTD,3); // only for interrupt test if(!PINB1) { tastatur = 0x01; sbi(PORTD,3); } if(!PINB2) { tastatur = 0x02; sbi(PORTD,3); } if(!PINB1) { tastatur = 0x03; sbi(PORTD,3); } if(!PIND5) { tastatur = 0x04; sbi(PORTD,3); } if(!PIND6) { tastatur = 0x05; sbi(PORTD,3); } if(!PIND7) { tastatur = 0x06; sbi(PORTD,3); } if(!PINB7) { tastatur = 0x07; sbi(PORTD,3); } if(!PINB6) { tastatur = 0x08; sbi(PORTD,3); } if(!PIND4) { tastatur = 0x09; sbi(PORTD,3); } }
Ich weiß ja nicht mit welchem Compiler du arbeitest (vermutlich avr-gcc). Zumindest bei dem sind sbi und sbi aus dem "Wortschatz" verbannt worden. bei PIND1 würde ich vermuten, dass du das als Makro mit "PIND &(1<<0)" realisiert hast. Sonst geht das auch nicht mit dem AVR-GCC... Und Warteschleifen haben in InterruptServiceRoutinen nichts zu suchen!
ja nee iss chon klar der wartet ja nicht... der interrupt wird wird in der main mit einem flag enabled :) und die anweisungen sbi cbi habe ich mit aus dem alten arvgcc copiert
Ich schätze nicht, dass er Makros verwendet hat hier. Die Prüfanweisung müsste lauten: if (PIND & (1<<PD2)) für Pin 2 tu die sbi und cbi lieber raus.. Macht der Compiler auch automatisch mit REG |= (1<<bit) REQ &= ~(1<<bit)
Nur so als Hinweis, dieses Konzept ist eine Sackgasse. "wait_ms(250);" in einem Interrupt ist eine Totsünde. Schmeiß besser die Dioden wieder raus und entprelle im Timerinterrupt: http://www.mikrocontroller.net/articles/Entprellung http://www.mikrocontroller.net/attachment.php/252480/C_TAST.C Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.