Ich habe aus Nachlass,Hobbyauflösung einige UAA2022 bekommen. Datenblatt ist vorhanden, es handelt sich um ein Treiber für zwei Siebensegmentzeigen mit seriellen Eingang (Schieberegister). Meine Frage,hat schon jeamnd diese eingesetzt u.U. ein lauffähigen Codeschnippsel ? So wie ich das Datenblatt lese,wird VDR auf Low gezogen, wenn CLK von HIGH nach LOW geht werden die Daten in den Ausgang geschoben und somit auf dem Display angezeigt. Sorry für meine dummen Fragen,aber ich bin blutiger Anfänger und versuche nur die IC,s weiter zu nutzen. Klar gibt es bessere Alternativen-aber altes Material erst einmal aufzuarbeiten ist auch eine Möglichkeit.
Andreas S. schrieb: > Fragen,aber ich bin blutiger Anfänger Dann tut es wohl Arduino-speak
1 | sendto2022(int16_t bits) |
2 | {
|
3 | digitalWrite(VDI,0); |
4 | for(uint8_t i=0;i<16;i++) |
5 | {
|
6 | digitalWrite(DATA,bits<0); |
7 | digitalWrite(CLK,1); |
8 | digitalWrite(CLK,0); |
9 | bits<<=1; |
10 | }
|
11 | digitalWrite(VDI,1); |
12 | }
|
Danke MaWin für die Unterstützung ! Mein erster Versuch sieht so aus (bitte nicht steinigen): int CLK = 8; int VDI = 9; int DATA = 7; void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(7, OUTPUT); } void loop() { } sendto2022(int16_t bits) { digitalWrite(VDI,0); for(uint8_t i=0;i<16;i++) { digitalWrite(DATA,bits<0); digitalWrite(CLK,1); digitalWrite(CLK,0); bits<<=1; } digitalWrite(VDI,1); } Der Compiler meckert aber: expected constructor, destructor, or type conversion before ';' token Bin jetzt etwas ratlos ....
Danke noch einmal für den Tipp ! An dass "void" habe ich wirklich nicht gedacht. Keine Fehlermeldung mehr vorhanden,dafür aber auch nur "eine komische Anzeige",welche auch statisch ist und sich nicht ändert. Angezeigt wird eine "22" wobei des mittlere und untere Segment fehlen. Ich denke es wird noch an dem Timing liegen,auch weiß ich nicht was zu erst raus geschoben werden soll (MSB oder LSB). Das Datenblatt ist da auch nicht sonderlich hilfreich. Ich muss am Mo. mal mein LA raus suchen und mir dass genauer anschauen. Am Wochenende reicht die Zeit nur zum Schreiben. Noch eine Idee ?
Andreas S. schrieb: > Noch eine Idee Gesamtcode und Schaltung posten ? Grosse Party veranstalten damit sich das jeder aus dem Forum bei dir vor Ort ansehen kann ?
Die Schaltung ist anbei, bzw. auch aus dem Forum: Beitrag "UAA 2022 Datenblatt" Zum Testen ob ich die Anzeige "zum laufen bekomme" habe ich nur den o.g Code von MaWin weil ich aus den Datenblatt nicht schlau geworden bin. Eine konkrete Anwendung gibt es noch nicht,einfach zum Testen einen Zähler von 0-99 reicht um den Umgang mit den IC und die IC,s selber auf Funktion zu testen bevor ich diese dann final einsetze.
Hallo, wenn du mich fragst sind die Kondensatoren falsch dran und 1nF ist zu klein. Und dann würde ich erstmal mit dem Testeingang alle Segmente testen. Den Strombegrenzer R sicherheitshalber vergrößern. Schau dir nochmal Seite 2 an.
Andreas S. schrieb: > Die Schaltung ist anbei, Aber falsch (schon dort). Andreas S. schrieb: > Angezeigt wird eine "22" 4,10,12,15,23,24 Wenn man 50324 rausschiebt...
Also ich habe dass noch in Ruhe durch gearbeitet und die Verdratung der 7 Segmentanzeige entsprechend dem DB geändert: Display 1 : Segment A nach Pin 15 und Dp nach Pin 8 vom UAA2022 Display 2 : segment A nach Pin 6 und Dp nach Pin 23 vom UAA202 (analog wie auf Seite 2 beschrieben) Auch habe ich die Widerstände und Kondensatoren entprechend geändert. Displaytest zeigt 2 x eine Acht an - dass sollte von der Verdratung passen. Aber noch wie vor keine Änderung,wenn ich z.B. "digitalWrite(DATA,B00001101);" schicke müsste doch eine "3" auf der ersten Stelle angezeigt werden - oder sehe ich dass falsch ?
Andreas S. schrieb: > Änderung,wenn ich z.B. > "digitalWrite(DATA,B00001101);" > schicke müsste doch eine "3" auf der ersten Stelle angezeigt werden Nein. digitalWrite liefert nur 1 bit. Und 1101 ist nicht Segment A,B,C,D,G . Und 8 bit reichen nicht für 16 Segmente. Nicht ohne Grund fragen wir nun zum dritten Mal, was du wirklich für ein Programm benutzt. Wenn du zu faul bist, konkret zu werden, ist nicht zu helfen.
Ich bin nicht zu faul,andernfals würde ich nicht selbst nach einer Lösung suchen und es einfach sein lassen. Danke für die Höflichkeit - es hatt nun mal nicht jeder das Fachwissen um die Lösung aus den berühmten Ärmel zu schütteln ...
Also zeig deinen Code, dann kann dir geholfen werden! Her damit, man will dir helfen!
Hallo, @ TO: Zu beachten gilt das VDR und CLK default bzw. in Ruhezustand auf High Pegel sein müssen. Also setup() anpassen.
1 | /* Bits rausschieben, LSB first */
|
2 | void shiftOut16Bit (uint16_t data) |
3 | {
|
4 | digitalWrite(VDR, LOW); // Chip Select |
5 | |
6 | // in das Schieberegister eintakten //
|
7 | for(uint8_t i=0; i<16; i++) |
8 | {
|
9 | if(data & 0x01) { // nur unterstes Bit betrachten |
10 | digitalWrite(DATA, HIGH); // und Datenleitung entsprechend setzen |
11 | }
|
12 | else { |
13 | digitalWrite(DATA, LOW); |
14 | }
|
15 | |
16 | digitalWrite(CLK, LOW); // Takt erzeugen |
17 | data = data >> 1; // nächstes Bit vorbereiten |
18 | digitalWrite(CLK, HIGH); |
19 | }
|
20 | |
21 | digitalWrite(VDR, HIGH); // Chip Select |
22 | }
|
Ansonsten zeig mal deinen kompletten Code in c Tags bitte damit man das besser lesen kann.
:
Bearbeitet durch User
Kurze Rückmeldung,faul war ich nicht - ich habe es entlich geschafft. Dank den Beispielen hier im Forum und einiger Codeschnippsel im Web. Noch eine dumme Frage: wie setze ich c Tags hier im Forum ? Ich würde den Code hier gern online stellen. Den Dratverhau der fliegenden Verdartung bitte ich zu entschuldigen.
Andreas S. schrieb: > Noch eine dumme Frage: wie setze ich c Tags hier im Forum ? Schau dir doch einmal die Umgebung auf der Seite beim lesen und beim Texte verfassen an. Vielleicht kommste selbst drauf.
Meine Legasthenie aus der Kindheit bricht wieder durch,ich habe es trotzdem geschafft:
1 | int VDR = 8; |
2 | int CLK = 9; |
3 | int Data = 7; |
4 | |
5 | void setup() |
6 | {
|
7 | pinMode(VDR, OUTPUT); |
8 | pinMode(CLK, OUTPUT); |
9 | pinMode(Data, OUTPUT); |
10 | digitalWrite(VDR, HIGH); |
11 | digitalWrite(CLK, HIGH); |
12 | |
13 | UAA2022(0xCF, 0xCF); |
14 | // rechte Anzeige Dp g-->a / linke Anzeige Dp g-->a /0xFD entspricht 6.6.
|
15 | // / 0xCF entspricht 3.3.
|
16 | }
|
17 | |
18 | void loop() |
19 | {
|
20 | |
21 | }
|
22 | |
23 | |
24 | void UAA2022(uint8_t first, uint8_t second) |
25 | {
|
26 | digitalWrite(VDR, LOW); |
27 | for ( int i = 0; i < 8; i++) { |
28 | if ( (first & 0x80) == 0) { |
29 | digitalWrite(Data, LOW); |
30 | }
|
31 | else { |
32 | digitalWrite(Data, HIGH); |
33 | }
|
34 | digitalWrite(CLK, LOW); // toggle clock |
35 | digitalWrite(CLK, HIGH); |
36 | first = first << 1; |
37 | }
|
38 | for ( int i = 0; i < 8; i++) { |
39 | if ( (second & 0x80) == 0) { |
40 | digitalWrite(Data, LOW); |
41 | }
|
42 | else { |
43 | digitalWrite(Data, HIGH); |
44 | }
|
45 | digitalWrite(CLK, LOW); // toggle clock |
46 | digitalWrite(CLK, HIGH); |
47 | second = second << 1; |
48 | }
|
49 | digitalWrite(VDR, HIGH); |
50 | }
|
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.