Go Down

Topic: Arduino hängt fest (Read 1 time) previous topic - next topic

noiasca

offensichtliches sehe ich nicht. Evtl. hängts an deiner I2C Kommunikation? Kannst vieleicht mehr Serial.Debug Ausgaben einbauen, damit du siehst wo sich dein Monster aufhängt?
Evtl. zu den Serial.Debug.Ausgaben auch die zwei letzten Zeichen am LCD Reservieren nutzen, und dort immer anzeigen, wo der Code sein soll (denn den PC willst vermutlich nicht eine Woche laufen lassen)

Also eine kleine Funktion die dir einfach in 1,14 eine Nummer aufs LCD schicken, und im Code verteilst du dann diese LCD.Debug ausgabe mit eigenen Nummern. Das stört hoffentlich nicht so sehr, du siehst aber, wo der Code das letzte mal war bevor er einfriert.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Shane93

Die Idee find ich echt gut, das werde ich mal ausprobieren.
Danke schon mal dafür.
Mal eine andere Frage, sehe ich das richtig das mein Timer für die Feuchtigkeitskontrolle nur einmal gestartet wird und wenn die Feuchtigkeit in dem Moment nach dem Ablauf des Timers nicht klein genug ist, nie wieder gestartet wird?
Ich bin mir da ganz schön unsicher.

combie

#17
Aug 06, 2019, 09:50 am Last Edit: Aug 06, 2019, 09:50 am by combie
Ich habe erhebliche Schwierigkeiten dein Programm zu verstehen.

Warum?
Es ist nicht aufgeteilt, in einzeln testbare Automaten.
Die Verstrickungen verteilen sich auf hunderte Zeilen.
Für mich ist das leider ein riesen Durcheinander, ohne klar ausformulierte Abhängigkeiten.




Mit dem Schaltplan habe ich auch 2 Sorgen:
Meines Erachtens nach kann das nicht laufen, da die Stromversorgung fehlt.
Warum du den DHT22 über einen Portpin versorgst, ist mir auch nicht klar.


--

Ich muss also leider an der Stelle aufgeben und kann dir nur dazu raten den WDT zu aktivieren.


Säge kein Sägemehl.

Shane93

Ich weiss das mein Programm nicht so einfach ist, ich wusste es nur nicht besser.

Die Stromversorgung habe ich auch nicht eingezeichnet, die kommt über die USB Schnittstelle, das funktioniert einwandfrei.

Und der DHT wird über einen Pin versorgt, da ich mit dem ersten Sensor immer ausfälle hatte und ihn somit neustarten konnte, jetzt ist es nur noch als Sicherheit drin, bevor das wieder passiert.

Alles gut, kein Problem und mit dem WDT werde ich mich wohl wirklich mal beschäftigen müssen, habe ich noch nie gemacht.

Whandall

Hat jetzt nichts mit dem Problem zu tun, es ist nur eine Anmerkung.
Code: [Select]
int getIntFromString (char *stringWithInt, byte num)
// input: pointer to a char array
// returns an integer number from the string (positive numbers only!)
// num=1, returns 1st number from the string
// num=2, returns 2nd number from the string, and so on
{
  char *tail;
  while (num>0)
  {
    num--;
    // skip non-digits
    while ((!isdigit (*stringWithInt))&&(*stringWithInt!=0)) stringWithInt++;
    tail=stringWithInt;
    // find digits
    while ((isdigit(*tail))&&(*tail!=0)) tail++;
    if (num>0) stringWithInt=tail; // new search string is the string after that number
  } 
  return(strtol(stringWithInt, &tail, 10));
}

Ich glaube du hast strol nicht richtig verstanden.
Du setzt tail hinter die Zahl, damit es dann von strol überschrieben wird, warum?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

noiasca

#20
Aug 06, 2019, 10:29 am Last Edit: Aug 06, 2019, 10:30 am by noiasca
der DHT22 braucht lt. Datenblatt zwar nur 1.5mA - aber ich würde VCC trotzdem nicht an einen Port-Pin hängen. Wenn du einen Reset brauchst, häng ein Transe/FET/Relais dazwischen.

Was du mit den Timer machst, musst du selber analysieren. Ich habe diese lib nicht im Einsatz.

Wenn du nicht weist was die Lib im Hintergrund macht, dann versuche die Lib Abläufe zu verstehen oder bleibe durchgängig bei den hangeschriebenen millis(). Du hast den riesen Vorteil dass der Schreiber der Lib hier mitliest, vieleicht hast du also doch eine Chance Erkenntnisse zu gewinnen, wenn du ihn konkrete Fragen stellst.

WDT gegen einfrieren ist kein Ausweg. Such deinen Fehler.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

combie

Quote
Die Stromversorgung habe ich auch nicht eingezeichnet, die kommt über die USB Schnittstelle, das funktioniert einwandfrei.
Das glaube ich dir nicht.

USB ist nur verpflichtet 100mA zu liefern.
Selbst die Polifuse auf dem UNO kann nur 500mA

Und 500mA scheint mir doch auch schon arg wenig für den ganzen Tüddel.


Quote
Ich weiss das mein Programm nicht so einfach ist, ich wusste es nur nicht besser.
Das macht nix..
Ich kann es so leider nur nicht reparieren/prüfen.

Quote
Und der DHT wird über einen Pin versorgt, da ich mit dem ersten Sensor immer ausfälle hatte und ihn somit neustarten konnte, jetzt ist es nur noch als Sicherheit drin, bevor das wieder passiert.
Könnte ein Zeichen dafür sein, dass du ernste Probleme mit der Stromversorgung hast.



Quote
und mit dem WDT werde ich mich wohl wirklich mal beschäftigen müssen, habe ich noch nie gemacht.
Ja.
Da offensichtlich das Leben von Tieren davon abhängt, solltest du das tun.

Aber das darf dich nicht daran hindern alles andere in Ordnung zu bringen.
Der WTD ist nur der letzte Rettungsring um Schaden abzuwenden.
Säge kein Sägemehl.

Shane93

Whandall ich muss dir ehrlich gestehen, das ist der einzige Part in meinem Programm, den ich absolut nicht verstehen und auch nicht was er macht, da steck ich nicht Tief genug drin, deswegen habe ich den nicht verändert, das und der ganze Teil für die RTC hatte ich nur kopiert, weil ich es ja für die Uhrzeit brauchte.

noiasca ich weiss doch was die lib macht, ich glaub aber einen Ablauffehler gefunden zu haben, bin mir aber nicht sicher.

combie es ist aber wirklich so, alles läuft über die Schnittstelle und bisher läuft das auch wunderbar so, es ist nie was aus gegangen oder so. Also lieber nicht über einen Pin schalten? Aber Stromprobleme sind mir echt noch nicht aufgefallen.

Whandall

Whandall ich muss dir ehrlich gestehen, das ist der einzige Part in meinem Programm, den ich absolut nicht verstehen und auch nicht was er macht, da steck ich nicht Tief genug drin, deswegen habe ich den nicht verändert, das und der ganze Teil für die RTC hatte ich nur kopiert, weil ich es ja für die Uhrzeit brauchte.
Du solltest C++ Tutorials durcharbeiten bis du diesen Teil verstehst,
die Dokumentation zu strtol wäre auch sinnvoll zu lesen und zu verstehen.

Der Ersteller hat anscheinend nicht verstanden was er tut,
was an der Qualität des kopierten Teils zweifeln lässt.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

ElEspanol

Der WTD ist nur der letzte Rettungsring um Schaden abzuwenden.
Und oftmals die einzige verbliebene praktikable Lösung, vor allem, wenn Störungen selten und aleatorisch von „aussen" auf das System einwirken.

Serenifly

#25
Aug 06, 2019, 11:22 am Last Edit: Aug 06, 2019, 12:57 pm by Serenifly
Kommt diese String Funktion nicht von jurs? Das mit tail in strtol() ist eigentlich egal. Mit dem Parameter kann man strtol() etwas ähnlich wie strtok_r() verwenden. Hier braucht man das gar nicht, da die Funktion verlassen wird. Da sollte man besser NULL übergeben. Aber es schadet auch nichts

Siehe Doku:
Quote
Reference to an object of type char*, whose value is set by the function to the next character in str after the numerical value.
This parameter can also be a null pointer, in which case it is not used.

combie

#26
Aug 06, 2019, 11:24 am Last Edit: Aug 06, 2019, 11:32 am by combie
Quote
Aber Stromprobleme sind mir echt noch nicht aufgefallen.
Diese können einem auch nicht auffallen, wenn man nicht ganz genau hinschaut.
Z.B. mit einem Oszi.
Auch könnte man den BrownOut des UNO (testweise) auf 4,3V hoch setzen.


Alternativ, kann der UNO seine eigene Betriebsspannung messen.
So könntest du dann minimal und maximal Werte ermitteln um zu prüfen ob das aus dem Ruder läuft.
Meine Glaskugel sagt: Du wirst dich damit selber verblüffen.



Beispielrechnung: (alle Werte nur geschätzt)
4 Relais a 100mA macht 400mA
1 LCD mit Beleuchtung 80mA
2 ATMega auf dem UNO a 30mA macht 60mA
1 RTC 10mA
Feuchtesensor 6mA, im Einschaltmoment 50mA

Wenns übel kommt, sind das zusammen über 600mA und die Sicherung kann nur 500mA



Säge kein Sägemehl.

Shane93

Serenifly, ja das müsste von jurs sein, wo du das jetzt sagst. Also muss ich da nicht unbedingt was ausbessern?

combie wie man das machen muss das er seine Spannung misst, weiss ich leider nicht und ist auch schwierig noch umzubauen, da alles schon verlötet ist und fest verbaut. Also es sind ja auch nur 4 Relais beschalten, eins ist quasi Reserve und die Beleuchtung des Displays ist ja so gut wie immer aus, nur bei betätigen des Tasters ist sie an und der Sensor wird ja auch an für sich nie neugestartet. Eigentlich dürfte ich dadurch nicht an die Grenze von 500mA kommen.

combie

Quote
combie wie man das machen muss das er seine Spannung misst, weiss ich leider nicht und ist auch schwierig noch umzubauen, da alles schon verlötet ist und fest verbaut.
Das sollte auch ohne Umbau oder externe Bauteile gehen.
Nicht so genau, aber für diese Test Zwecke ausreichend.
Säge kein Sägemehl.

Shane93

Kann der Arduino das intern messen oder wie meinst du das jetzt?

Go Up