- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 11

Thema: Amtel atmega 32 als I2C- SLAVE Bus mit 250kBaud im Interrupt Modus

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hallo,

    irgendwie gebe ich Dir ja recht, nur gibt es den irgendwo eine entsprechende Beschreibung, wann welches Signal innerhalb der Interrupt-Routine ausgelöst wird. Die Beschreibung aus der Headerdatei <twi.h> ist nicht wirklich hilfreich oder ?

    Ich weiss zum Beispiel nicht sicher, welchen Anteil der Steuersignal die Hardware des atmega32 durchführt und welche nicht.

    Folgende Signale verarbeitet meine und auch die RN-Wissens Routine eins Slave im Interrupt Mode.
    Code:
    {
        switch (TW_STATUS)                                            //Check the TWI-Status register
            {
            case    TW_REP_START:                                    // Repeated Start bestätigen
                       break
            case    TW_SR_SLA_ACK:                                    // 0x30 Slave Receiver, Slave was addressed
                    break;
            case    TW_SR_DATA_ACK:                                    // 0x80 Slave Receiver, a data byte received
                break;
        case TW_ST_SLA_ACK:                                            //0xA8 Slave addressed in read mode
        case TW_ST_DATA_ACK:                                        //0xB8 Slave Transmitter, Request of data
            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 in TWDR has ben transmitted (TWEA = “0”);
    //case TW_SR_STOP:                                                         // 0xA0 STOP empfangen has been received
        default:     
            AcknowlegeFlag=2;
        break;
             break;    
        }
        
    if (AcknowlegeFlag == TRUE )        TWCR_ACK;
    if (AcknowlegeFlag == FALSE )        TWCR_NACK;
    if (AcknowlegeFlag == 2 )            TWCR_RESET;
    }

    Nur werden hier Start / Stop / Repeated Start komplett aussen vorgelassen, diese werden laut diesem Code über den Default geleitet (also Reset ?!).

    Wird diese Routine auch dann ausgeführt, wenn ich mit einem anderen Partner rede ? Die Daten der Adresse werden natürlich mit einem Takt von 250kBaud übertragen. Der atmega kann den Fast Modus, das sollte also nicht das Problem sein.

    Edit1:
    Die Bilder 1 und 2 zeigen jeweils das eigentlich Protokoll, was ich verwende
    Picture 1: Zeigt den Schreibzugriff. Das erste Byte ist hierbei die Adresse, wo die Daten abgelegt werden
    Picture 2: Zeigt den Lesezugriff. Das erste Byte ist hierbei die Adresse, wo die Daten gelesen werden soll. Danach der Repeated Start und der Lesezugriff.
    Hier wäre das Problem, der Repeated Start und die neue Slave-Adresse, dieser ist aber bei Lesen, was ja geht

    Edit2:
    Ich habe den "Repeated Start" noch eingefügt. Hier wird dann mit einem ACK geantwortet.
    Nur habe ich ja nur mit dem Schreiben Probleme, hier wird ja eh nur jedes Byte vom Master mit "ACK" beantwortet.
    Es erfolgt keine Änderung der Datenrichtung (Repeated Start). Dies ist ja doch eigentlich die einfache Richtung.

    Edit3: Hier die Bedingungen, wann das Modul TWI einen Interrupt auswirft.
    Seite 176 vom Atmega32 gab mir die Infos:

    The TWINT Flag is set in the following situations:

    After the TWI has transmitted a START/REPEATED START condition

    After the TWI has transmitted SLA+R/W

    After the TWI has transmitted an address byte

    After the TWI has lost arbitration

    After the TWI has been addressed by own slave address or general call

    After the TWI has received a data byte

    After a STOP or REPEATED START has been received while still addressed as a slave

    When a bus error has occurred due to an illegal START or STOP condition

    Gruss R.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Picture2.JPG   Picture1.JPG  
    Geändert von Ritchie (22.07.2012 um 15:27 Uhr) Grund: Zusatzinfos
    Kaum macht man es richtig, schon funktioniert's ...

Ähnliche Themen

  1. Atmega in MPCP Modus
    Von demmy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 07.05.2012, 08:23
  2. Antworten: 3
    Letzter Beitrag: 06.11.2010, 18:54
  3. Interrupt beim I2C Slave
    Von guenter1604 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 07.12.2009, 18:59
  4. Interrupt bei TWI Slave (Atmega8)?
    Von ingo pirker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 20.11.2009, 22:36
  5. I2C Slave Interrupt
    Von simple im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 29.11.2006, 17:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen