Forum: Mikrocontroller und Digitale Elektronik Fehler in Bascom rnd()?


von Kurt (Gast)


Lesenswert?

Hallo,

ich habe für einen ATTiny13 ein kleines Programm in Bascom geschrieben, 
das einfach die 3 LEDs einer RGB-LED eine Sekunde ein- und 
zufallsgesteuert  per rnd() zwischen 0 und 10 Sekunden ausschalten soll. 
Das ganze ist einfach nur zu Testzwecken fix zusammengeschrieben.

Funktioniert soweit ganz gut, nur hängt sich das Programm regelmäßig 
nach dem 6. Aufruf von a=rnd(10) auf.
1
$regfile = "attiny13.dat"
2
3
$hwstack = 36
4
$swstack = 5
5
$framesize = 16
6
7
8
$crystal = 128000
9
10
Config Portb = Output
11
Dim A As Word
12
13
Rot Alias Portb.2
14
Gruen Alias Portb.1
15
Blau Alias Portb.0
16
17
Do
18
19
20
Portb = 7
21
Gosub Warten_an
22
Portb = 0
23
Gosub Warten_aus
24
25
Portb = 5
26
Gosub Warten_an
27
Portb = 0
28
Gosub Warten_aus
29
30
Portb = 6
31
Gosub Warten_an
32
Portb = 0
33
Gosub Warten_aus
34
35
36
Portb = 3
37
Gosub Warten_an
38
Portb = 0
39
Gosub Warten_aus
40
41
Portb = 7
42
Gosub Warten_an
43
Portb = 0
44
Gosub Warten_aus
45
46
Blau = 1
47
Gosub Warten_an
48
Blau = 0
49
Gosub Warten_aus
50
51
Gruen = 1
52
Gosub Warten_an
53
Gruen = 0
54
Gosub Warten_aus
55
56
57
Rot = 1
58
Gosub Warten_an
59
Rot = 0
60
Gosub Warten_aus
61
62
Loop
63
64
Warten_an:
65
Wait 1
66
Return
67
68
Warten_aus:
69
A = Rnd(10)
70
Wait A
71
Return

Das ist also wirklich nichts spektakuläres und soweit ich das 
überblicken kann, auch ohne Fehler im Code ;-).
Aber nach jedem Einschalten ist nach dem Ausschalten der blauen LED 
Schluss. Kann das jemand von Euch nachvollziehen?
Wenn ich A=rnd(10) auskommentiere und durch einen festen Wert ersetze 
läuft das Programm durch.
Vermute, dass rnd() Müll auf dem Stack "zurücklässt" und dass sich der 
Tiny dann aufhängt....

Gruß
Kurt

von spess53 (Gast)


Lesenswert?

Hi

>Vermute, dass rnd() Müll auf dem Stack "zurücklässt" und dass sich der
>Tiny dann aufhängt....

Unwahrscheinlich. Was passiert bei einem WAIT A, wenn A = 0 ist?

MfG Spess

von Kurt (Gast)


Lesenswert?

Danke, daran wird es gelegen haben.
Habe mal ein A=A+1 eingefügt, um zu verhindern, dass A bei wait(A) Null 
annimmt und jetzt läuft es.

Gruß
Kurt

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.