I2C Slave im Tiny26

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
Gast
@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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.