aus Nachlass UAA2022 bekommen

Gast #7158142
Lesenswert?

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.
Angehängte Dateien:
Gast #7158154
Lesenswert?

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
}
Gast #7158466
Lesenswert?

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 ....
Gast #7158492
Lesenswert?

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 ?
Gast #7158532
Lesenswert?

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.
Angehängte Dateien:
Gast #7159159
Lesenswert?

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 ?
Gast #7159171
Lesenswert?

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.
Gast #7159183
Lesenswert?

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 ...
#7159260
Lesenswert?

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.
Gast #7160861
Lesenswert?

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.
Angehängte Dateien:
Gast #7160913
Lesenswert?

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
}

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