PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit 7Segment Anzeige



sm4ck
17.10.2009, 14:13
Hallo,

ich versuche seid ein paar tagen eine 7Segment-Anzeige zum laufen zu bringen. Nur hab ich keinen blassen schimmer wieso das nicht so geht wie ich das will :) hab ich vielleicht einen kleinen denkfehler?

Es soll einfach die erste stelle des AD-Wertes auf dem segement angezeigt werden.


$regfile = "m8def.dat"

$crystal = 5200000


$hwstack = 32
$swstack = 10
$framesize = 40


' ********************************* Config ********************************

Config Portd = Output

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim D As Word
Dim N As Word
Dim W As Word

' ********************************* Main ********************************

Do

W = Getadc(0)
N = W / 100
D = Lookup(n , Value_table)
Portd = D
Waitms 333

Loop


End

' ********************************* Data ********************************

Value_table:
Data &B10000001 , '0
Data &B11101101 , '1
Data &B01000011 , '2
Data &B01001001 , '3
Data &B00101101 , '4
Data &B00011001 , '5
Data &B00010001 , '6
Data &B11001101 , '7
Data &B00000001 , '8
Data &B00001001 , '9

PicNick
17.10.2009, 15:03
Inwiefern geht das nicht ? Was tut sich denn ?
Das Programm ist ja durchaus übersichtlich *g*

Wenn du immer nur 0-er siehst, hat's was mit dem ADC
wenn das Display immer finster ist, hats was mit mit der Anzeige

Lass die ADC-Geschichte erstmal aus
mach erstmal eine Schleife, um zu sehen, ob die 7-Segmentgeschichte hinhaut


dim x as byte
for n = 1 to 10
x = n-1;
d= lookup(x, Value_Table)
portd = D
waitms 1000
next


Die Zahlen sollten im sekundentakt von 0-9 gehen.

sm4ck
18.10.2009, 14:31
hab das jetzt mal ausprobiert,

diese laufen nicht von 0 bis 9 durch..

0..2..4..6..8. und danach nur noch undefinierte zustände... komisch..


mit diesem code funktionierts prima..


Dim I As Byte

Dim X(10) As Byte

Restore Value_table

For I = 1 To 10
Read X(i)
Next

Portb.0 = 1

Do
For I = 1 To 10
Portd = X(i)
Waitms 400
Next
Loop

End



Value_table:
Data &B10000001 , '0
Data &B11101101 , '1
Data &B01000011 , '2
Data &B01001001 , '3
Data &B00101101 , '4
Data &B00011001 , '5
Data &B00010001 , '6
Data &B11001101 , '7
Data &B00000001 , '8
Data &B00001001 , '9

for_ro
18.10.2009, 14:49
Dein Problem ist diese Zuweisung

D = Lookup(n , Value_table)

D ist eine Word-Variable, also 2 byte.
Bascom nimmt nun an, dass du auch 2 Byte aus den Daten einlesen willst. Entsprechend werden auch die Adressen berechnet und es kommt daher immer nur jede zweite Zahl. Der Port kann nur Byte verarbeiten und lässt das höherwertige Byte einfach weg.
Wenn du D als Byte deklarierst, wird es gehen.

sm4ck
18.10.2009, 14:56
ach mann bin ich doof :) vielen dank!