- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: TWI: Slave erkannt, kein Datenfluß

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    44
    Beiträge
    269

    TWI: Slave erkannt, kein Datenfluß

    Anzeige

    Praxistest und DIY Projekte
    Moin moin!

    Also, beiliegende Codes sollen eine Kommunikation zwischen einem ATmega16 (Master Receiver) und einem ATMega8 (Slave Transmitter) über TWI aufbauen. Es funktioniert bis zum ersten Absatz in der Funktion TWIreaddata() in TWIRCV.C. Die print-Befehle sind meine Version des guten alten printf-Debuggings, sie geben ein paar Zahlen am LCD aus und sind durchnumeriert, um zu sehen, wo das Programm hängt.
    So wie die Codes hier gedruckt sind, sehe ich auf dem Display als TWSR den Statuscode 0x40 und die Nummer 6, das heißt, der Slave hat erkannt, daß er angesprochen wird und mit ACK bestätigt.

    Wenn ich aber die Zeile mit dem print(....,7) nicht wegkommentiere, bekomme ich auf dem Display die Anzeige Statuscode 0xF8 und die Nummer 7. Dort bleibt das Programm also hängen und sagt mir, daß der Zustand nicht definiert ist, weil TWINT nicht gesetzt ist. Eigentlich sollte aber das erste Datenbyte übertragen und ACK zurückgemeldet worden sein und der Statuscode dementsprechend 0x50 sein. Scheint aber nicht zu funktionieren, obwohl das Ansprechen des Slaves mit seiner Adresse geklappt hat.

    Sieht jemand, woran das liegen könnte?

    Gruß,

    Nils
    Angehängte Dateien Angehängte Dateien

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Weiß nicht, ob du mit den Printf's nicht das Timing vernichtest. Mach nur dann einen Printf, wenn der Status nicht paßt und du sowieso "stop" machst.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    ich glaub da ist noch ein weinig durcheinander mit dem Code,
    schau mal im Wiki, da hab ich das mal per Hand versucht, eine Übertragung hinzubekommen (die auch klappt), das muss man schon in einer bestimmten Reihenfolge machen, damit das mit dem Bus funktioniert.
    Und die Pullups müssen schon echt sein, denn ich glaub die internen Pullups wirken nicht, wenn TWI aktiviert ist.
    Das TWI muss vorher schon aktiviert werden, und nicht erst gleich mit der Startsequenz, der Slave muss sich da ja auch erst damit zurechtfinden, denn die Leitungen bauchen einen definierten Status wenn nix los ist.

    siehe TWI und I2C, und TWI_Praxis im Wiki.

    Edit:
    Und so wie mir der Slavecode ausschaut, macht der sowieso nix.
    Und von alleine sendet der kein ACK zurück, wenn seine Adresse erkannt wurde.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hallo,

    also der Master Receiver und Slave Transmitter Modus funktioniert bei mir!
    Weiß nicht, ob du mit den Printf's nicht das Timing vernichtest. Mach nur dann einen Printf, wenn der Status nicht paßt und du sowieso "stop" machst.
    das ist egal....ich hab bei meiner TWI Übertragung ziwschen Start und Adresse senden und zwischen jedem Schritt auf eine Tasteneingabe gewartet und hab sogar noch zwischendrin ein LCD angesteuert und das Timing war perfekt... ich hab sogar mal zwischen den Schritten ne halbe Stunde gewartet hat auch gut funktioniert! Also dass ist denk ich mal nicht der Fehler! Ich werd mir nochmal den Code angucken! Ich kann ja mal meinen Master und Slave Code posten!
    Gruß Michi

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    44
    Beiträge
    269
    Moin moin!

    Danke für die Antworten. Ich hab inzwischen mal beide Codes "von unten" neu aufgebaut. Also erstmal ein Byte gesendet, dann einen INT-Wert in zwei seriellen Bytes (später sollen vier INTs gesendet werden). Morgen geht's dann weiter mit den vier INTs und dann mit dem Rest des Programms (Auslesen von vier RC-Kanälen mit dem ATmega8 und Senden der vier Werte an den ATmega16).

    Die "TWI-Praxis" war sehr hilfreich, die hatte ich auch schon vorher gelesen. Aber wenn man zuviel auf einmal machen will, ist halt doch immer irgendwo der Wurm drin. Mit dem schrittweisen Aufbau hat's dann schnell hingehauen.

    So denn,

    Nils

    Edit: Übrigens funktioniert das ganze doch mit den internen PullUps beim Master! Weiß nicht, ob das auch bei höheren Taktraten als meinen 100kHz ginge, muß ich morgen mal testen...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    schön dass es jetzt funktioniert!
    Was war der Fehler?
    Kannste mal deine beiden Codes posten?
    Gruß Michi

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    44
    Beiträge
    269
    Moin moin!

    Sorry für die Pause, bin im Urlaub und war bis gestern in der Wildnis... Codes kommen die Tage noch.

    Nils

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    11.12.2005
    Ort
    Chemnitz
    Alter
    35
    Beiträge
    87
    kommt der code noch?
    Signatur:
    Bild hier  

    Sowas find ich absolut faszinierend!

Berechtigungen

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

Solar Speicher und Akkus Tests