Ich versuche gerade, zwei Pins des Portexpander an einem Mega644 per
INT2 einzulesen, allerdings werde ich mit Interrupts überhäuft...
Angeschlossen ist der PCF an I2C mit zwei 4k7 Pullups. Der INT# Pin ist
direkt mit PB2 ohne Pullup verbunden, da der ja sowieso 1 sein sollte,
wenn sich nichts tut an seinen Eingängen...
Die Zwei Eingänge sind P0 und P1 vom Portexpander, an den restlichen
Pins hängen via ULN2003 ein paar LEDs, da soll später eine Lichsteuerung
für ein ferngesteuertes Auto draus werden.
P0 und P1 sind an einen Stecker herausgeführt, keine Pullups/Pulldowns.
Der Code funktioniert an sich soweit, dass wenn ich den PCF rausnehme
und PB2 (INT2) offen lasse, löst er keine Interrupts aus und wenn ich
ihn auf Masse lege, löst er aus.
I2C funktioniert auch, die Ein- und Ausgänge des Portexpanders lassen
sich ohne Probleme schalten.
Wenn ich nun P0 auf Masse lege, hören die Interrupts auf. Bei P1 bringt
das allerdings nichts.
Hier mein Code:
1 | int main() {
|
2 | init_uart();
|
3 | uart_puts("test\n");
|
4 | DDRB |= (1<<PB2);
|
5 | PORTB |= (1<<PB2);
|
6 | EIMSK |= (1<<INT2);
|
7 | i2c_start(0x7E);
|
8 | i2c_write(0xFF);
|
9 | i2c_stop();
|
10 | sei();
|
11 | for(;;);
|
Wie gesagt, I2C funktioniert, der UART auch, auch der externe Interrupt
an sich.
Ich hoffe ihr könnt mir dabei weiterhelfen und mich auf die richtige
Spur bringen...