DS3231 mit Systemzeit von PC aktualisieren

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
hallo,
ich bin neu im Forum

Auch ich habe mir das Teil besorgt aus China, scheinbar aber ein "Montags - Produkt".
Es lies sich zwar über die entsprechenden I2C - Kommandos das Datum und die Uhrzeit einstellen und anzeigen.
Nach dem Ausschalten meines Testboards und späterem Wiedereinschalten startete das DS3231 wieder mit der Grundzeit 1.1.2000 00:00:00 .
Habe auch schon beim Händler angefragt. (ich soll ein Foto von der Plastiktüte schicken, die ich natürlich schon weggeworfen habe):(

Die Stützbatterie liefert ca.3,8 V, ich hatte sie zum Messen ausgebaut, worauf wahrscheinlich ein Bit neu gesetzt werden muss.
Das werde ich überprüfen, hatte ich in einem anderen Beitrag schon als Antwort geschrieben.

Deshalb meine Frage dazu an das Forum :

Damit ich in meinem Basic - Programm die Zeit und das Datum nicht immer manuell neu einstellen muss, kam mir die Idee,
die PC Systemzeit auf das Modul per rs232 zu übertragen.

Hat das schon mal jemand probiert, ich bin bisher noch nicht fündig geworden.

Danke im Voraus für die Beantwortung

ds1074
 
Zuletzt bearbeitet:

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo ds1074,
Die Stützbatterie liefert ca.3,8 V, ich hatte sie zum Messen ausgebaut, worauf wahrscheinlich ein Bit neu gesetzt werden muss.
Das werde ich überprüfen, hatte ich in einem anderen Beitrag schon als Antwort geschrieben.
das mit dem Bit hat sich auf den Clock Ausgang bezogen (war ein Missverständnis wegen dem Thementitel).

Zu dem Reset der Zeit ist mir noch etwas eingefallen ...

Aus dem Datenblatt ...
On the first application of power (VCC) or when a valid I2C address is written to the part (VBAT), the time and date registers are reset to 01/01/00 01 00:00:00 (DD/MM/YYDOW HH:MM:SS).
Das liest sich für mich so, dass die Zeit zurückgesetzt wird, wenn die RTC nur mit VBAT läuft und du mit I2C (und passender Adresse) drauf zugreifst. Eventuell kommt das bei dir in deinem Aufbau ja mal vor. Also sicher stellen, dass VCC an der RTC anliegt, dann erst via I2C drauf zugreifen.

Dirk :ciao:
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Hallo Dirk,

ich habe es gemerkt, ich habe aber trotzdem mal die Register 14 und 15 (0xE und 0xF) ausgelesen. Die Bitfolge stimmt mit denen aus dem Datenblatt überein.

Register 0x0E = 28 = 0001_1100
Register 0x0F = 136 = 1000_1000

oder muss da doch etwas anderes gesetzt sein. So ganz verstehe ich den übersetzten Text vom Datenblatt nicht.
Am Ausgang 32k messe ich mit meinem Oszi auch 32kHz. Demnach brauch ich doch erst mal nichts zu ändern., oder doch?

wenn ich mein Board einschalte, liegt VCC (5V) am DS3231 an und ich warte softwaremäßig ca. 3 s, bevor ich das Teil per I2C anspreche,
da sonst auch mein LCD öfter spinnt... das ist aber ein anderes Thema, hab da auch schon etwas bei euch gelesen.

Die auf #1 gestellte Frage besteht aber weiterhin.
Ich hoffe das ich das mit dem neuen Thema besser im Forum eingestellt habe,

Vielen Dank auch an die anderen erst mal bis dahin.

Gruß Gerd
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo Gerd,
ich habe es gemerkt, ich habe aber trotzdem mal die Register 14 und 15 (0xE und 0xF) ausgelesen. Die Bitfolge stimmt mit denen aus dem Datenblatt überein.

Register 0x0E = 28 = 0001_1100
Register 0x0F = 136 = 1000_1000

oder muss da doch etwas anderes gesetzt sein. So ganz verstehe ich den übersetzten Text vom Datenblatt nicht.
Am Ausgang 32k messe ich mit meinem Oszi auch 32kHz. Demnach brauch ich doch erst mal nichts zu ändern., oder doch?
die Were der Registerinhalte sind die Initialisierungswerte.
  • Oszillator ist gestartet
  • 32kHz am Pin 32KHZ aktiviert (misst du auch)
  • am Pin INT/SQW ist INT Funktion aktiviert, Clockausgang (1Hz ... 8192Hz) ist deaktiviert.
  • Alarme deaktiviert
Da ist denke nichts mehr einzustellen bezüglich Oszillator und VBAT Pufferung.

Kannst du mal VBAT messen, wenn VCC fehlt und die RTC mit VBAT läuft. Nicht, dass die Spannung "zusammenbricht".
VBAT sollte größer 2,7V (Power-Fail Voltage) sein.


Thema: Weiter offen ist "DS3231 mit Systemzeit von PC aktualisieren"


Dirk :ciao:
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
Ich sehe grundsätzlich folgende Wege:
  • die RTC direkt an einen I²C des PCs anbinden (eher kompliziert, sowohl physisch als auch softwaretechnisch)
  • die RTC über einen I²C-USB-IC an den USB des PC anbinden (gibt's zB von FTDI, erfordert sicher irgendwelche Treiber/Bibliotheken, zumindest für's Visual Studio meine ich mal was gefunden zu haben. Unter Linux scheint das interessant zu sein (bzw auch für Python unter Windows).
  • die RTC via I²C an einen µC anbinden, der seinerseits via UART, ggf mit Konverter auf RS232 oder USB am PC angebunden ist. gegenüber der zweiten Variante wäre die Kommunikation aus dem PC heraus simpler (virtueller ComPort).
Bei allen drei Varianten benötigst Du also ein PC-seitiges Programm, welches die (ggf vorher Internet-synchronisierte) Systemzeit ausliest und entsprechend dem gewählten Weg übermittelt. Ich gehe davon aus, daß die Latenz für Dich irrelevant ist.

eventuelle Alternativen ohne PC:
  • Mikrocontroller mit DCF-Empfänger
  • Mikrocontroller mit DAB-Empfänger (gibt's sowas überhaupt)
  • Mikrocontroller mit (W)LAN-Zugang
Der Weg über so'n I²C-USB-IC ist sicher auch für diverse andere Projekte interessant, also wenn man mal mit irgendwelchen anderen Slaves rumexperimentieren, aber nicht jedesmal 'n Controller programmieren will...
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Hallo Dirk,

danke für deine Antwort.
Die Batterie ist ok, habe sie heute vorm Einschalten meines Boards nachgemessen, VBAT ist ca. 3,75 V.
Hatte die Urzeit gestern abend gestellt und über Nacht mit ausgeschaltetem Bord laufen lassen.

Heute abend ausgelesen, erst wurde auch die richtige Zeit angezeigt, bis ich ein paar Änderungen im Programm vorgenommen habe.
Dabei wurde das DS3231 nach einem Reset des Atemgas immer nur ausgelesen, nicht beschrieben.

am I2C Bus ist nur mein LCD über Portexpander und der DS3231 angeschlossen.

Ich lese die Temperatur immer mit aus, und wollte die Nachkommastellen berechnen (ist mir auch gelungen).
Dann hatte ich wieder 0.01.2000 00:00:00

Bin jetzt etwas ratlos. ich versuche mal meine Datei mit anzuhängen, hoffe es klappt, vielleicht hat sich doch noch ein Fehler eingeschlichen.
Bin Hobby Programmierer und über 60.

Hier wird u.a. auch die Lib für mein Display aufgerufen, was häufig spinnt, hatte es ja in #3 schon angesprochen.
Ist aus dem anderen Bascom Forum. Ich hoffe da bei Euch auch noch eine bessere Lib zu finden.

ich will mir ja den com - Port offen halten für die Übertragung der PC - Systemzeit.

Ich hoffe, das waren nicht zu viele Fragen auf einmal.

Gruß Gerd
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Hallo LotadaC

Der Pc hat ja schon seine eigene Uhr.

Eine DCF Uhr hatte ich früher an einer C-Control, das Ganze habe ich verschenkt.

Mir geht es darum den DS3231 kennenzulernen und für Tests auf Atmega Boards einzusetzen.
Trotzdem vielen Dank für Deine Hinweise.

Mit C bzw. Java und anderen PC - Hochsprachen kann und will ich mich nicht wirklich mehr anfreunden.

Gruß DS1074
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
Ich hatte Dich so verstanden, daß Du die batteriegepufferte RTC "ohne sonst was dran" stellen können willst, und sie dann an irgendein Controllerprojekt anschließen können willst. sollte ja eigentlich machbar sein.

Wenn die RTC hingegen an einem hinreichend mächtigen Controller fest verbaut sein soll, kannst Du das gelegentliche Stellen natürlich auch in dessen Firmware vorsehen. die Verbindung zur RTC via I²C hast Du ja dann eh, die gelegentliche Verbindung zum PC am einfachsten via UART.
Der einfachste Weg wäre, die nötigen Kommandos und die Zeit selbst "zu Fuß" über ein Terminalprogramm einzugeben, und der Controller schickt sie dann weiter.

Ein Programm, daß das (meinetwegen auf Knopfdruck) automatisch macht, wirst Du … *Trommelwirbel* … programmieren müssen. Oder Du findest hier jemanden, der Dir das macht. Sollte ja zumindest unter Windows/VisualStudio nicht das Thema sein.
Ok, genau genommen war Deine Frage, ob diesen Weg über UART, schon mal wer gegangen ist - mir ist (auch) keiner bekannt.

Aber es hindert Dich ja niemand dran, hier der erste zu sein - falls Du weitere/konkrete Fragen hast... nur zu...

Zum anderen Problem: kannst Du mal den kompletten Schaltplan zeigen?

Ist der Code zu lang, um den (in einem Bascom-Codeblock) zu zeigen?
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Hallo LotadaC,

Der "Schaltplan" besteht aus einem Pollin Evaluationsboard, auf dem ich z.Z. einen Mega32 installiert habe.
Dort ist schon eine Rs233 vorinstalliert von der ich per RS232-USB Wandler die Verbindung zum PC habe (virtuellem Com4)

Da ich, wie in #1 geschrieben habe, neu im Forum bin, weiss ich noch nicht, wie man einen "Bascom - Codeblock" erzeugt.
Deshalb habe ich die Datei erst mal angehängt. Scheint aber nicht funktioniert zu haben, wie ich gerade sehe.

Ich habe versucht, wie an anderer Stelle im Forum gefunden, das Kommando C:\ time >>com4 auszuführen.
Das geht entweder ins Nirvana oder es kommt eine Fehlermeldung wenn ich versuche die Daten z.B. mit Hyperterminal zu übertragen,
weil dann ja m.E. der Port mit HT verbunden ist und nicht mehr mit dem Pollin Board.

Oder sehe ich da was falsch?
 

fredred

Mitglied
1 Okt 2015
76
2
7
Ich sehe grundsätzlich folgende Wege:
  • die RTC direkt an einen I²C des PCs anbinden (eher kompliziert, sowohl physisch als auch softwaretechnisch)
  • die RTC über einen I²C-USB-IC an den USB des PC anbinden (gibt's zB von FTDI, erfordert sicher irgendwelche Treiber/Bibliotheken, zumindest für's Visual Studio meine ich mal was gefunden zu haben. Unter Linux scheint das interessant zu sein (bzw auch für Python unter Windows).
  • die RTC via I²C an einen µC anbinden, der seinerseits via UART, ggf mit Konverter auf RS232 oder USB am PC angebunden ist. gegenüber der zweiten Variante wäre die Kommunikation aus dem PC heraus simpler (virtueller ComPort).
Bei allen drei Varianten benötigst Du also ein PC-seitiges Programm, welches die (ggf vorher Internet-synchronisierte) Systemzeit ausliest und entsprechend dem gewählten Weg übermittelt. Ich gehe davon aus, daß die Latenz für Dich irrelevant ist.
Na ja wenn er sowieso ein PC mit ComPort Verbindung hat dann schreib doch die Daten (neue Uhrzeit gleich mit ein Terminalprogramm rein. Viel einfacher ist wohl sein Ansinnen kaum zu lösen. Hab immer noch nicht verstanden worauf es ankommt. Uhrzeit manuell auf „Genau“ zu stellen, benötigt auch eine manuelle Entscheitung(z.B. Taster) ansonsten muss alles automatisch erfolgen. Ja die „genaue Zeit“, muss genau synchronisierte werden Uhrzeit oder Raumzeit. Ist die Frage.

Ich sehe grundsätzlich folgende Wege:
  • die RTC direkt an einen I²C des PCs anbinden (eher kompliziert, sowohl physisch als auch softwaretechnisch)
  • die RTC über einen I²C-USB-IC an den USB des PC anbinden (gibt's zB von FTDI, erfordert sicher irgendwelche Treiber/Bibliotheken, zumindest für's Visual Studio meine ich mal was gefunden zu haben. Unter Linux scheint das interessant zu sein (bzw auch für Python unter Windows).
  • die RTC via I²C an einen µC anbinden, der seinerseits via UART, ggf mit Konverter auf RS232 oder USB am PC angebunden ist. gegenüber der zweiten Variante wäre die Kommunikation aus dem PC heraus simpler (virtueller ComPort).
Bei allen drei Varianten benötigst Du also ein PC-seitiges Programm, welches die (ggf vorher Internet-synchronisierte) Systemzeit ausliest und entsprechend dem gewählten Weg übermittelt. Ich gehe davon aus, daß die Latenz für Dich irrelevant ist.

eventuelle Alternativen ohne PC:
  • Mikrocontroller mit DCF-Empfänger
  • Mikrocontroller mit DAB-Empfänger (gibt's sowas überhaupt)
  • Mikrocontroller mit (W)LAN-Zugang
Der Weg über so'n I²C-USB-IC ist sicher auch für diverse andere Projekte interessant, also wenn man mal mit irgendwelchen anderen Slaves rumexperimentieren, aber nicht jedesmal 'n Controller programmieren will...
Na klar ein kleinen universal Programmer bauen der so einfach ist das nur wenige Stripen benötigt werden. Uart macht sich immer gut. 4 Kabe Vcc/GND/ TX und RX Verbindung und er kann den Controller jederzeit fragen und oder sagen was er möchte.
Eine sehr einfache Lösung hatte ich schon mal veröffentlicht.
Tschüß
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
Nur mal sicherheitshalber nachgefragt: Du programmierst den Controller in Bascom?
Damit ich in meinem Basic - Programm die Zeit
Grundsätzlich kannst Du jeden Quellcode hier als Text einstellen (was natürlich nur bis zu einer gewissen Codemenge überschaubar bleibt). Bascom-Code kann in entsprechende Code-Tags eingeschlossen werden, das Forum stellt den Text dann mit Syntax Highlightning usw dar. Dazu gibt's oben 'n "Code einfügen" Button ("</>"), Du kannst die Tags aber auch selbst eintippen...
Na ja wenn er sowieso ein PC mit ComPort Verbindung hat dann schreib doch die Daten (neue Uhrzeit gleich mit ein Terminalprogramm rein. Viel einfacher ist wohl sein Ansinnen kaum zu lösen.
Dann braucht er aber ein (eigenes) Protokoll, in welcher Form die Zeit-Informationen übermittelt werden sollen (welches seine Controller Firmware erwartet) - die er dann akribisch im Terminalprogramm eintippen/einhalten muß.
Von einfach im Sinne einfach zu bedienen würde ich erwarten, daß man die RTC wie auch immer irgendwie an den PC anbindet, und 'ne Software startet, und diese sich dann selbst darum kümmert, die Zeit aus dem PC auszulesen und an die RTC zu übertragen.

Thomas mag mich korrigieren, aber unter Visual Basic sollte es irgendein Zeitobjekt dazu geben, das auch in einen String konvertiert werden können sollte. sowas in der Art:


CodeBox VisualBasic
lustigeStringvariable=DateTime.Now.toString("dd-MM-yyyy HH,mm,ss"))

Den String könnte man dann über den virtuellen Comport über USB über einen USB-zu-Uart-Wandler in den Controller übertragen. Der Controller müßte seinerseits den String wieder zerlegen und die nötigen gepackten BCDs für die RTC generieren, und diese über das TWI an die RTC senden.

Warum dann nicht gleich den PC die fertigen gepackten BCDs generieren lassen, und diese an den Controller senden?

Warum überhaupt über den Controller und UART, und nicht gleich an die RTC selbst (eben über einen USB-Adapter/Bridge der/die I²C kann)?

Wie gesagt: Mit so'nem Adapter könnte man eben auch einfacher mit anderen I²C- oder SPI- oder was auch immer für ICs rumexperimentieren, ohne jedesmal 'n Controller für flashen zu müssen. ADCs und DACs, RTCs und Speicher, Sensoren und Displays (OLEDs zB…)

P.S.:
Pollin Evaluationsboard, auf dem ich z.Z. einen Mega32 installiert habe.
Dort ist schon eine Rs233 vorinstalliert von der ich per RS232-USB Wandler die Verbindung zum PC habe
RS233 kenn ich nicht -> RS232 ?

Also:
Controller = TTL-UART <---Pollin-Board---> RS232-IC = RS232 <--externer-Wandler--> RS232-IC = TTL-UART <--derselbe-Wandler--> USB-Bridge <--> PC
?
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Hallo,

RS233 war ein Tippfehler, soll natürlich RS232 heißen.

An meinem PC ist ein USB to RS232 Kabel angeschlossen, welches über einen 9 poligen Sub-D Stecker am Pollin Board angeschlossen ist.
Zum Testen schicke ich in einer Schleife einen Print "Test" Befehl an Hyperterminal, was soweit auch funktioniert. (com4 9600 Baud)
Nun möchte ich vom PC den Time zum Pollin Board schicken um aus diesen Infos die DS3231 RTC Uhr vom Atmega aus zu stellen z.B.
nach einem Reset, oder wenn sich wie weiter oben ausgeführt meine RTC Uhr aus bisher unerklärlichen Gründen wieder selbst zurückgestellt hat.

das Problem ist, wenn das HT mit dem Board über com verbunden ist, kann ich vom PC aus keine Daten über diese Schnittstelle an mein Board senden.
Was mache ich falsch und nochmal die Frage, wie kann ich einen Codeblock einfügen?
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
An meinem PC ist ein USB to RS232 Kabel angeschlossen
Ja genau, mir ist keine USB-wasauchimmer-Bridge bekannt, die von USB auf RS232 vermittelt. Nur von USB auf 5V-TTL-UART. Alle mir bekannten USB-RS232-Lösungen besitzen hinter diesem TTL-Chip einfach einen konventionellen Pegelwandler (MAX232 o.ä.). Und auf Deinem Pollin-Board ist dann einfach ein zweiter Wandler, der von 12V-RS232 auf 5V-TTL zurückwandelt. Alles klar.

das Problem ist, wenn das HT mit dem Board über com verbunden ist, kann ich vom PC aus keine Daten über diese Schnittstelle an mein Board senden.
???
Mit HT meinst Du jetzt konkret welches Terminalprogramm? (Ich verwende üblicherweise HTerm (wenn nichts selbstgestricktes)).
Problem eingrenzen: Kannst Du Dir mit dem PC selbst 'n Echo erzeugen (Tx und Rx am USB-RS232-Kabel miteinander verbinden), wenn das geht: auch den Wandler auf dem Pollin-Bord miteinbeziehen (also hinter diesem Wandler Tx und Rx verbinden - dann sollte natürlich kein Controller mitdranhängen).

Hast Du mal 'n Link auf Dein Board (wegen Schaltplan und so (da gabs meiner Erinnerung nach böse Fehler bezüglich der Referenzspannung des ADC - hat aber hiermit nichts zu tun).

wie kann ich einen Codeblock einfügen?
Ich meinte einfach den Text einfügen (Strg+C, Strg+V).
Davor dann ein [BASCOM], dahinter ein [/BASCOM].
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo zusammen,
An meinem PC ist ein USB to RS232 Kabel angeschlossen, welches über einen 9 poligen Sub-D Stecker am Pollin Board angeschlossen ist.
Zum Testen schicke ich in einer Schleife einen Print "Test" Befehl an Hyperterminal, was soweit auch funktioniert. (com4 9600 Baud)
HT=Hyperterminal. Übertragung funktioniert.

das Problem ist, wenn das HT mit dem Board über com verbunden ist, kann ich vom PC aus keine Daten über diese Schnittstelle an mein Board senden.
Wenn ein Programm den virtuellen COM Port öffnet (hier Hyperterminal) und nicht wieder frei gibt, kann kein anderes Programm diesen COMx nutzen.

wie kann ich einen Codeblock einfügen?
Ich meinte einfach den Text einfügen (Strg+C, Strg+V).
Davor dann ein [BASCOM], dahinter ein [/BASCOM].
... oder über den Menüpunkt im Editor:
1578731260450.png
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
Ich habe versucht, wie an anderer Stelle im Forum gefunden, das Kommando C:\ time >>com4 auszuführen.
Auf 'nem Windows-PC?
ich würde eher an "Echo" denken, und das eben auf die (virtuelle) serielle Schnittstelle umleiten.
Also in der Eingabeaufforderung sowas wie: echo %time% %date% > com4
Meiner Meinung nach sollte das so als Carriage Return und/oder Line Feed - terminierter String ausgegeben werden, den Du in Bascom mit Input entgegennehmen kannst.

Die Schnittstelle muß natürlich in dem Moment "frei" sein. Mit Mode sollten sich auch Baudrate usw vorgeben lassen...
 
Zuletzt bearbeitet:

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Hallo an alle,
Danke erst mal für eure Hilfe.
Ich habe einen gewissen Teilerfolg, der letzte Tipp auf #15 war entscheidend.
1. in Bascom der Input
2. das mit dem "echo %time% %date% > com4", durch die Eingabe der "%" Zeichen wird der umgebende Text ausgefiltert, sehe ich das richtig.
Ich habe wenig Kenntnisse von den Kdos auf der DOS - Ebene.

Ich musste aber erst mal von Bascom eine Verbindung zu HTerm aufbauen, (was ich standartmäßig neben dem Terminal Emulator von Bascom zum Testen nutze) und von dort ein paar Zeichen an den Mega32 schicken.

Nach "disconnect" von HTerm konnte ich dann auch die Kdo's wie in #15 gezeigt senden und sie kamen dann auch am Chip an.
Ist für mich etwas eigenartig, dass ich diesen Umweg gehen muss. oder muss ich das Mode Kdo. voraus schicken. (was muss ich da konkret eingeben?)
Ich dachte eigentlich, dass der PC die voreingestellte Baudrate aus dem Gerätemanager nutzt.

Das eigentliche Stellen der Uhr hat schon funktioniert (per manuelle Eingabe von Time & Date und senden per I2C).
Hier mal mein Testlink (hoffe es funktioniert)



CodeBox BascomAVR

'Test der DS3231 RTC Uhr am ATmega32 auf Pollin Board
'--- Atmega 32 -----------------------------------------------------------------------------------
$regfile = "m32def.dat" ' ATmega32 neu !!!!!
$crystal = 8000000 ' 8 MHz
$hwstack = 100     'default use 32 for the hardware stack
$swstack = 100     'default use 10 for the SW stack
$framesize = 100   'default use 40 for the frame space
$baud = 9600                                                          'für Prints
'*** Init Tasten '***************************************
Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Ta_links Alias Pind.2
Ta_mitte Alias Pind.3
Ta_rechts Alias Pind.4
'*** Init Leds und Beeper *******************************
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Led_links Alias Portd.5
Led_rechts Alias Portd.6
Beep Alias Portd.7
'****************** Initialisierung LCD und I2C **********************************
$lib "YwRobot_Lcd_i2c.lib"                           'YwRobot Treiber für LCD gibts hier eine bessere Lib?
Config Scl = Portc.0 'Clock
Config Sda = Portc.1 'Data
Const Pcf8574_lcd = 126                                               'Adresse des Portexpander für I2C-LCDs    = hex 7E
Config Twi = 100000                                                   '100Khz testen
Waitms 500 ' für LCD-Init!
Dim Lcd_backlight As Byte '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!
Lcd_backlight = 1 'danach muß ein Kdo folgen
Cls
Locate 1 , 1
Cursor On Blink
Lcd "Zeit Datum vom PC"
Locate 2 , 1
'-----------------------------------------------------
Dim Time_datum_rs232 As String * 30
Do
Time_datum_rs232 = "" 'Variablen-Inhalt löschen
Input Time_datum_rs232 'time und / oder Datum vom PC einlesen
Locate 2 , 1
Lcd Time_datum_rs232
Sound Beep , 300 , 300 'zur Kontrolle der Datenübernahme, (weil auch mein LCD öfter spinnt)
Wait 2 'etwas warten
Cls 'LCD löschen
Gosub Ds3231_write
Loop
'--- Unterprogramme ---------------------------
Ds3231_write:
' später, 'wenn Daten korrekt empfangen wurden, konvertieren und Uhr stellen
' per I2C
Return
End



Noch eine Frage:
wie aus dem Listing ersichtlich, gibt es eine bessere Lib für das I2C -LCD (I2C über Portexpander PC8574)

Also bis dahin nochmals vielen Dank
 
Zuletzt bearbeitet:

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
das mit dem "echo %time% %date% > com4", durch die Eingabe der "%" Zeichen wird der umgebende Text ausgefiltert, sehe ich das richtig.
Nein.
Das > com4 leitet die Echoausgabe an Com4 weiter, sonst würde das Echo einfach in der Eingabeaufforderung erscheinen (Echo halt).
Gib also einfach einmal echo time und einmal echo %time% ein, und vergleiche ;)
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
Ok, das habe ich getestet und auch verstanden.
und was macht man mit "Mode"?

Übrigens habe ich mal versucht, den Link zum Pollin Evaluationsboad zu suchen. es wird bei Pollin nicht mehr aufgeführt, ist wohl zu alt.
Aber im Netz wird man fündig, und mir hat es bisher gute Dienste geleistet.
 
Zuletzt bearbeitet:

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
und was macht man mit "Mode"?
Du willst das ja an die (virtuelle) serielle Schnittstelle ausgeben lassen (mit >comX), auf dem empfangendem Controller hast Du entsprechende Schnittstellenparameter eingestellt (Die Baudrate in Zeile 8, für die anderen läßt Du Bascom-Voreinstellungen gelten (8 Datenbits, kein Paritätsbit, 1 Stopbit), sollte sich in Bascom auch im Code festlegen lassen - mit Config ComX oder so...)

Dein PC muß natürlich genau so eingestellt werden - das kannst Du sicher auch irgendwo im Hardwaremanager machen, oder eben in der Eingabeaufforderung mit Mode.

Gib (da) einfach mal help mode ein...
 

ds1074

Neues Mitglied
7 Jan 2020
29
0
1
Sprachen
BascomAVR, Assembler, Python
das habe ich getestet, es werden die Einstellungen aus dem Gerätemanager angezeigt. (stimmt mit Bascom überein)
Nun noch meine letzte Frage für heute (steht im angehängtem Code)



CodeBox BascomAVR
'--- Ausschnitt ----
Dim Datum As String * 10
Dim Zeit As String * 8
Dim Tag_str As String * 2
Dim Monat_str As String * 2
Dim Jahr_str_low As String * 2
Dim Tag As Byte
Dim Monat As Byte
Const Jahr_high = 20
Dim Jahr_low As Byte
'Test der Konvertierung für die RTC Uhr --------------------------------------------
Datum = "12.01.2020" 'später Datum und...
Zeit = "18:06:55" '... Zeit vom PC holen
'das funktioniert jetzt soweit ----------------------------------------------------------------
Print Chr(12)                                                         'Cls
Print Datum 'alles zur Kontrolle anzeigen
Print Zeit
Print
Tag_str = Left(datum , 2)                                             'Tag holen
Tag = Val(tag_str) 'convert string to byte
Monat_str = Mid(datum , 4 , 2) 'Monat holen
Monat = Val(monat_str) 'convert string to byte
Jahr_str_low = Mid(datum , 9 , 2) 'Jahr_low holen
Jahr_low = Val(jahr_str_low)                                          'convert string  to byte
Print Tag                                                             ' 12
Print Monat '01
Print Jahr_high ; Jahr_low                                            '2020
'dasselbe dann für die Zeit
'geht das auch einfacher d.h. z.B. in etwa   Tag = val(left(Datum,2)) ohne zusätzliche Hilfsbytes?
End



Habe im Forum etwas von "_day, _month, _year" gelesen, kann aber nicht wirklich was damit anfangen.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)