Elektronik2000.de Forum
» E2000 - Software (Altes System)
» E2000-Logik
Uhrenbaustein DC1307 wird nicht erkannt
Seiten (1): [1]  
Autor Beitrag
 
RiegerJuergen
Uhrenbaustein DC1307 wird nicht erkannt
Hallo ..
auf meiner NET-IO-Platine habe ich einen DC1307 Uhrenbaustein integriert. Wenn ich unter E2000-Logik mir den Status ansehe ist I2C grün, RTC aber rot markiert, obwohl ein Uhrenbaustein vorhanden ist. Aufgrund dieses Widerspruchs habe ich mir einmal die Signale des I2C-Buses mit dem Logik-Analysator angeschaut und festgestellt, dass nach der Startbedingung einer Datenübertragung die Adresse 20H ausgegeben wird. Mein DS1307 hat aber die Adresse 68H.
Das ACK-Bit (9tes Bit) ist folglich logisch korrekt high, was besagt, dass kein Baustein mit dieser Adresse vorhanden ist.
Die Adresse 68H ist meines Wissens fest in den Baustein integriert. Deshalb ist korrekt im E2000 Logik-Status RTC trotz angeschlossenem Uhrenbaustein keine grüne Markierung .
Warum wird vom Logik-Programm die Adresse 20H ausgegeben. Gibt es DS1307 mit dieser Adresse? Oder kann man die interne Adresse des DS1307 ändern?
Warum wird nach ACK high die Datenübertragung überhaupt noch fortgesetz?
Wie stellt das Logik-Programm fest, dass der I2C-Bus belegt ist, wenn festgestellt wird, dass kein Baustein vorhanden ist (RTC und EEPROM sind beide rot markiert)?
Grüße Jürgen Rieger
Anhänge
SCR16.zip (7,9 KB)
RiegerJuergen ist offline  
 
Tropby (Administator)
Hallo,

wir senden folgende Adressen über den I2C-Bus:

RTC (DS1307) => I2C_Write(0xD0)
EEPROM => I2C_Write(0xA0)
I2C-Display => I2C_Write(0x40)

Dies ist entsprechend den Datanblättern so gewählt.
Die E2000-Software wertet kein ACK aus! Wir senden einfach trotzdem.

mfg
Tropby
_________________________
Elektronik2000.de | Software-Entwickler
Tropby ist offline  
 
RiegerJuergen
Uhrenbaustein DC1307 wird nicht erkannt
Hallo Tropby,
das beigefügte Logikdiagramm in meinem Beitrag zuvor sagt etwas anders aus über die vom Logik-Programm gesendete Adresse. Die Bits des erst gesendeten Bytes (7 Bit) geben eindeutig den Wert 20H wieder, weder die Werte D0H noch 40H sind zu erkennen. Es sei denn man interpretiert die ersten 8 Bit nach dem Start als 8 Bit-Wert, dann ist der Wert 40H zu erkennen. Das ist aber falsch. Nach dem Start auf dem I2C-Bus muss in jedem Fall ein 7-Bit-Wert mit einem R/W Bit gesendet werden. Wobei für R/W entweder R=high oder W=low ausgegeben werden muss.
Es gibt eine Spezifikation für den I2C-Bus von Philips. In ihr ist festgelegt, es werden entweder 7 Bit Adressen oder 10Bit Adressen zum Ansprechen der Bausteine verwendet. Der 10Bit Adress-Mode wird mit 11110XXB eingeleitet. D0H und A0H haben 8 Bit, also müsste hierfür das 10 Bit-Format verwendet werden. Nach dem Start der I2C Übertragung gibt es aber kein 11110XXB auf der Datenleitung (siehe beigefügtes Diagramm in meinem letzten Beitrag) das den 10-Bit Modus einleitet.

Zu meinem verwendeten Uhrenbaustein habe ich ein Datenblatt beigefügt in dem die Ansprechadresse 68H verwendet wird. Welcher Baustein in der NET-IO ADD verwendet wird weiß ich nicht. In dem Datenblatt ist außerdem zu erkennen, dass der Uhrenbaustein im 7-Bit-Modus angesprochen wird. D0H als Adresse für den DS1307 von Maxim kann also gar nicht funktionieren.
Ich habe mal im Internet nach Datenblättern nachgeschaut. Es gibt den Baustein von Dallas, Maxim und TGS. In allen Datenblättern ist die Adresse 68H als Ansprechadresse verwendet.

Hier ein Auszug aus dem Datenblatt von "MAXIM Integrated"

The slave address byte is the first byte received after the master generates the START condition. The slave address byte contains the 7-bit DS1307 address, which is 1101000, followed by the direction bit (R/W), which for a write is 0. After receiving and decoding the slave address byte, the DS1307 outputs an acknowledge on SDA.

Dass das ACK-Bit nicht ausgewertet wird versteh ich nicht. Man kann ohne die Auswertung nicht erkennen ob ein Baustein die für ihn gesendeten Werte erhalten hat und hieraus resultierend ob ein Baustein am BUS angeschlossen ist, oder ob er überhaupt funktioniert.

Grüße Jürgen Rieger
Anhänge
DS1307.zip (644,7 KB)
RiegerJuergen ist offline  
 
Tropby (Administator)
Hallo,

wir betreiben die Bausteine alle im 7-Bit Modus. Ich reche immer bei der Adresse sofort das achte Bit mit ein also ist z.B. 0x40 dann: 0100 0000 zum lesen und 0100 0001 zum schreiben was 0x41 ist. Intern behandeln wir also immer einen 8-Bit Wert, da es unsinn ist, eine weitere Speicherzelle für das R/W-Bit zu verschwenden.

Das heißt: Wir senden einen 8-Bit Wert also 0xD0 zur RTC. Mit der Adresse 0x68 und dem R/W-Bit = 0. Auf dem selben Bus laufen jedoch noch weitere Daten I2C-Display und EEPROM. Diese werden auch immer angesprochen.

Die I2C Spezifikationen sind uns sehr wohl gut bekannt.

Zitat:
Dass das ACK-Bit nicht ausgewertet wird versteh ich nicht. Man kann ohne die Auswertung nicht erkennen ob ein Baustein die für ihn gesendeten Werte erhalten hat und hieraus resultierend ob ein Baustein am BUS angeschlossen ist, oder ob er überhaupt funktioniert.


Dazu kann ich sagen: Doch ist es sehr wohl. Z.B. bei dem Uhrenbaustein gibt es eine ziemlich einfach Sache:
Wenn die Uhr gesetzt wird, dann wird auch immer mit gesendet, dass der Uhrenbaustein auch aktiv sein soll. Also laufen soll. Das macht er im Auslieferungszustand zum Beispiel nicht. Aber es antwortet sehr wohl über I2C mit einen ACK. Daher weiß ich aber immer noch nicht ob er läuft. Und nur wenn er läuft wird er auch Grün angezeigt. Deswegen wird über einen gewissen Zeitraum immer mal wieder ein Wert aus der Uhr ausgelesen und kontrolliert ob diese auch läuft. Dann kann ich sicher sein, dass der DS1307 auch wirklich läuft.

Ich weiß jetzt nicht welchen Uhrenbaustein du verwendest. Aber mit der E2000-Software funktioniert nur der DS1307.

Wir benutzten eine I2C-Library von Mikroe. Diese untersützt beim Write auf dem I2C-Bus nur ein Collision-Error und gibt kein ACK zurück. Die Komplette I2C-Schnittstelle ist in Software gelöst, da die Hardware-Pinne auf dem NET-IO schon belegt waren. Die aktuelle Lösung ist nicht schön, jedoch macht es dem I2C-Bus nichts wenn zu viele Daten geschickt werden. Wenn kein ACK kommt.... Dann war die Kommunikation gestört. Wenn danach noch 2 Byte gesendet werden, dann macht das dem Bus rein garnichts.

gruß
Tropby

Die Komplette ansteueren mit dem I2C-Bus wird mit E2000-Plus komplett überarbeitet.
_________________________
Elektronik2000.de | Software-Entwickler
Tropby ist offline  
 
RiegerJuergen
Uhrenbaustein DC1307 wird nicht erkannt
Hallo Tropy,
ich möchte noch einmal auf das Thema "Uhrenbaustein DC1307 wird nicht erkannt" eingehen.
Inzwischen ist mir es gelungen die Daten die über den I2C-BUS der NET IO-Platine übertragen werden zu loggen.
Über den BUS werden weder der Uhrenbaustein noch das EEPROM angesprochen. Lediglich die Adresse 20H für eine eventuell angeschlossene Anzeige mit 2 zusätzlichen Bytes werden ausgegeben (siehe beigefügtes Datenaufzeichnung).
Grüße Jürgen Rieger
Anhänge
I2CBUS1.zip (10,6 KB)
RiegerJuergen ist offline  
 
Tropby (Administator)
Hallo Jürgen,

beim start des Systems wird auf jedenfall einmal die Verbindung geprüft. Wenn dann nichts gefunden wird, dann wird davon ausgegangen, dass keine Kommunikations zu stande kommt. Das ist beim Uhrenbaustein und beim EEPROM so. Das Display wird jedoch weiter gepolled. Das ist zwar unschön aber leider im moment nicht anders möglich.
Der Uhrenbaustein wird im normalbetrieb alle 5 Minuten angesprochen. Das EEPROM wird nur bei extrem großen Simulationen benutzt. An sonsten liegt die Kommunikation zwischen den Komponenten still.

Hast du dir mal beim start des E2000-NET-IO angesehen was geschickt wird?
Da sollten einige Daten zum EEPROM gehen (auslesen einiger Zellen) und auch mindestens 2 Pakete zum Uhrenbaustein gehen, um zu kontrollieren ob die Uhr läuft.
Wenn die Anzeige auf "rot" ist im E2000-Logik dann hat er die Komponenten nicht gefunden.

Welche Version von E2000-NET-IO benutzt du? Es gab mal eine Version die auf dem I2C-Bus nicht sauber lief. Das wurde jedoch schon behoben.
Wenn du die 2.2.1c hast dann sollte aber alles mit dem I2C okay sein.

gruß
Tropby
_________________________
Elektronik2000.de | Software-Entwickler
Tropby ist offline  
 
RiegerJuergen
Uhrenbaustein DC1307 wird nicht erkannt
Hallo Tropby,
vielen dank für Deine Antwort. Ich benutze die Version 2.2.1c.
Ich habe mal auf die Adresse 68H getriggert und tatsächlich sie wird über den I2C-BUS gesendet mit einigen nachfolgenden Bytes. Warum der Baustein nicht im Status vom Logikprogramm angezeigt wird weiß ich nicht. Ich kann mir nicht vorstellen, dass mein Uhrenbaustein defekt ist. Ich untersuche das trotzdem mal.
Grüße Jürgen Rieger
RiegerJuergen ist offline  
 
RiegerJuergen
Hallo Tropby,
ich möchte mich noch einmal zu dem Thema Uhrenbaustein äußern.
Ich habe es inzwischen geschafft, dass im Statusfenster der E2000 Logik Software unter E2000-NET-IO->Updaten->Logik die Anwesenheit des Uhrenbausteins angezeigt wird. Nicht die ausgesendeten Befehle (bei POWER ON ausgegeben) vom Programm auf dem ATMEGA 644 an den Uhrenbaustein führen zum Test "Anwesnheit ja/nein", sondern wenn die Uhrzeit vom E2000 Logik Programm zur NET IO Platine übertragen wird. Erst dann wird die Statusanzeige RTC im Statusfenster aktualisiert.
Grüße Jürgen Rieger
RiegerJuergen ist offline  
Seiten (1): [1]  
 
Suche
» Erweiterte Suche
Optionen
Druckansicht Druckansicht
Thema weiterempfehlen Thema weiterempfehlen