Forum: Mikrocontroller und Digitale Elektronik I2C Slave im Tiny26


von Sebastian__ (Gast)


Lesenswert?

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

von Beda Ruedi (Gast)


Lesenswert?

Hallo Sebastian,

Schau mal da:

http://www.avrfreaks.net/Tools/showtools.php?ToolID=452

Gruss
Ruedi

von Sebastian__ (Gast)


Lesenswert?

@Beda Ruedi

danke die PDF datei ist sehr hilfreich.

Aber ne kleine fage habe ich dazu noch, warum muss man die SCL Leitung,
also die Clock Leitung im Slave Betrieb als ausgang betreiben. Müsste
man nicht die Clock leitung als eingang konfigurieren? Lt. PDF wird in
Step1 die SCL leitung als Output im DDRx Register geschalten und der
ausgang im Portx Register auf 1 gesetzt.
könnte mir das mal jemand plausibel erklären?

Danke
Sebastian

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
Noch kein Account? Hier anmelden.