Forum: Mikrocontroller und Digitale Elektronik Programm bleibt hängen (Atmel, BASCOM)


von Christian J. (snakehanau)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Generelles:
Atmega328P-PU
BASCOM
ES geht an sich um eine PID Reglelung.
Sollwert wird im Programm vorgegeben und kann mit Poti an ADC verändert 
werden.
Ist-Wert wird über einen DS1820 Sensor ermittelt
Als Display kommt nen 16x2 in 4-Bit zum Einsatz.
Ausgegeben wird nen PWM Signal

nun zum Problem....
ca. 10 Sekunden lang funktioniert "alles" (soweit man das beurteilen 
kann) danach bleibt das Programm/uC einfach hängen. Das merkt man daran, 
das die Ist-Temp nicht mehr aktuallisiert wird und der PWM-Ausgang auf 
0V springt.
Ich habe keine Ahnung warum !?

Der PID teil stammt aus dem BASCOM Beispiel.
Der DS18xx Teil hab ich mir zusammengesucht, als ich mich mit diesen 
Sensoren beschäftigt habe....das hat soweit ohne Probleme funktioniert.


Im Anhang das komplette Programm, es sind viele Kommentare drin somit 
sollte man sich zurecht finden.

Vielen Dank schon mal
#CJ

von Myxo M. (myxom)


Lesenswert?

Versuch es mal mit
GoTo Hauptschleife
statt
Gosub Hauptschleife

von Formal (Gast)


Lesenswert?

1
Hauptschleife:
2
.
3
.
4
.
5
   Gosub Hauptschleife

Würd ich als erstes eliminieren und die Hauptschleife mit do..loop 
einschließen. Keine Ahnung, was mit Gosub Hauptschleife ohne ein Return 
mit dem Stack macht...

von Sven (Gast)


Lesenswert?

da wird der Stack überlaufen und irgendein unsinn wird passieren.
Goto oder Do Loop.

von Christian J. (snakehanau)


Lesenswert?

Formal schrieb:
>
1
Hauptschleife:
2
> .
3
> .
4
> .
5
>    Gosub Hauptschleife
>
> Würd ich als erstes eliminieren und die Hauptschleife mit do..loop
> einschließen. Keine Ahnung, was mit Gosub Hauptschleife ohne ein Return
> mit dem Stack macht...

Genau das war das Problem...DANKE

Gibt's noch ne Erklärung warum...so zum Verständniss.

von Formal (Gast)


Lesenswert?

Christian Jung schrieb:
> Gibt's noch ne Erklärung warum...so zum Verständniss.

Sven schrieb:
> da wird der Stack überlaufen und irgendein unsinn wird passieren.
> Goto oder Do Loop.

Beim Gosub wird der Programmcounter auf den Stack geschrieben. Kommt 
kein zugehöriges Return, das den PC wieder vom Stack holt, sondern 
gleich noch ein Gosub wird der Stack immer weiter wachsen - crash, oder 
was Bascom auch immer bei Überschreitung von HWSTACK vorgesehen hat.

von Christian J. (snakehanau)


Lesenswert?

Alles klar...klingt irgendwie logisch

DANKE

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.