- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wirklich steckenbleiben kann er ja eigentlich nur bei
    Code:
        i2c_write(0x00);            // Da kann man hängen bleiben, wenn der Slave mit "clock-stretch" den master auf das ACK warten lässt
        i2c_rep_start(SLAVE_ADRESSE+I2C_READ); // da bleibt man hängen, wenn der Slave den Bus nicht freigibt.
    Ich weiss nicht, ob bei der Lib ein "Timeout" für diese zustände eingebaut ist. (offenbar nicht)
    Baue zwischen den Befehlen erstmal irgendeine LED-Flunzlerei ein, damit du siehst, ob er bei "write" oder "rep_start" hängen bleibt.

    EDIT: bei HW-TWI sollte so ein ewiger CLock-stretch eigentlich nicht möglich sein. d.h. der Verdacht richtete sich auf den Rep_Start.
    Geändert von PicNick (02.12.2011 um 14:21 Uhr)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    Erstmal danke, ich geh in ner Weile drüber (aktuell total lahme Hände/Arme, zuviel Kletterhalle).
    Ciao sagt der JoeamBerg

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Du weisst ja, wenn's hinten weh' tut, soll man vorn' aufhören
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    Zitat Zitat von PicNick
    ... ob ... ein "Timeout" ... eingebaut ist. (offenbar nicht) ...
    Offenbar nicht. Ist nicht zu sehen. Und ich habe meine LED/Leuchtfeuer-Kommunikation weiter ausgebaut:

    Zitat Zitat von PicNick
    ... Baue ... irgendeine LED-Flunzlerei ein ... Verdacht ... auf den Rep_Start.
    Damit ist der "i2c_rep_start" als Missetäter überführt. Also drei i2c_readAck/Nak();// Bytes lesen haben das Koma verhindert. Jetzt schaue ich mal mit nem zusätzlichen USART nach was da gelesen wird (der gibt im Moment nur Schrott aus - seltsam.

    Danke jedenfalls für den guten Tip, den rep_start zu verdächigen - das war ein Treffer.


    [OT]"... wenn's hinten weh' tut, soll man ..." Ich klettere eigentlich immer Gesicht zur Wand . . . . [/OT]
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    So. Es stimmt. Drei "i2c_readAck/Nak();// Bytes lesen" statt des "i2c_rep_start" haben das Koma verhindert.

    Zum Glück habe ich mir über UART vom Master die nun gelesenen Bytes ausgeben lassen. Baaahhhh - die waren (nur) die übermittelten Adressen(offsets) des zu lesenden Bytes. Also noch schnell ein "i2c_start(SLAVE_ADRESSE+I2C_READ)"-Commando, aber nicht das "i2c_rep_start(SLAVE_ADRESSE+I2C_READ)"! eingefügt - und schon steht wieder alles.

    Aktuell gilt u.A. dies:
    HTML-Code:
    Modul "master", defines + includes vor "main" enthält u.a.
     #define SLAVE_ADRESSE 0x70
    Modul "i2cmasterl.h" (l=lokal) enthält u.a.
    /** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
    #define I2C_READ    1
    /** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
    #define I2C_WRITE   0
     
    Fazit: I2C-Slave-Schreiben geht, I2C-Slave-lesen geht nicht ... und bin so klug als wie zuvor.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    Sooo, nun gehts.

    Danke Robert für den Hinweis auf den möglichen Fehler. Mittlerweile habe ich den Code für den Test des Master geringfügig ergänzt und das Auslesen, auch mit "i2c_rep_start" funktioniert jetzt klaglos und sicher. Ich dagegen bin nicht sicher, dass der Code "... Testprogramm für den Master..." aus dem RNWiki bei anderen Anwendungen funktioniert (steht ja extra dort "... getestet ..." - allerdings heißt es nicht, dass der auch läuft *ggg*) - wie geschildert gings bei mir nicht. Ich meine trotz meiner bescheidenen Kenntnisse, dass der Codeschnippsel gerade für Testzwecke verbesserungswürdig ist.

    Trotzdem danke Robert.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Chypsylon
    Registriert seit
    02.02.2011
    Ort
    Graz/Österreich
    Beiträge
    256
    Ich hatte heute das gleiche Problem (schreiben geht -lesen nicht), und auch in anderen Threads wird berichtet das lesen nicht funktioniert. Ich verwende jetzt die Library von http://www.jtronics.de/avr-projekte/.../twi-slave-avr , die auch auf Anhieb funktioniert hat und vom Aufbau relativ gleich ist...

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    Hi Chypsylon,

    Zitat Zitat von Chypsylon
    Ich hatte heute das gleiche Problem (schreiben geht -lesen nicht), und auch in anderen Threads wird berichtet das lesen nicht funktioniert ...
    Ja ja, die jtronics, nicht schlecht . . .
    Die lib von PFleury ist sicherlich ok - und ob die andere Lib nen timeout hat, hatte ich noch nicht nachgesehen. Ich glaubs aber nicht. PFleurys lib läuft bei mir gut, ich habe jetzt nicht nur einen Beschleunigungsmesser gelesen und beschrieben (Einstellregister modifiziert) sondern auch meine mega328-mega328-Kopplung von Steckbrett/8Mhz-int zu Experimentierplatine/20MHz-Quarz problemlos in Funktion. Sowohl Schreiben als auch Lesen. Ausserdem hatte heute nachmittags mein Master-Testcode noch ne kurze, erfolgreiche Unterhaltung mit (m)einem EEPROM 24C16 gehabt. Einwandfrei. Nur das Beispiel im R N Wissen hat möglicherweise ne Macke - ich hatte ja erwähnt "... getestet ..." heißt noch lange nicht "erfolgreich getestet" - und bei Dir gehts ja auch prompt nicht.
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    Um die Erledigung der Frage korrekt zu begründen, hier den aktuellen Stand.

    Es werden vom Master (mega328/8MHz-intOsz) drei Bytes an den Slave (mega328bzw.168/20MHz-Quarz) gesendet. Je nachdem ob eine Taste gedrückt oder nicht gedrückt ist, werden zwei unterschiedliche Datensätze gesendet. Slaveadresse Schreiben x70, Slaveadresse Lesen x70+1. Schreibziel ist Position 2 bis 4 des Zielspeichers {von 1 bis 10 möglichen Plätzen}. Nach dem Senden des Datensatzes werden die drei Bytes zurückgelesen. Senden, Zurücklesen und evtl. Fehlermeldung werden im Terminal ausgegeben, siehe Beispiel der Ausgabe des Masters. Es ist eine Terminalverbindung des Masters (9600 Bd da ohne Quarz), des Slaves (128kBd) und des Sniffers (57600 Bd) eingesetzt.

    ......Klicke auf die Grafik für eine größere Ansicht

Name:	I2C_Test-vom-06-Dez-2011-17-38_ausschnitt.jpg
Hits:	57
Größe:	66,4 KB
ID:	20804

    Um die Unterhaltung der beiden Controller mitzuschneiden wurde ein Sniffer (klick) gebaut (Dank an PDannegger). Tiny2313 mit 16MHz-Quarz. Beispiel für einen Mitschnitt:

    I2C-Sniff 2313:
    ...
    s70a01a36a37a38ap<\r
    ...
    s70a01a36a37a38ap<\r>

    Der Sniffer ist noch verbesserungswürdig, die Ausgaben sind gelegentlich gestört. Der obige Mitschnitt zeigt zweimal :
    Sende an Adresse x70 / Speicherplatz 01 {von 10} / Datum x36 senden mit ACK / Datum x37 senden mit ACK / Datum x38 senden mit NAK / Stop
    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
  •  

Labornetzteil AliExpress