Arduino due und EA eDIPTFT3-A Probleme

Gast #6338137
Ich habe ein Arduino due mit touchscreen display EA eDIPTFT43-A 
verbunden über RS-232 Schnittstelle. Das Display ist im Auto und soll 
während einer Autofahrt als Bargraph verschiedene Werte zum Beispiel 
Geschwindigkeit darstellen.

Ab un zu, stürzen Arduino und das Display ab. Der Bildschirm wird 
eingefroren und erst nachdem die Stromversorgung ab- und angeschaltet 
wird, geht alles wieder.

Ich habe ein watchdog in mein Arduino code implementiert aber der hilft 
nicht.

Hat jemand was ähnliches schon gehabt / hat eine Lösung?
Beitrag #6338194 wurde von einem Moderator gelöscht.
Hamster R. schrieb:
> Ich habe so Watchdog implementiert:
> ...
> wdt.enable(1000)
> ...

Ist das jetzt dein Ernst?
Sorry, aber da vergeht selbst mir die Lust am helfen.

Das ist so als würde ich sagen "mein OS funktioniert nicht" und poste 
dann:
1
void main(void)
2
{
3
    OS.run();
4
}

Viel interessanter wäre es zu sehen, wie diese Funktionen implementiert 
sind...in deiner myWdt.h & myWdt.c

Da es um die Config. der WDT Register geht.

Weiterhin kann es auch sein, dass deine loop() mit dem WDT.restart() 
zwar ausgeführt wird, aber dein Code sich durch irgendwelche Bedingungen 
selbst in der Funktionalität aussperrt und der µC zwar läuft aber dein 
Code keine Auswirkung mehr hat.

z.B. sowas:
1
bool foo;
2

3
void setup()
4
{
5
   wdt.enable(1000);
6
   foo = false;
7
}
8

9
void loop()
10
{
11
   wdt.restart();
12

13
   if (irgendwas_passiert)
14
   {
15
      foo = true;
16
   }
17

18
   if (!foo)
19
   {
20
      display_ansteuern();
21
   }
22
}
Gast
den Code habe ich von folgenden GitHub bekommen:
https://github.com/leomil72/advancedFunctions
da sind die zwei Libraries drin die ein Italiener mal erstellt hat, und 
im zugehörigen Beispiel von ihm war watchdog auch nur so wie ich es 
geschrieben habe hinzugefügt, daher.

Überall wo ich im Internet watchdog Beispiele gesehen habe, war die 
Implementierung recht ähnlich wie meins... als Beginner weiß ich ja auch 
nicht wie kompliziert das überhaupt aussehen soll.
Angehängte Dateien:
Wie kann man denn aber als selbstbekennder Beginner (was ja nicht 
schlimm ist) gleich mit so 'nem Projekt an den Start gehen?
Weil es entsprechende Libs gibt, die ein Italiener mal ins Git gestellt 
hat?
Wo finden wir dein Repositiory, dass wir uns das mal ansehen können?
Das kann alles mögliche sein(Spannungsversorgung zB). Selbst wenn der 
WDT richtig konfigurtiert wäre, würde dein Bildschirm nicht einfrieren, 
sondern der Arduino ständig neu resetten. Das kann ja auch nicht die 
Lösung sein.
Wurschelt euch doch erstmal mitn paar einfachen Beispeilen durchs 
Datenblatt des verwendeten Prozessors, damit überhaupt ersteinmal ein 
Verständnis und eine Beziehung zum Ganzen entsteht.
Axel R. schrieb:
> sicher das das so stimmt? mal mit dem Datenblatt abgeglichen?

Ja das passt soweit...
ABER ich hab da so ein Gefühl, hab das mal als Projekt nachgebastelt und 
mir die Register im SerialMonitor ausgegeben.

Der WDT läuft wirklich nicht, da das WDDIS Bit gesetzt ist und da das 
Register "Read-write Once" ist, kann man den nachträglich nicht 
aktivieren.

Irgendwo im StartUp Code wird der wohl disabled :-/
Adam P. schrieb:
> Axel R. schrieb:
>> sicher das das so stimmt? mal mit dem Datenblatt abgeglichen?
>
> Ja das passt soweit...
> ABER ich hab da so ein Gefühl, hab das mal als Projekt nachgebastelt und
> mir die Register im SerialMonitor ausgegeben.
>
> Der WDT läuft wirklich nicht, da das WDDIS Bit gesetzt ist und da das
> Register "Read-write Once" ist, kann man den nachträglich nicht
> aktivieren.
>
> Irgendwo im StartUp Code wird der wohl disabled :-/

jajaja, GENAU das mein ich aber!

Man kann nicht einfach mit'm32bitter umherschießen, wenn man sich nicht 
mit dem Datenblatt beschäftigt.
nebenher: ich finds auch cool, wenn im Auto noch'n kleines Display aus 
der Armaturenbrettabdeckung klappt und der Sound der elektrischen 
HochleistungsHupe auswählbar ist (Beispielsweise).
Aber: man sollte sich da schon ernsthaft ne Weile mit beschäftigt haben. 
Dabei liegt die Betonung auf "ernsthaft". Das dauert eben seine Zeit.
Um die Frage aus dem Eingangspost zu beantworten:

needhelp123456 schrieb:
> Hat jemand was ähnliches schon gehabt / hat eine Lösung?

Nein - habe ich noch nicht gehabt und leider, bei den rudimentären 
Informationen, leider auch keine Lösung für dich.
Ich tippe auf deine Stromversorgung oder IO (3.3V<->5V)
Gast
da ich das für meine Arbeit mache, habe ich wenig Wahl was anderes zu 
machen... die haben hohe Anforderungen von uns leider

ja 0xA5000001 übereinstimmt mit dem Datenblatt
Nun der Watchdog hilft nur wenn aus irgendeinem Grund die Mainloop nicht 
mehr ausgeführt wird. Das ist im gezeigten Beispiel wohl ziemlich 
unmöglich..
Der TO hat ein Problem mit der Displayansteuerung also würde ich dort 
genauer hinschauen.
Also ich habs teilweise gefunden:

C:\Users\*DEIN 
BENUTZER*\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.8\co 
res\arduino\main.cpp

Zeile 45 (knapp dran an 42) :-D

In dem Ordner gibts dann die watchdog.cpp wo watchdogSetup(); als
1
extern "C"
2
void _watchdogDefaultSetup (void)
3
{
4
  WDT_Disable (WDT);
5
}
6
void watchdogSetup (void) __attribute__ ((weak, alias("_watchdogDefaultSetup")));
definiert ist.

Soweit so gut, aber laufen tut er noch nicht...bin dran :)
jetzt störts mich auch, wie können die den WDT pauschal einfach 
deaktivieren.
LÖSUNG:

die oben genannte main.cpp anpassen:
Da sinds 3 Sek.
1
int main( void )
2
{
3
   // Initialize watchdog
4
   //watchdogSetup();
5
   watchdogEnable(3000);
6

7
   // usw ...
8
}

und dann im eigenen Code
watchdogReset();
verwenden.

Klar kann man das schöner machen, aber das ist nicht meine Aufgabe :-D

Gruß
Adam P. schrieb:
> LÖSUNG:
> die oben genannte main.cpp anpassen:

Also ich muss mich etwas korrigieren.
Die main.cpp muss nicht angepasst werden!

Man muss in seinem Sketch einfach eine watchdogSetup() einfügen,
damit überschreibt ihr diese und anstatt der _watchdogDefaultSetup() 
wird eure aufgerufen. Fertig.

WDT Test:
1
void watchdogSetup(void)
2
{
3
  watchdogEnable(3000);  
4
}
5

6
void setup()
7
{
8
  Serial.begin(115200);
9

10
  watchdogSetup();
11
  
12
  Serial.println("setup end");
13
}
14

15
void loop()
16
{
17
  Serial.println("loop begin");
18

19
  watchdogReset();
20

21
  // WDT Test
22
  while(1);  
23
  
24
  Serial.println("loop end");
25
}
vielen dank schonmal!

ich hatte in ein von den früheren versionen meines skriptes 
watchdogsetup sogar als ovveride des weak funktion drin- hat aber nicht 
funktioniert, wahrscheinlich wegen dem while (1) was ich nicht hatte.

das while (1) ist wohl da um watchdog immer aktiv zu halten oder...?
jaein,

das ist einfach nur eine leere endlosschleife.
da er da nie rauskommt und somit kein reset macht, schlägt der watchdog 
zu.

kannst auch so schreiben
while(1)
{
   // mach nichts
}

er verlässt die while nie wieder, somit ruft er nie wieder den wdt.reset 
auf
da dein watchdog nie funktioniert hat,
gehe ich stark davon aus, dass dein code sich mit der zeit aufhängt und 
deshalb nix mehr geht.

das würde ich suchen.

den watchdog dafür zu gebrauchen, dass wenn mal was nicht tut einfach 
mal reset ausführen ist net so schick... wünsche ich mir von keinem auto 
oder flugzeug ?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.