- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: I²C Master m328 kann Slave m328 nicht lesen

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694

    I²C Master m328 kann Slave m328 nicht lesen

    Peinlich. Meine Fehlersuche und Sachstudie zum Thema hilft mir seit Tagen (Nächten) nicht weiter. Bisherige Erfahrungen mit I²C auf Atmelcontrollern: schreiben und lesen eines Beschleunigungsaufnehmers, Code von Sternthaler mit leichten Abwandlungen.

    Aktuell:
    Kurzfassung: Daten von einem Master (mega328/8MHz int. Osz) können auf einen Slave (mega328/20MHz Quarz) übertragen werden. Lesen der Daten vom Master geht nicht - Programm hängt.

    AV RStudio4 4.18 Build 700, Master-Slave-Kopplung nach RN/Wissen (siehe hier - klick) mit den dort präsentierten Codes bzw. PFleury-Lib.
    Master :
    - Der Code für Master wurde geringfügig abgewandelt: Sende-/Leseschleife durch while(1) mit eingebauter Tastenabfage. Wenn Taste gedrückt werden drei andere Bytes definiert wie ohne Tastendruck.
    - Die Slaveadresse ist hex70.
    - Eigene, bewährte UART-Routine
    Slave :
    - Der Code wurde bis auf die Slaveadresse übernommen.

    Ergebnis:
    - Schreiben der beiden Datensätze mit/ohne Taste geht einwandfrei, siehe Ausgabebeispiel - RS232 vom Slave
    - Die Schleifendurchläufe des Masters werden durch eine getoggelte LED signalisiert.
    - Lesen des Masters der geschriebenen Daten geht nicht, das Programm bleibt nach der Abfrage "Slave bereit zum Lesen" hängen - belegt durch LEDsignal am Master (toggelt nicht), siehe dazu Codeabschnitt.

    HTML-Code:
      i2c_init();                   // init I2C interface
    while (1)
    {                               // Schleife mit verschiedenen Ausgaben
      if (!(PIND & (1 << PIND2)))   // Taste bringt GND auf PD2?
      {                             //
        byte1 = 42;
        byte2 = 43;
        byte3 = 44;
      }
      else                          //
      {                             //
        byte1 = 56;
        byte2 = 57;
        byte3 = 58;
      }                             // Ende if (!(PIND & (1 << PIND2)))
                                    //
      if(!(i2c_start(SLAVE_ADRESSE+I2C_WRITE))) //Slave bereit zum schreiben?
      {
        i2c_write(0x00);            // Buffer Startadresse setzen  
        i2c_write(byte1);           // Drei Bytes schreiben...
        i2c_write(byte2); 
        i2c_write(byte3); 
        i2c_stop();                 // Zugriff beenden
      }                             //
      else
      {
      /* Hier könnte eine Fehlermeldung ausgegeben werden... */
      }
    /*
      waitms ( 200);                 // Warten vor Lesen ?? 30Nov2011, 2300
      if(!(i2c_start(SLAVE_ADRESSE+I2C_WRITE)))     //Slave bereit zum lesen?
      {                             //
                                    //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       ToggleBit(PORTD, 5);           // LED auf PC2 toggeln
    // ###>>> 02 Dez 2011, 0045: Programm kommt bis hieher, dann bleibt es stehen
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                    //
        i2c_write(0x00);            //Buffer Startadresse zum Auslesen
        i2c_rep_start(SLAVE_ADRESSE+I2C_READ); //Lesen beginnen
                                    //
        byte1= i2c_readAck();       // Bytes lesen...
        byte2= i2c_readAck();       
        byte3= i2c_readNak();       // letztes Byte lesen, darum kein ACK
        i2c_stop();                 // Zugriff beenden
      }                             
    */
    //else                          
    //{                             
    ///* Hier könnte eine Fehlermeldung ausgegeben werden... */
    //}                             
    Ausgabebeispiel:
    Klicke auf die Grafik für eine größere Ansicht

Name:	I2C-test.jpg
Hits:	22
Größe:	142,5 KB
ID:	20704

    Frage:
    Wo steckt der Fehler??
    Danke im Voraus für eure Hilfe.
    Geändert von oberallgeier (02.12.2011 um 13:51 Uhr) Grund: Ausgabebeispiel nachgereicht
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Kriege TWI mit ATmega-Master & ATtiny-Slave nicht zum La
    Von Comanche im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 20.12.2010, 19:08
  2. Slave-Master-Slave übertragung geht nicht
    Von Dämmi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 26.11.2008, 00:08
  3. i2c, master slave, twi_lib oder nicht - bin total verwirrt
    Von m@rkus33 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 23.03.2007, 19:13
  4. I²C Master und Slave, Problem bei Master Reset
    Von ACU im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 01.03.2007, 11:07
  5. LPT-Master <=> SPI <=> AVR-Slave
    Von BlueNature im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 17.04.2006, 20:38

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress