Hi
Ich brauch auch eigentlich keine Interruptsteuerung, hauptsache mein pcf8574 reagiert.Dummerweise sind alle Codes, die ich im Netz gefunden habe nicht interrupt basiert.
Stimmt, und da hab ich mich auch durchgequählt.In den Datenblätter der Conroller mit TWI interface (zb Mega32) findest DU C und Assembler Code für die Implementierung.
Hab auch ein plausiebles Oszzi-Bild, leider bekomme ich aber keinen Acknowledge zurück.Code:.include "m8def.inc" .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp1 ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp1 ldi temp1, 0xFF ; Port B & C als Ausgang schalten out DDRB, temp1 out DDRC, temp1 ;=========================================================================== ldi temp1, 12 out TWBR, temp1 ldi temp1, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) out TWCR, temp1 ; Sende Start condition wait1: in temp1,TWCR ; Warten bis das TWINT Flag gesetzt ist. sbrs temp1,TWINT ; Das bedeutet das die START Condition gesetzt ist rjmp wait1 in temp1,TWSR ; TWI Statusregister abfragen andi temp1, 0xF8 ; Prescalerbits Maskieren ; sbrs temp1, TWSTA ; Startcondition prüfen ; brne ERROR ldi temp1, 0x40 ; Wert ins DatenRegister laden (Adresse?) out TWDR, temp1 ldi temp1, (1<<TWINT) | (1<<TWEN) ; TWINT löschen um Übertragung zu starten out TWCR, temp1 wait2: in temp1,TWCR ; Warten bis das TWINT Flag gesetzt ist. sbrs temp1,TWINT rjmp wait2 in temp1,TWSR ; TWI Statusregister prüfen. andi temp1, 0xF8 ; Prescaler maskieren sbrs temp1, TWEA ; Wenn kein Acknowledge kommt in ERROR springen. brne ERROR ldi temp1, 0x40 ; Daten in TWDR laden. out TWDR, temp1 ldi temp1, (1<<TWINT) | (1<<TWEN) ; TWINT löschen um Übertragung zu starten out TWCR, temp1 wait3: in temp1,TWCR ; Auf TWINT Flag warten sbrs temp1,TWINT rjmp wait3 in temp1,TWSR ; TWSR Status prüfen andi temp1, 0xF8 ; Prescaler maskieren sbrs temp1, TWEA ; Wenn kein Acknowledge kommt in ERROR springen brne ERROR ldi temp1, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO) ; Stop condition out TWCR, temp1 main: ldi temp1, 0x04 ; Indikator Ausgang für main-Schleifen out PORTB, temp1 rjmp main ERROR: ldi temp1, 0x01 ; Indikator Ausgang für ERROE-Schleife out PORTB, temp1 rjmp ERROR
Kann mir einer nochmal BITTE BITTE helfen?
Danke
Gruß nOm3X
Edit: Hab Kommentare reingemacht. (so in ertwa übersetzt was im Datenblatt ist.)







Zitieren

Lesezeichen