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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.