Forum: Mikrocontroller und Digitale Elektronik SAA1064 -- I2C Probleme


von Alexander U. (alexander_u)


Lesenswert?

Hi,

Ich habe ein kleines Problem mit der Ansteuerung von 4 7-Segmentanzeigen 
mittels eines SAA1064 Treibers.
1
    
2
    i2c_start();              
3
    i2c_write(0x70);
4
    i2c_write(0x00);
5
    i2c_write(0b10010111);
6
7
    i2c_write(0b00000110);
8
    i2c_write(0b01011011);
9
    i2c_write(0b01001111);
10
    i2c_write(0b01100110);
11
       
12
    i2c_stop();

Die Anzeige soll testweise 1-2-3-4 anzeigen. Allerdings wird nur die 
erste Stelle angezeigt, dir anderen bleiben dunkel. Wenn ich das 
Test-bit 1 setze, leuchten aber alle Digits.

Als Mikrocontroller verwende ich einen PIC18F4550. Als 
Programmiersprache C (MPLAB + CCS).

Weiss jemand wo der Fehler liegen kann?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1
    i2c_start();              
2
    i2c_write(0x70); // Adresse WRITE des SAA1064
3
    i2c_write(0x00); // Subadressing Start mit 0
4
5
    // Subadressing 0 => Daten für Control Register
6
    // C7 C6 C5 C4 C3 C2 C1 C0
7
    // 1  0  0  1  0  1  1  1
8
    // +---> don't care   
9
    //    +--> keine +12mA
10
    //       +--> keine +6mA
11
    //          +--> +3mA
12
    //             +--> no test mode
13
    //                +--> Digits 2/4 not blanked
14
    //                   +--> Digits 1/3 not blanked
15
    //                      +--> dynamic mode
16
    i2c_write(0b10010111);
17
18
    // (Subadressing autoincrement) => Daten für Digits
19
    i2c_write(0b00000110); // Digit 1
20
    i2c_write(0b01011011); // Digit 2
21
    i2c_write(0b01001111); // Digit 3
22
    i2c_write(0b01100110); // Digit 4
23
       
24
    i2c_stop();

Code sieht richtig aus.

Ich würde die externe Beschaltung des ICs prüfen, ob das Multiplex 
arbeiten kann (Stichwort C_EXT). Der Code oben verlässt sich darauf 
(dynamic Mode).

von Dieter S. (dolivo)


Lesenswert?

ich programmiere zwar in BASCOM, aber das spielt hier wohl keine Rolle. 
Mein Code für die Ansteuerung sieht genauso aus (nur Bit7 des control 
bytes ist bei mir 0, was aber lt. Datenblatt egal ist). Deswegen tippe 
ich auch auf einen Hardwarefehler.

von Alexander U. (alexander_u)


Lesenswert?

War in der tat ein Hardwarefehler.
Da ich die Platine an einigen Stellen wegen Fehler provisorisch 
ausgebessert hatte, lag plötzlich ein Pull-up Widerstand nicht mehr auf 
+5V. Grade die Beschaltung des SAA1064 überprüft, Fehler festgestellt, 
behoben, funktioniert jetzt tip top :D.

Danke euch,

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
Noch kein Account? Hier anmelden.