Forum: Mikrocontroller und Digitale Elektronik Seltsamer Fehler mit Atmega8 und Bascom


von Philippe B. (philippe27)


Lesenswert?

Hallo

Ich hab mit Bascom und ein paar neuen Lcds aus China gebastelt und mir 
ein kleines Pseudo Programm geschrieben.

Folgendes passiert.

LC- Display:

________________
|starting...  Ein|
|000   oder   255|
------------------

Oben Links steht ein normaler Text "starting..." und Oben Rechts wird 
ein Pin abgefragt und "Ein" oder "Aus" angezeigt.
Unten Links wird in 5er Schritten von 0 bis 255 hochgezählt und Unten 
Rechts von 255 bis 0 in 1er Schritten.

Alles funktioniert eigentlich bis auf Unten Rechts. Für diese Zählung 
wird die Variabel "B" im Code gebraucht. (Als Byte konfiguriert)

Es zählt von 255 auf 0 runter und anstelle dann wieder auf 255 gesetzt 
zu werden, fängt es zuerst von 990 in 10er Schritten an auf 0 zu gehen. 
Danach springt es auf 900 zurück und geht in 100er Schritten auf 0 
runter.
Erst jetzt funktioniert es von 255 in 1er Schritten wieder, bis es bei 0 
angekommen ist und das Spiel von vorne los geht.

Wo liegt hier der Fehler?
Ich komm einfach auf keine Lösung

Code:
1
$regfile = "m88def.dat"
2
$crystal = 1000000
3
4
Config Portd = Output
5
Config Pinb.0 = Input
6
7
Config Lcd = 16 * 2
8
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
9
10
Dim A As Byte
11
Dim B As Byte
12
Dim C As Bit
13
14
Cls
15
Locate 1 , 1
16
Lcd "Hallo Welt"
17
Cursor Blink
18
19
Waitms 1000
20
Cls
21
Cursor Noblink
22
Cursor Off
23
24
25
Do
26
27
If Pinb.0 = 1 Then
28
 C = 1
29
End If
30
31
If Pinb.0 = 0 Then
32
C = 0
33
End If
34
35
If C = 1 Then
36
Locate 1 , 14
37
Lcd "Ein"
38
Else
39
Locate 1 , 14
40
Lcd "Aus"
41
End If
42
43
Locate 1 , 1
44
Lcd "starting..."
45
46
Locate 2 , 1
47
Lcd A
48
49
Locate 2 , 6
50
Lcd "oder"
51
52
Locate 2 , 14
53
Lcd B
54
55
Waitms 500
56
57
58
If A = 255 Then
59
Locate 2 , 1
60
Lcd "   "
61
A = 0
62
End If
63
64
A = A + 5
65
66
If B = 0 Then
67
Locate 2 , 14
68
Lcd "   "
69
B = 255
70
End If
71
72
B = B - 1
73
74
Loop
75
76
77
End

Danke
Gruss Philippe

von Sven (Gast)


Lesenswert?

Lcd B
ERgibt eine verschiebung. Wenn du 10 hast er zu 9 zählt bleibt die 0 von 
der 10 stehen weil sie nicht gelöscht wird

Wenn du lcd b;" " machst sollte es passen

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Philippe B. schrieb:
> Es zählt von 255 auf 0 runter und anstelle dann wieder auf 255 gesetzt
> zu werden, fängt es zuerst von 990 in 10er Schritten an auf 0 zu gehen.
> Danach springt es auf 900 zurück und geht in 100er Schritten auf 0
> runter.
> Erst jetzt funktioniert es von 255 in 1er Schritten wieder, bis es bei 0
> angekommen ist und das Spiel von vorne los geht.

Die Subtraktion wird schon funktionieren. Dein Problem wird die Ausgabe 
des Wertes sein.

Aber mal Schritt für Schritt:

> Es zählt von 255 auf 0 runter und anstelle dann wieder auf 255 gesetzt
> zu werden,

Wenn du aufmerksam auf das Display siehst, wirst du feststellen, dass 
die Werte sich folgendermaßen ändern:

255-254-253-...-102-101-100-990-980-970-...-120-110-100-900-800-...-200- 
100-000-254-253-...

> fängt es zuerst von 990 in 10er Schritten an auf 0 zu gehen.
> Danach springt es auf 900 zurück und geht in 100er Schritten auf 0
> runter.

Sieh dir die Zahlen oben noch mal an.

> Erst jetzt funktioniert es von 255 in 1er Schritten wieder, bis es bei 0
> angekommen ist und das Spiel von vorne los geht.

1. fängt es nicht wieder bei 255 sondern bei 254 an

2. wird jeder weitere Durchlauf das selbe Verhalten zeigen.


> Wo liegt hier der Fehler?

Ganz einfach: Bascom schreibt

- bei einem dreistelligen Wert (999...100) drei Zeichen auf das Display
- bei einem zweistelligen Wert (99...10) nur zwei Zeichen auf das
  Display
- bei einem einstelligen Wert (9...0) nur ein Zeichen auf das Display

Den Rest überlasse ich nun deiner Kombinationsgabe.

von seltsamer (Gast)


Lesenswert?

Philippe B. schrieb:
> Ich hab mit Bascom und ein paar neuen Lcds aus China gebastelt und mir
> ein kleines Pseudo Programm geschrieben.

Du hast eine genial erfolgreiche Kombination gewählt. Alles was du noch 
brauchst ist ne App für den Pseudo-Compiler.

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.