Seltsamer Fehler mit Atmega8 und Bascom

OP #3077724
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
Persönliche Seite #3077821
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren