hassu mal nen messgerät, und könntest mal die int-leitung durchmessen, ob da überhaupt nen signal kommt?
Martin
Druckbare Version
hassu mal nen messgerät, und könntest mal die int-leitung durchmessen, ob da überhaupt nen signal kommt?
Martin
Hallo Martin,
die Kommunikation des PCF2 mit dem Mega32 funktioniert doch über den I2C-Bus.
Kann es vielleicht sein, dass es nicht funktioniert, weil der "stop" des I2C die Kommunikation abschaltet und somit auch der Interrupt nicht abgefragt wird?
Silvio
ich schau mir jetzt mal das datenblatt von deinem PDF an, und gucke mal, wann da überhaupt nen INT rauskommt, und wann nicht, dann sach ich bescheid
wie heißtn der PCF genau?
Martin
PCF heißt PCF 8574AP.
Silvio
so, der int kommt immer wenn der pcf im read-mode ist, aber sowohl auch immer, wenn nen portchange stattgefunden hat, ausserdem isser wirklich low-active, also iss das mit dem falling schon ganz richtig...
jetzt weiß ich aber nicht so ganz, ob der int denn auslöst, kann ja sein, dass wir hier nen spezialfall haben, also wärs echt mal gut, du würdest mit nem messgerät nachmessen, ob da ne spannung von 5V auf 0V fällt, wenn du ne tastedrückst, mach das mal...
jetzt binnich auf der nächsten seite, und schreibe die antwort, weiß also nicht, ob du den pull-up angemacht hast, ich glaube, so wie ich das jetzt verstanden habe, darf der nich an...
Martin
Habe nun noch mal ein Terminalfenster aufgemacht, um den Status anzuzeigen.
Konfiguration Interrupt und Eingang:
Spannung am Int2 = 1 Volt - also undefiniert offen.Code:Config Int2 = Falling
Enable Int2
Enable Interrups
On Int2 Int2_isr
Config Pin.b2 = Input
Config Portb.2 = 0 'Pull-up aus
->> wird permanent die Int2_isr ausgeführt und der Wert im Terminal aktualisiert.
Tasten werden mit den entsprechenden Werten 247 und 251 wiedergegeben.
Gelentlich reagiert dann die Tasteneingabe mit Starten der Motoren. Dann bleiben die Motoren solange an, bis die selbe Taste wieder gedrückt wird. Die Int2_isr wird, solange der Motor läuft, nicht durchlaufen. Somit kann auch nicht auf die andere Taste reagiert werden.
Konfiguration Interrupt und Eingang:
Spannung am Int2 = 0 Volt - Definiert LOWCode:Config Int2 = Falling
Enable Int2
Enable Interrups
On Int2 Int2_isr
Config Pin.b2 = Input
Config Portb.2 = 1 'Pull-up ein
->> keine Terminalausgabe, die Int2_isr wird nicht durchlaufen.
kann ja auch nicht da Tasten gegen GND schalten. Keine Interruptauslösung.
Gebe ich 5 Volt auf einen Eingang am PCF passiert auch nichts. Bei direkter Beschaltung des Int2 mit High (5Volt) - läuft die Int2_isr ab und gibt 255(1111 1111) im Terminal ab.
Habe an den Int1 auch getestet:
Bei Int1 ist das genau so. Wenn ich nun mit eingeschalteten Pull-up Widerstand den Int(x) direkt mit High(5Volt) schalte, läuft die Int(x)_isr ab.
Frage mich jetzt, warum der PCF die 5Volt am Eingang nicht ausgibt.
5Volt am Eingang Port3 - Ausgabe "3"(0000 0100) und Port 4 - Ausgabe "4"(0000 1000)
Silvio
LOL
das iss ja funnig, ich glaub so langsam müsste ich mir die schaltung hier auch mal aufbaun, ich weiß jetzt auf jeden fall nicht mehr, warum da jetzt wo der fehler liegt...
tut mir echt leid, ich meine das müsste so gehen, der int iss ja auch enabled, aber warum der undef iss, weißich nich, wundert mich eigentlich, nen pull-down braucht der nich, der iss ja eh active-low....
hast du noch nen ansatz?
[EDIT]aso, es gibt noch sowas, dass du oben sachst "on var = ... var_isr" dann sollte der springen, wenn die var sich ändert... also versuch das mal, und dann lass in der do-loop einfach nur noch die taster auslesen[/EDIT]
Martin
was meinst du mit "var"?
Silvio
deine variable, die du für die tastenspeicherung nimmst, also i2cdaten
Martin
I2cdaten kann doch keine _isr (interrupt service routine) ausführen.
Das kann doch nur der Interrupt. Oder ?
Silvio