Gast
#44251
Hallo, ich habe ein kleines Problem in der I2C Slave implementation bei dem Tiny26 Controller, ich will den Controller als I2C Slave über eine feste adresse ansprechen, aber irgendwie komme ich aus den grundlagen nicht raus. ;//Start Condition IE, Couner Overflow IE, Sel. Two Wire Moder 10, ext. Clock Source, I2C_Init: ldi temp0, (1<<USISIE)|(1<<USIOIE)|(1<<USIWM1)|(0<<USIWM0)|(1<<USICS1)|(0<<USICS0)| (0<<USICLK)|(0<<USITC) out USICR, temp0 sei ;// Global IRQ Enable damit initalisiere ich die USI Schnittstelle, PB0 und PB2 sind als eingänge mit PullUp Widerständen konfiguriert. Wie kann ich nun Feststellen das ich bereits 8 bit vom master empfangen habe? es sind ja bit 1-7 die adresse und bit 0 gibt die Datenrichtung an. Ich will nur ein paar datenbytes an den master senden. wenn ich erkannt habe das mein Controller gemeint ist müsste ich ja ein ACK senden und meine Daten in das USIDR register legen und dann müsste ja vom master ein ACK kommen. wie merke erkenne ich das? um die ganze kommunikation zu beenden gibt es ja die Stop Condition, die ja auch ein Flag auslöst. Ist es überhaut sinvoll die USI Schnittstelle für ne I2C slave implementation zu benutzen? Könnte mir mal jemand mit ein paar zeilen Code zb. für die Adress erkennng aushelfen? Die Atmel Appnotes habe ich bereits gelesen , aber die waren mir wenig hilfreich da dort nur von kompletten Software I2C oder kompletten HW I2C (TWI) die rede war. Danke Sebastian