MC14499 - AVR

OP #2635592
Lesenswert?

Hallo Zusammen.. :)

Ich hab heute mal ein Problem bei dem ich selbst - soweit ich denke - an 
meine Programmiergrenzen stoße..

Und zwar möchte ich mit einem AVR einen Frequenzzähler realisieren. Dazu 
zählt ein Timer (COUNTER) und gibt dieses nach exakt einer Sekunde 
(2.Timer) an einen Interrupt der dann die Hz Zahl ermittelt.
Dieser Teil des Programmes ist fertig und funktioniert auch 
einwandfrei...

Jetzt Möchte ich diesen Wert über drei 7Segment Anzeigen ausgeben...
Direktes Multiplexing hat zwar funktioniert aber setzt leider nach jeder 
Sekunde (Während des Interrupts) aus, was zu einen Flackern führt... :(


Ich hab jetzt in der Bastelkiste den MC14499 von Motorola gefunden... 
alles laut Datenblatt aufgebaut und mal 3 Einsen drauf geschickt.. Geht 
ebenfalls. Ich möchte diesen nun auch gerne für die Anzeige nutzen da 
dieser Seperat vom AVR Timer und somit "flackerlos" Multiplext...

Nur wie realisiere ich im AVR (Syntaxseitig), dass der vom Interrupt 
kommende dreistellige Wert dann in 12 Bits (also 4 Bit pro Ziffer) 
umgewandelt und ausgegeben wird...

Gibt es da eine Möglichkeit?


PS.: Wer im Datenblatt nicht durchsieht wie der Chip die daten empfängt, 
ich kann es gerne noch erklären, spare es mir aber erstmal an dieser 
Stelle weil es eigentlich gut verständlich ist! :)


Bitte Helft mir schnellstmöglich! :)


Lg Tony
OP #2635706
Lesenswert?

Hallo Willi! :)
Danke für deine schnelle Hilfe, jedoch finde ich mit diesem Suchbegriff 
ausschlieslich Projekte die mit LCD realisiert wurden.

Das hat neben dem Optischen Aspekt auch den Vorteil das es VIEL 
einfacher ist... Auch ich hatte meinen Zähler bereits mit LCD laufen und 
das Mit Erfolg... aber mir geht es eben darum diese 7Segment anzeigen zu 
verwenden und das über dewn Og. Treiber-Decoder-IC..


Hat noch jemand Vorschläge? :)

lg
OP #2635876
Lesenswert?

Hallo Nochmal! :)

Ich hab jetzt hier mal einen Syntax für euch bei dem ich noch einige 
Probleme Habe..:
1
$regfile = "m8def.dat"
2
$crystal = 1000000
3

4
Dim 0(4) As Byte
5
Dim 1(4) As Byte
6
Dim 2(4) As Byte
7
Dim 3(4) As Byte
8
Dim 4(4) As Byte
9
Dim 5(4) As Byte
10
Dim 6(4) As Byte
11
Dim 7(4) As Byte
12
Dim 8(4) As Byte
13
Dim 9(4) As Byte
14

15

16
Dim Frequenz As Integer
17
Dim Z1 As Integer
18
Dim Z2 As Integer
19
Dim Z3 As Integer
20

21
Dim X As Integer
22
Dim Y As Integer
23

24
Config Portd.0 = Output
25
Config Portd.1 = Output
26
Config Portd.2 = Output
27

28
Enb Alias Portd.0
29
Clk Alias Portd.1
30
Dat Alias Portd.2
31

32

33
Frequenz = 245
34

35
Do
36

37
Z1 = Frequenz Mod 10
38
Frequenz = Frequenz / 10
39
Z2 = Frequenz Mod 10
40
Frequenz = Frequenz / 10
41
Z3 = Frequenz Mod 10
42

43
For Y = 1 To 3
44
Do
45
   For X = 0 To 3
46
   Dat = Lookup(x , Zy)
47
   Clk = 1
48
   Clk = 0
49
   Next X
50
Loop Until X = 3
51
X = 0
52
Next Y
53

54

55
Loop
56
End
57

58
0:
59
Data 0
60
Data 0
61
Data 0
62
Data 0
63

64
1:
65
Data 0
66
Data 0
67
Data 0
68
Data 1
69

70
2:
71
Data 0
72
Data 0
73
Data 1
74
Data 0
75

76
3:
77
Data 0
78
Data 0
79
Data 1
80
Data 1
81

82
4:
83
Data 0
84
Data 1
85
Data 0
86
Data 0
87

88
5:
89
Data 0
90
Data 1
91
Data 0
92
Data 1
93

94
6:
95
Data 0
96
Data 1
97
Data 1
98
Data 0
99

100
7:
101
Data 0
102
Data 1
103
Data 1
104
Data 1
105

106
8:
107
Data 1
108
Data 0
109
Data 0
110
Data 0
111

112
9:
113
Data 1
114
Data 0
115
Data 0
116
Data 1

So ich weis das da noch einiges fehlt und bestimmt auch was zu viel ist, 
aber ich bin etwas am verzweifeln da der Kompiler in der Zeile
1
Dat = LookUp(x,zy)

eine StoreBit error [200] anzeigt...

Was hab ich denn Falsch gemacht!?

Noch kurz zum Plan wie es Funktionieren soll:

Eine Frequenz (hier zum Test auf 245) kommt vom Counter, wird in 
z1,z2,z3 aufgeteilt.

Dann wird die erste Ziffer (y=1) über die Loop an den Treiber geschickt 
(4Bits)... Dazu hab ich die Tabellen gem. DB angelegt... (Bsp.: "1" 
entspricht 0001) die X-Schleife läuft 4 mal durch und setzt den DAT pin 
auf das xte Niveau der Ziffer von zy (y ist ja bei der ersten ziffer 1 
also z1) dann folgt der Clk takt...


Kann mir bitte Jemand Helfen?

Lg :)
OP #2636285
Lesenswert?

Okay Daaaanke!

Dann die nächste Frage:
Das Problem scheint darin zu liegen dass der Wert von Z1 als integer 
NICHT als Bezeichnung für die Tabelle genuzt werden kann...
Desweiteren schein die Variablen Z1,Z2,Z3 nicht global nutzbar zu sein 
denn beim Compilieren des neuen (unten) Syntax, kommt die Meldung "Label 
Not Found[z1]" (und auch mit z2 und z3)

Kann mit endlich mal jemand weiterhelfen ich bin hier am Verzweifeln -.-

Wäre schön! :)
Lg
1
$regfile = "m8def.dat"
2
$crystal = 1000000
3

4
Dim 0(4) As Byte
5
Dim 1(4) As Byte
6
Dim 2(4) As Byte
7
Dim 3(4) As Byte
8
Dim 4(4) As Byte
9
Dim 5(4) As Byte
10
Dim 6(4) As Byte
11
Dim 7(4) As Byte
12
Dim 8(4) As Byte
13
Dim 9(4) As Byte
14

15
Dim Stat As Bit
16

17
Dim Frequenz As Integer
18
Dim Z1 As Integer
19
Dim Z2 As Integer
20
Dim Z3 As Integer
21

22
Dim X As Integer
23
Dim Y As Integer
24

25
Config Portd.0 = Output
26
Config Portd.1 = Output
27
Config Portd.2 = Output
28

29
Enb Alias Portd.0
30
Clk Alias Portd.1
31
Dat Alias Portd
32

33
Frequenz = 245
34

35
Do
36

37
Z1 = Frequenz Mod 10
38
Frequenz = Frequenz / 10
39
Z2 = Frequenz Mod 10
40
Frequenz = Frequenz / 10
41
Z3 = Frequenz Mod 10
42

43

44
Do
45
   For X = 0 To 3
46
   Dat = Lookup(x , Z1)
47
   Clk = 1
48
   Clk = 0
49
   Next X
50
Loop Until X = 3
51
X = 0
52

53
Do
54
   For X = 0 To 3
55
   Dat = Lookup(x , Z2)
56
   Clk = 1
57
   Clk = 0
58
   Next X
59
Loop Until X = 3
60
X = 0
61

62
Do
63
   For X = 0 To 3
64
   Dat = Lookup(x , Z3)
65
   Clk = 1
66
   Clk = 0
67
   Next X
68
Loop Until X = 3
69
X = 0
70

71

72

73

74
Loop
75
End
76

77
0:
78
Data &B00000000
79
Data &B00000000
80
Data &B00000000
81
Data &B00000000
82

83
1:
84
Data &B00000000
85
Data &B00000000
86
Data &B00000000
87
Data &B00000100
88

89
2:
90
Data &B00000000
91
Data &B00000000
92
Data &B00000100
93
Data &B00000000
94

95
3:
96
Data &B00000000
97
Data &B00000000
98
Data &B00000100
99
Data &B00000100
100

101
4:
102
Data &B00000000
103
Data &B00000100
104
Data &B00000000
105
Data &B00000000
106

107
5:
108
Data &B00000000
109
Data &B00000100
110
Data &B00000000
111
Data &B00000100
112

113
6:
114
Data &B00000000
115
Data &B00000100
116
Data &B00000100
117
Data &B00000000
118

119
7:
120
Data &B00000000
121
Data &B00000100
122
Data &B00000100
123
Data &B00000100
124

125
8:
126
Data &B00000100
127
Data &B00000000
128
Data &B00000000
129
Data &B00000000
130

131
9:
132
Data &B00000100
133
Data &B00000000
134
Data &B00000000
135
Data &B00000100
Gast #2639612
Lesenswert?

Hallo Tony B.

Hab dein posting zufällig gelesen, und mich gewundert.

Das Problem, das du beschreibst scheint mir ganz einfach, ja geradezu 
elementar zu sein. (Muß alledings zugeben, daß ich nichts von avr-basic 
verstehe).

Aus einer Zahl (245) die einzelnen Stellen zu isolieren und in passende 
Werte umzuwandeln.
Verstehe ich das richtig?

Na, dann benutzt man die so erhaltenen Ziffern (z1,...) als INDEX auf 
ein Array. Vielleicht so:
...
Dim Dispwert(10) as Byte
Z1 = Frequenz Mod 10
Dat = Dispwert(Z1)
...

Hilft das?

e.r.f.

p.s.
Sind die zeilen so wie "Dim 0(4) As Byte" legal? Dann wäre der 
Variablenbezeichner eine Ziffer? Scheint mir unwahrscheinlich,
Gast #2639622
Lesenswert?

Hallo Tony B.

Hab's gerade noch mal nachgelesen ...

Die Syntax für Lookup müsste so sein: erst der Index dann das Label.

(Das Label Z1 gibt es bei dir nicht.)


So vielleicht:
....

Tab:
  DATA   $00, $01, 23, ...........

Dat = Lookup(Z1 , Tab)

...


mfg e.r.f.

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