www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt bei TWI Slave (Atmega8)?


Autor: ipirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!!
Ich bitte um Hilfe, da ich zur zeit "auf der Leitung stehe" :-)!!

Ich will einen ATmega8 im TWI (I2C) Slave Modus laufen lassen, es soll 
eine i2C Motor Steuerung werden.

Nun meine Frage:
Der Atmega8 besitzt einen TWI Interrupt Vector (18), der wird ausgelöst 
wenn das TWINT bit im TWCR Register gesetzt ist.
Wird dieses Bit auch gesetzt, wenn die Slave Adresse, die ich dem Atmega 
gegeben habe, auf den Bus gesendet wurde, oder wird das Bit nur gesetzt 
wenn das TWI Modul mit der Datenübertragung fertig ist??? Oder weder 
noch???

Wenn dadurch kein Interrupt ausgelöst wird, gibt es dann noch eine 
andere möglichkeit den Atmega8 in eine ISR springen zu lassen, wenn 
seine Adresse am Bus liegt oder zumindest wenn die Startbedingung auf 
den Bus gesendet wurde????

Bitte um dringende Hilfe!!!!!

MFG

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich mich erinner, wird der Interrupt immer gesetzt, wenn am TWI 
was passiert. Du musst dann in der ISR unterscheiden, was passiert.

z.B. eine der ISRs von mir:
ISR (SIG_2WIRE_SERIAL)
{
  ui8_t data = 0;
  switch (TW_STATUS)
  {
    case TW_SR_SLA_ACK: // 0x60, SID received
      TWCR_ACK();
      TWI_RxBuf_Cnt = 0x00;
      TWI_TxBuf_Cnt = 0x00;
      break;
    case TW_SR_DATA_ACK: // 0x80, Slave receiver, get data
      data = TWDR;  
      TWI_RxBuffer[TWI_RxBuf_Cnt++] = data;
      TWCR_ACK();
      break;
    case TW_ST_SLA_ACK:
    case TW_ST_DATA_ACK: // 0xB8, Slave transmitter, send data
      TWDR = TWI_TxBuffer[TWI_TxBuf_Cnt++];
      TWCR_ACK();
      break;
    case TW_ST_DATA_NACK: // 0xC0, no more data requested
    case TW_SR_DATA_NACK: // 0x88
    case TW_ST_LAST_DATA: // 0xC8, last data byte transmitted
    case TW_SR_STOP: // 0xA0, Stop
    default:
      TWI_NewMsg = 1;
      TWCR_RESET();
      break;
  }
}

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.