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
Tony B. schrieb: > Und zwar möchte ich mit einem AVR einen Frequenzzähler realisieren. > Bitte Helft mir schnellstmöglich! :) Der Suchbegriff lautet: "reziproker Frequenzzähler"
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
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 :)
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 |
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,
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.