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.
