Hallo Besucher, der Thread wurde 2,5k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von no parity am

Geht bei Dual AVR nach LarsP zusätzlich noch ein DS3231?

  • Ich wollte mein Dual AVR SD2IEC um eine RTC erweitern. Allerdings funktioniert dann gar nichts mehr. Die grüne LED bleibt aus und das SD2IEC ist nicht ansprechbar. Auf dem Display kommt nur "Waiting for da" (wird bei "da" abgeschnitten).


    Das Display alleine geht wunderbar, das DS3231 Modul geht auch wunderbar, aber eben jeweils auch nur alleine. Ich habe das Modul mit einem Arduino und einem zweiten I2C Device parallel getestet, das funktioniert wie es soll.


    Sollte das mit dem SD2IEC auch gehen, oder spricht gegen beides gleichzeitig etwas dagegen? Die MCU beim SD2IEC ist ein m128p und beim Display ein m644p. Ansonsten funktioniert das SD2IEC mit dem 2. AVR und dem Display vollkommen problemlos, sofern kein RTC Modul angesteckt wird (PC5/PC6).


    Firmware ist die 1.0.0atentdead0 vom Januar für das SD2IEC und für den Display Controller aus dem Dual AVR Thread.

  • Könnte es sein, dass beide I2C devices auf dieselbe Adresse eingestellt sind?

    Der Hersteller hat bei den DS1307/DS3231 Chips die Adresse 0x68 fest vergeben. Das scheint auch laut ds1307-3231.c richtig zu sein. Die Uhr fuunktioniert ja auch.



    Allerdings finde ich die TWI Slave Adresse im Code nicht. Bin da auch noch nicht so tief drin.


    Aber ich kann mir eigentlich nicht vorstellen, dass die Entwickler da die selbe Adresse verwendet haben.



    EDIT: Die Adresse des Displays ist laut display.h 0x32. Das sollte es eigentlich nicht sein.

  • Habe ich dich richtig verstanden, dass die einzelnen Geräte am I2C Bus funktionieren aber zusammen nicht? Es könnte zwar tatsächlich an einer gleichen Adresse liegen, noch häufiger trifft allerdings zu, dass die pull up Widerstände des Busses so lange aufaddiert werden, bis er nicht mehr funktioniert. Wenn also deine Bus-Teilnehmer alle einen Widerstand haben, dann ist das falsch. Es darf nur einer, günstigstenfalls der der am weitesten entfernt ist, die pull up Widerstände besitzen. Wenn du mal eben einen Arduino zur Hand hast, bestünde die Möglichkeit einen I2C Scanner laufen zu lassen, der Dir über den seriellen Monitor die Adressen der Bus Teilnehmer ausgeben kann.
    Eventuell hilft dir das ja auch weiter


    Stefan

  • Auf dem DS3231 Modul sind entsprechende Widerstände drauf. Ich hatte auch schon beides an einen Arudino gehängt.


    Dort bekomme ich die Adressen 0x32, 0x57 und 0x68 zurück. 0x32 ist vom m644p, 0x57 und 0x68 vom DS3231 Modul, wobei 0x57 von dem EEPROM und 0x68 vom eigentlichen DS3231 Chip ist. Am Arduinoi klappt das soweit auch. Ich kann dort auch die Uhr ansprechen, wenn parallel der m644p dran hängt. Da wird dann nichts blockiert.


    Nur wenn ich das ganze dann am m1284p anschliesse, läuft nichts mehr. Der Aufbau ist auf einem Breadboard. Weitere Widerstände habe ich nicht drin.

  • Merkwürdig sicher, es fragt sich nur, ob das überhaupt schon mal jemand in der Praxis probiert hat. Vielleicht ist das ja ein Bug in der Firmware, der eben bisher noch niemandem aufgefallen ist, weil vermutlich nur wenige ein Display mit extra Controller verwenden, noch weniger eine RTC und anscheinend niemand, der beides in Gebrauch hat.

  • Merkwürdig sicher, es fragt sich nur, ob das überhaupt schon mal jemand in der Praxis probiert hat. Vielleicht ist das ja ein Bug in der Firmware, der eben bisher noch niemandem aufgefallen ist, weil vermutlich nur wenige ein Display mit extra Controller verwenden, noch weniger eine RTC und anscheinend niemand, der beides in Gebrauch hat.

    möglicherweise ...



    Frag am besten mal @Unseen

  • @Diddl


    Ich habe es ans laufen gebracht. Allerdings dürfte dies nicht funktionieren, tut es aber. Ich wollte den Fehler mal nachgehen. Und immer wenn ich ein TWI Slave dran hatte und dann den Logic Analyser angeschlossen hatte, blockierte der Bus.


    Hatte ich dann aber zwei Slaves (also RTC und Display) angeschlossen, ging es plötzlich. Sofern eben der LA auch angeschlossen war.


    Dann habe ich mal Pulldown Widerstönde angeschlossen und den LA weg gelassen. Und jetzt funktioniert es, obwohl dies eigentlich unsinnig ist. Denn Pulldown am TWI sollte ja eigentlich nicht gehen, zumal ja auch Pullup Widerstände drin sind.


    Ich verstehe es zwar nicht, und kann dies mit einem Arduino auch nicht nachstellen (denn da klappt dann die Kommunikation nicht mehr richtig), aber mit dem AVR geht dies, zumindest in dieser Konstellation.

  • Es hängt jetzt aber ein Pullup UND ein Pulldown Widerstand gleichzeitig an der Leitung. Also eigentlich ein Spannungsteiler. Und das sollte auch an einem AVR nicht richtig sein.


    Auch wenn Microchip seinen I2C aus rechtlichen Gründen TWI nennt, so sollte er sich gleich verhalten. Und ich habe nichts gefunden, dass ein Pulldown Widerstand irgend etwas
    an einem Zweidraht Bus verloren hätte. Das es beim Arduino Probleme gibt, ist durch den Spannungsteiler zumindest erklärbar. Warum es beim AVR funktioniert, aber nicht. Lustig ist
    es aber allemal. :D


    Ich muss da die nächsten Tage noch mal ran, und ergründen was da schief läuft, dass das nur auf diese schräge weise läuft. Vor allem mal schauen, wie die Flanken jetzt aussehen.

  • Habe den DS3231 jetzt an die 3.3V Schiene gehangen, und nun funktioniert es auch ohne "Spezialkonstruktiion". Ein bisserl seltsam ist das ganze zwar, denn eigentlich sollte es auch mit 5V
    gehen. Und wenn ich das RTC Modul dran hänge, welches ja eigentlich zwei I2C Slaves hat (das EEProm hat eine eigene Adresse) läuft es auch ohne Probleme mit 5V. Nur zusammen mit dem AVR als Slave
    klappt es dann nicht mehr.


    Zumindest finde ich die 3,3V Lösung sauberer, als irgendwelche Spannungsteiler da in den Bus einzubauen.