Wie bringt man einen Uno dazu stehen zu bleiben?

Hallo Leute,

folgendes Problem ist aufgetreten.

Auf dem original Uno R3 läuft meine DCF77 Uhr (Sketch im Anhang, zu groß um ihn hier einbinden zu können).

Naja, also gestern lief er dann nicht mehr :o um 21:27 und ca. 30 Sek. stand die Uhr still.

Leider habe ich den Uno mit einem externen Netzteil (12V/1,5A) betrieben, Spannung war stabil und vorhanden. Ein Anschluss an den PC war nicht möglich und hätte mir persönlich auch nichts genutzt. Nachdem ich den 12V Stecker gezogen und wieder eingesteckt hatte lief alles wieder als sei nichts gewesen.

Einen millis Überlauf kann ich mir, mit meinem geringen Wissen (hab was von 45 Tagen gelesen) nicht vorstellen, so lange läuft der Sketch noch nicht.

Vielleicht kann von euch mal einer drüber schauen und mir auf die Sprünge helfen. Zum Betrieb wird kein OLED Display benötigt, man kann auch die Serielle-Ausgabe einschalten.

Vielen Dank für eure Beachtung :slight_smile:

Gruß

MiReu

Hallo,
schöner Sketch, das kann alles Mögliche sein.

Du könntest Fehler abfangen und dokumentieren...
Einfach auf SD ein Protokoll mitschreiben.
Gruß und Spaß
Andreas

Hallo Andreas,

Danke für das Lob :-\

Wenn du mit SD die Speicherkarte meinst, habe dafür noch kein Board :frowning:
Solltest du etwas anderes meinen, dann sitze ich gerade auf dem Schlauch bzw. mir fällt nicht ein was du meinen könntest.

Ah! Serielle Diagnose vielleicht?

Also die sekündliche Ausgabe rausschmeißen und nur minütlich und im Fehlerfall anzeigen. Dann die Ausgabe durchsehen, in der Hoffnung das dann was sinnvolles angezeigt wird. Sinnvoll im Sinne von Fehlerbeseitigung.

Mache mich sofort ans Werk.

Danke einstweilen.

Gruß

MiReu

Auch I2C macht gern mal Probleme.
Sind PullUp-Widerstände verbaut ?
Wie ist die RTC verbunden ?
Auf dem Steckbrett oder gelötet ?

Hallo,
static uint16_t hiMillis,loMillis;

long timeDiff=millis()-lastChangeTime;

loMillis+= timeDiff;

das ist richtiger Wertebereich?

Für mich sieht das aus wie uint16_t + long

die uint16_t geht bis 65,535 - und long bis 2147483647

nur mal so.
Gruß und Spaß
Andreas

Hallo,
am Anfang einer Funktion z.B. A1
am Ende einer Funktion z.B. E1

A1 gleich 1. Funktion im Sketch

So nummerierst Du die durch und gibst seriell immer nur println "A1"

im FehlerFall steht dann an letzter Stelle:

A44

Dann weißt Du das er in die 44. Funktion gesprungen ist, diese aber nicht verlassen hat.
Da würde sonst ja E44 stehen.

So in der Art, was weiß ich.
Gruß und Spaß
Andreas

@HotSystems
Ja, I²C R's sind vorhanden.

Was meinst du mit wie die RTC verbunden ist? Diese "hängt" auch am I²C und steckt im Steckbrett.

Noch ist alles auf dem Steckbrett, auf dem Schreibtisch. Erst wenn ich sicher bin das alles Fehlerfrei läuft kommt das ganze ins Auto.

@SkobyMobil
Darauf kann ich dir leider keine Antwort geben Andreas. Dies stammt aus dem Teil von jurs. Davon verstehe ich noch nicht viel (deshalb auch noch keine deutschen Kommentare).
Aber, ich danke dir für den Gedankenanstoß und werde versuchen das ganze zu verstehen um es dann ggf. anzupassen.

MiReu:
Was meinst du mit wie die RTC verbunden ist? Diese "hängt" auch am I²C und steckt im Steckbrett.

Noch ist alles auf dem Steckbrett, auf dem Schreibtisch. Erst wenn ich sicher bin das alles Fehlerfrei läuft kommt das ganze ins Auto.

Diese Steckbretter können Probleme machen.
Kontrolliere mal die "Steckverbindungen" zum I2C.

Wenn der I2C im Betrieb kurzzeitig unterbrochen wird, hängt das System und du weist nicht warum.

SkobyMobil:
Hallo,
am Anfang einer Funktion z.B. A1
am Ende einer Funktion z.B. E1

Ah, sehr clever. Auf solch eine Idee kommt man wohl erst wenn man schon länger am Thema ist. Wäre mir so schnell nicht eingefallen.

Hallo,
glaube nur nicht, das ich Deinen Sketch verstehe. Mir ist das- nur aufgefallen.
Gruß und Spaß
Andreas
P.S. mache Dir von dem Sketch eine Kopie. Eine zum Fehler aufdecken- im Original änders Du dann.
Dann brauchst Du das FehlerGekritzel nicht wieder raussuchen.

HotSystems:
Diese Steckbretter können Probleme machen.
Kontrolliere mal die "Steckverbindungen" zum I2C.

Wenn der I2C im Betrieb kurzzeitig unterbrochen wird, hängt das System und du weist nicht warum.

Danke, wusste ich auch noch nicht. Dann werde ich mal eine Lötversion aufbauen.

Da ich jetzt zur Arbeit muss, werden heute vermutlich keine Antworten mehr von mir kommen. Dies hat nichts mit Desinteresse zu tun, ich melde mich wieder - ganz sicher!

Bis hier schon mal DANKE.

Schönen Abend noch

Gruß

MiReu

MiReu:
Danke, wusste ich auch noch nicht. Dann werde ich mal eine Lötversion aufbauen.

Da ich jetzt zur Arbeit muss, werden heute vermutlich keine Antworten mehr von mir kommen. Dies hat nichts mit Desinteresse zu tun, ich melde mich wieder - ganz sicher!

Bis hier schon mal DANKE.

Schönen Abend noch

Gruß

MiReu

Ok, gutes Gelingen.

Schön, mal eine DCF77 Implementierung ohne Interrupt zu sehen. Vielleicht bediene ich mich mal an Deinem Code für mein Projekt, das fast 300 W2812b LEDs ansteuert was nur bei deaktivierten Interrup-Handlern möglich ist...

SkobyMobil:
Hallo,
static uint16_t hiMillis,loMillis;

long timeDiff=millis()-lastChangeTime;

loMillis+= timeDiff;

das ist richtiger Wertebereich?

Für mich sieht das aus wie uint16_t + long

die uint16_t geht bis 65,535 - und long bis 2147483647

nur mal so.
Gruß und Spaß
Andreas

So, ich habe mich mal in dem Bereich umgesehen. Auch wenn ich mich wiederhole, ich bin Anfänger, von daher könnte das nachfolgende auch falsch interpretiert sein!

Also ein Überlauf dürfte eigentlich nicht geschehen, die Variablen werden ein paar Zeilen weiter unten auf Null gestellt.

Da ich zu der Zeit, als der Arduino stoppte, bei der Arbeit war, habe ich mit meiner Frau gesprochen. Es besteht die Möglichkeit das sie an die Strippen gekommen ist und somit, dank billigem Steckbrett :frowning: ein Verbindungsproblem an den I²C Adern vorlag - Danke HotSystems für den Hinweis.

@HajoPiltz
Mach nur, ich hatte dir ja schon eine frühere Version in deinem Thread hochgeladen.

Zu den Versionen welche einen Interrupt nutzen. Habe ich mir natürlich auch angesehen, aber - zum Einen habe ich nicht verstanden warum man sich einen der zwei Eingänge (auf den Uno und ähnliche bezogen) belegen soll, wenn es auch anders geht. Zum Anderen waren mir die Programme auch viel zu aufgeblasen und unverständlich. Diese Lib's sind vielleicht dann sinnvoll wenn man keine RTC nutzt und auf das DCF Signal angewiesen ist. Meine RTC synchronisiert sich wenn ein gültiges Datentelegramm vorliegt. Um die Uhrzeit anzuzeigen wird kein DCF Signal benötigt, anders wäre dies bei einer Uhr fürs Auto auch gar nicht machbar. Ich weiß, es gibt GPS, da habe ich aber keinen Empfänger hier rumliegen.

So, wenn keinem, bei Aktuellem Informations- und Wissensstand, mehr was einfällt, dann lassen wir das Thema ruhen. Ich werde den Aufbau jetzt an einem geschützten Platz ein paar Tage laufen lassen und melde mich dann wieder, wenn es noch jemanden interessiert.

Schönen Tag euch :slight_smile:

Gruß

MiReu

Es ist sicher für alle die sich am Thread beteiligt haben, interessant.
Und ja, diese Steckbretter können schon heftig nerven.

Die Hardware macht mich noch wahnsinnig >:( :wink: :smiley:

Neben der Version mit dem Uno und I²C Display habe ich auch noch eine Version mit einem "fremden" ProMini (328/16MHz/5V mit Quarz) und SPI(4) Display im Testlauf. Natürlich hat jede Version ihren eigenen DCF Empfänger (Conrad Version).

Als ich heute Nacht von der Arbeit kam war die Anzeige horizontal gespiegelt :o

Nach einem Reset ging gar nichts mehr, auch die Spannungsversorgung ab- und anstecken hat nichts geholfen. Okay, konnte bzw. wollte ich in der Nacht nicht weiter verfolgen.

So, nun habe ich das "Teil" an den PC gesteckt - und eine Anzeige war wieder da. Aber, die Uhrzeit war falsch, kein Wochentag und als Datum stand da 00.00. ergo, ich habe die RTC in Verdacht. Messungen der Akku- und Akkuladespannung habe ich noch nicht gemacht.

Nur mal so als Info, da mir völlig klar ist, dass keiner helfen kann.

Gruß

MiReu

Ach...
Da reichen einfach die Pullup des I2C nicht ganz aus.
Und dadurch sind die Daten auf dem Bus dann teilweise korrupt.
ohne Gewähr

So, nach ca. 4,5 Tagen ist die Uhr wieder stehen geblieben :frowning:

Wenn ich mal grob nachrechne, dann sind das:
· 108 Stunden
· 6.480 Minuten
· 388.800 Sekunden
· 388.800.000 Millis

Fällt zu den Zahlen jemandem was ein? Ich versuche jetzt rückwärts dem Problem auf die Spur zu kommen, da ich noch nicht genug Ahnung vom Programmieren habe um den Fehler im Sketch zu sehen.

Auf der Websuche nach einer Lösung bin ich auch über den Wachhund gestolpert, den habe ich jetzt eingebaut. Ich gebe dem Sketch 2 Sek., da ich zur Zeit nicht weiß wie man den Durchlauf berechnet. Da es ja nur eine Uhr und keine Überwachung ist, ist dies auch nicht kritisch. Auch ist es mein erstes "richtiges" Projekt mit dem ich übe und lerne.

Wie schon weiter oben geschrieben, der Sketch ist zu groß um ihn hier einzubinden.

Zu den I²C Pullups, es sind die org. Widerstände der RTC. Ergo gehe ich davon aus dass diese zu den Daten vom IC passen, bei der SPI Version. Bei der Version mit I²C OLED muss ich mal den Gesamtwiderstand ausrechnen und messen. Ggf. werden diese von den Boards gelötet und durch einen (jeweils ;)) ersetzt.

Gruß

MiReu

Hallo,
"Nur mal so als Info, da mir völlig klar ist, dass keiner helfen kann."

Wenn Du auch nur einmal dem nachkommen würdest, was man vorgeschlagen hat...
dann- können wir auch helfen.
Schon einmal etwas von "analytischer Fehlerdiagnose" gehört? Wohl nicht- macht ja auch Arbeit.
Also-stocher mal schön weiter rum.
Gruß und Spaß
Andreas

Wie du vielleicht gelesen hast, habe ich zwei Uhren im Test. Die Uhr mit den von dir angeregten Änderungen läuft noch. Von daher kann ich also noch nichts analysieren.

Ich versuche dem Problem halt von mehreren Seiten beizukommen und will dabei und dadurch natürlich auch etwas lernen. Da sich mein Leben aber nicht ausschließlich um den Arduino und das Programmieren dreht, kann ich leider nicht meine ganze Zeit und Kraft da rein stecken.

Meine Beiträge hier sind auch als Fortschrittsberichte gedacht. Auch damit mir erfahrene User wie du sagen können wo vielleicht noch Denkfehler vorhanden oder Denkansätze sinnvoll oder angebracht sind.

Von daher, jede Idee wird beachtet, jeder Beitrag gelesen und wann immer möglich umgesetzt.

Mir ist vollkommen klar, dass ich ohne deine bzw. auch die Hilfe anderer nur sehr schwer und wesentlich langsamer voran komme. So User wie du haben mich ja erst ermutigt in dieses Thema einzusteigen, nicht persönlich, aber durch die Beiträge welche ich im Web gefunden habe.

Gruß

MiReu