Arduino due und EA eDIPTFT3-A Probleme

Gast #6338137
Lesenswert?

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.
#6338779
Lesenswert?

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 #6338830
Lesenswert?

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:
#6338877
Lesenswert?

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.
#6338902
Lesenswert?

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 :-/
#6338913
Lesenswert?

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)
#6338934
Lesenswert?

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.
#6338941
Lesenswert?

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ß
#6339084
Lesenswert?

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
}
#6339269
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren