mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Slave antwortet nicht richtig


Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
ich habe ein kleines  Problem, ich habe einen DSP der über I2C mit einem 
Atmega8 kommunizieren soll, wobei der DSP der Master ist, der Atmega8 
soll nur im Slave Transmit Modus betrieben werden.
Er reagiert auch mit dem Interrupt auf die Anfrage des DSP aber 
antwortet nicht richtig. Anstatt der Daten die der Atmega8 senden soll, 
sendet er seine eigene Adresse.
Hier der Quellcode der Interruptroutine und die Initialisierung

TWI_INI:
  ldi        temp, ADRESS
  out        TWAR,temp          ; Adresse für das I2C Interface
  ldi       temp,(1<<TWEA)|(1<<TWEN)|(1<<TWIE)  ; TWI-Modul als Slave initialisieren
  out        TWCR,temp
  ldi        temp,0xFC
  out        TWSR,temp          ; Prescaler für TWI auf 1

;interrupt
I2CInt:

  in      Bufferi,SREG
  ldi     tempi, (1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE)    ; Interrupt Flag löschen
  out     TWCR,tempi  
  in       Tempi, TWSR    ; Status-Register abfragen            
  andi     Tempi, 0xF8    ; Bit0...2 ausblenden (Prescaler und Reserve-Bit)

  cpi     Tempi, TW_ST_SLA_ACK          ; 0xA8   SLA+R
  breq     TWSI_TW_ST_SLA_ACK  
TWSI_TW_ST_SLA_ACK:            ; xA8   10101000 (SLA+R wurde empfangen; ACK wurde zurückgesendet)    
  sbi    PortD,1    
  out    TWDR,temp2
  cbi    PortD,1
  ldi    Tempi, (1<<TWINT|1<<TWEA|1<<TWEN|1<<TWIE)
  out    TWCR,Tempi
  out      SREG,Bufferi

reti

über den Trigger an PD1 sehe ich, das er auch jedes mal da lang kommt?

Sieht hier jemand einen Fehler?

Gruß
Mathias

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Interruptflag darf erst ganz zum Schluß des Handlers gelöscht 
werden!!!

Damit sagst Du ja dem HW-I2C, daß alles getan ist und es den SCL-Pin 
loslassen kann, damit der Master weitermacht.


Peter

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnelle Antwort, das war's...
es funzt :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.