Forum: Mikrocontroller und Digitale Elektronik SAA1064-Probleme


von Sven S. (schwerminator)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche mich gerade am SAA1064 mit einem Mega16. Da ich keine 
Beispiele in C für diesen Chip im Internet gefunden habe, habe ich ein 
wenig in die BASCOM-Programme geschaut und versucht zu kopieren. 
Außerdem habe ich das Datenblatt des SAA1064 studiert. Auf den 
7-Segmentern wird aber rein gar nichts angezeigt...
Hier der C-Code:
1
#define F_CPU 8000000UL
2
3
#include "i2cmaster.h"
4
5
void main(void){
6
  i2c_init();
7
8
  i2c_start(0x70);  //Adresse 0x70, weil ADR auf Vee liegt
9
  i2c_write(0x00);  //Instructionbyte ist 0xff
10
  i2c_write(0x8F);  //all segment outputs are switched-on for segment test (S.4 Datenblatt)
11
  
12
  i2c_write(0x00);  //Dummies
13
  i2c_write(0x00);
14
  i2c_write(0x00);
15
  i2c_write(0x00);
16
  
17
  i2c_stop();  
18
}
Weiß jemand woran es liegen könnte?

von Εrnst B. (ernst)


Lesenswert?

Hab hier zwei SAA1064 an nem I2C Bus (USI von nem Tiny2313)
Allerdings keine 7Segment-Anzeigen dran, sondern je 16 Zweifarb-LEDS 
(rot/grün)
Code schaut so aus (aufbauend auf der USI-TWI Appnote von Atmel):
1
 USI_TWI_Master_Initialise();
2
 ...
3
4
  while (1) {
5
...
6
       messageBuf[0]=0x70;
7
        messageBuf[1]=0x00;
8
9
/*          messageBuf[2]=0x27; Mittelhell */
10
          messageBuf[2]=0x37;
11
/*          messageBuf[2]=0x17; Dunkel */
12
13
        messageBuf[3] = current_green.as_array[0];
14
        messageBuf[4] = current_red.as_array[0];
15
        messageBuf[5] = current_green.as_array[1];
16
        messageBuf[6] = current_red.as_array[1];
17
18
        USI_TWI_Start_Transceiver_With_Data(messageBuf,7);
19
20
        messageBuf[0]=0x72;
21
22
        messageBuf[3] = current_green.as_array[2];
23
        messageBuf[4] = current_red.as_array[2];
24
        messageBuf[5] = current_green.as_array[3];
25
        messageBuf[6] = current_red.as_array[3];
26
27
28
        USI_TWI_Start_Transceiver_With_Data(messageBuf,7);
29
30
31
...
32
}

Wobei USI_TWI_Start_Transceiver_With_Data auch nix anderes macht als 
START, 7 Datenbytes, STOP

von Εrnst B. (ernst)


Lesenswert?

ach ja, dein Control-Byte 0x8F ist falsch, der Test-Mode bei max. Strom 
wäre 0x7F.

von Sven S. (schwerminator)


Lesenswert?

Hallo,
könntest du die Funktion USI_TWI_Start_Transceiver_With_Data() kurz 
posten, ich finde die passende App-Note nicht.
Braucht man eigendlich die Pullup-Widerstände immer? Kanns daran liegen?

von let (Gast)


Lesenswert?

Hast du schon probiert die letzten vier Bytes nicht zu schicken?
Wenn der Testmodus (habe ihn nie benutzt) lediglich die Bits für die
einzelnen Segmente auf '1' setzt, löscht du sie anschließend wieder.

Ansonsten sieht das Programm gut aus. Du konfigurierst den Chip
für den 'dynamic mode'. Ist der Kondensator Cext drin? Pullups in
den I2C Leitungen? 7-Segmentanzeigen wirklich mit gemeinsamer Anode?
Sorry, aber irgendsowas muß es sein. Der SAA ist recht gutmütig.

 - Michael

von let (Gast)


Lesenswert?

PS: Einige Anzeigen (v.a. die roten) lassen sich ohne 
Kontrastfilterscheibe nicht gut ablesen. Vielleicht geht es ja und du 
siehst es nur nicht ;).

von Sven S. (schwerminator)


Lesenswert?

Hallo,
es waren doch tatsächlich die Pullup-Widerstände. Jetzt habe ich je 
2,7kOhm drin und es läuft. Hatte ich ehrlichgesagt unterschätzt, weil 
ein Forumsmitglied in irgendeinem Beitrag behauptet hatte, dass man 
diese nicht brauchen würde...
Was ich aber grad feststelle ist, dass auf maximaler Helligkeit und 
allen angeschalteten Segmenten die Transistoren und der SAA1064 relativ 
schnell warm werden, naja liegt wohl in der Natur der Sache.

Danke, Sven

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.