Forum: Mikrocontroller und Digitale Elektronik Programm hängt sich auf (bascom)


von Alex (Gast)


Lesenswert?

hallo!
ich habe ein simples Programm, dass eine LED einschaltet, wenn ich den 
Taster drücke.
So sieht das Programm aus:

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 80
$framesize = 90

Config Pinc.0 = Input
Portc.0 = 1
Config Portb.1 = Output

Taster Alias Pinc.0
Led Alias Portb.1

Do
Debounce Pinc.0 , 0 , LED , Sub
Loop
End

LED:

Led = 1
Gosub warten
Led = 0
Return

Warten:
wait 2
return


das Funktioniert eigentlich soweit, aber ab und zu (ziehmlich selten) 
hängt sich das Programm auf.
Die LED Bleibt an, und geht nicht mehr aus, oder die geht beim Tasten 
nicht an usw.

Was kann das sein?

Danke
mfG Alex

von Paul B. (paul_baumann)


Lesenswert?

Vielleicht sielt sich das Programm gerade in Deiner Warteschleife herum,
während Du den Taster drückst?

MfG Paul

von Karl H. (kbuchegg)


Lesenswert?

Alex schrieb:

> Was kann das sein?

ALles mögliche
 Fehler in der Stromversorgung
 keine Blockkondensatoren
 Pollin Board und die Taster nicht umgebaut
 ...

von Maxx (Gast)


Lesenswert?

Hi,
manchmal nutzt trotz gesetztem Pullup einfach nur ein normaler 
Widerstand nach Plus. Einfach mal testen....
MfG Maxx

von Alex (Gast)


Lesenswert?

Das Ganze habe ich auf dem Lochraster aufgebaut.
als Schaltplan habe ich die Standartverdrahtung des Atmega8 von 
roboternetz genommen.
Die 100nF sind alle da, wo sie sein müssen.
Der Taster hat einen 5k-Pull-Up.

Noch Jemand eine Idee?

mfg Alex

von Wampus (Gast)


Lesenswert?

Hallo!

Vielleicht prellt der Taster zu lange.

Du könntest es mal mit "config debounce = 50" versuchen (ohne "").

Gruß wampus

von Alex (Gast)


Lesenswert?

>Vielleicht prellt der Taster zu lange.
was heisst das genau, und wie funktioniert debounce?
Danke

von Wampus (Gast)


Lesenswert?

Wenn Du einen Taster drückst, hast Du nicht schlagartig Kontakt. Durch 
Federwirkung und Verschmutzungen kommt es kurzzeitig zu einem 
An-aus-an-aus- ... -Effekt. Die Entprellroutine debounce prüft den 
Tasterzustand standardmäßig nach 25 ms ein zweites Mal. Wenn der Zustand 
stabil bleibt, wird die nächste Aktion eingeleitet. Mit config debounce 
kannst Du die Zeit in Millisekunden nach Deinen Bedürfnissen einstellen.

Es gibt aber auch intelligente Routinen (z.B. von Peter Dannegger), die 
viel effektiver arbeiten. Das muss man aber von Hand programmieren. Es 
gibt auch in Bascom genug Beispiele.

Gruß wampus

von Alex (Gast)


Lesenswert?

achso, ok!
aber wie kann sich das so auf ein Programm auswirken, dass das Programm 
sich aufhängt?

Gruss Alex

von Wo (Gast)


Lesenswert?

ist Dein "Declare sub" für die beiden Sub- Routinen ?

von Alex (Gast)


Lesenswert?

Ich habe gerade einen Versuch durchgeführt.
Wenn ich mich nicht irre/täusche, dann hängt sich das Programm auf, wenn 
ich die Platine von Unten (Lötseite) anfasse.
Kann ich solche Störungen verursachen, dass der µC damit nicht zurecht 
kommt?
mfG Alex

von Jan (Gast)


Lesenswert?

>>>Kann ich solche Störungen verursachen, dass der µC damit nicht zurecht
kommt?

1. 10k gegen V+ am RESET Pin sind da?
2. evtl.Spannungsschwankungen und BOD ist an
3. Quarz ewig weit vom Atmel entfernt/ keine 22p Cs

Wenn ich deinen Code via copy&paste bei mir kompilieren lasse, meckert 
Bascom: Error 61: Label not found...blablabla

Gruß

von dd (Gast)


Lesenswert?

haste mal das end auch ans ende gestellt?

von Sag (Gast)


Lesenswert?

ich doch: Declare sub fehlt ! "Wenn ich deinen Code via copy&paste bei 
mir kompilieren lasse, meckert
Bascom: Error 61: Label not found...blablabla"

von mue-c (Gast)


Lesenswert?

Declare Sub brauchst du nicht.
Aber du solltest dein Sub LED anders nennen als den Alias für PortB.1.

von Jan (Gast)


Lesenswert?

ja klar, die sub und der alias haben gleichen Namen...jetzt läufts
Gruß

von Alex (Gast)


Lesenswert?

Ja, sorry, ich habe mich vertippt.
LEDw heist die 2. sub.

Aber woran kann das liegen, dass sich das Programm aufhängt?

Gruss Alex

von Karl H. (kbuchegg)


Lesenswert?

Alex schrieb:
> Das Ganze habe ich auf dem Lochraster aufgebaut.
> als Schaltplan habe ich die Standartverdrahtung des Atmega8 von
> roboternetz genommen.

Und die sieht wie aus?

> Noch Jemand eine Idee?

Ich tippe mal auf 80:20 zugunsten eines Hardwarefehlers.

von Entstoerer (Gast)


Lesenswert?

Hallo,

> Aber woran kann das liegen, dass sich das Programm aufhängt?

> Wenn ich mich nicht irre/täusche, dann hängt sich das Programm auf, wenn
> ich die Platine von Unten (Lötseite) anfasse.

Unbeschaltete Pins sollten auf festen Pegel gelegt werden. Daher die 
nicht verwendeten Anschlüsse entweder auf Ausgang programmieren und z.B. 
auf Low setzen oder als Eingänge belassen und die Pullups einschalten.

(Ich bevorzuge die Variante mit den Ausgängen; hat sich als 
unempfindlicher erwiesen.)

Gruss

von Reinhard S. (schopfi)


Lesenswert?

hi !

verwendest du absichtlich so hohe stackwerte ??
setze die mal auf standard für den mega8 zurück , du schaltest ja nur ne 
LED
und hast keine unzähligen gosub´s
probier mal die 24 - 8 - 24.
vielleicht hilfts ja, ansonsten würd ich auch auf die HW tippen :-)

lg

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.