PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SAA1064 ansteuern ?



Blamaster
26.09.2009, 20:40
Hi,

ich habe eine Frage zum ansteuern Des SAA1064.

Aufgebaut habe ich die Schaltung wie im Datenblatt beschrieben als Static Mode (Also für 2 Anzeigen).

Der Code mit dem ich versuche, das ganze anzusteuern sieht so aus:



I2cstart
I2cwbyte &H70
I2cwbyte 0
I2cwbyte &B1111000
I2cstop


Wenn ich das Protokoll richtig verstanden habe müsste doch nun folgendes gesetzt werden:

Static Mode = an
Die beiden anzeigen = gelöscht
Alle Segmente = an
Und volle Leuchtkraft

Stimmt das so ? Bzw. stimmt die Adresse &H70 für den Static Mode, wenn ADR auf Gnd liegt ?

Ich hoffe mir kann jemand helfen.

mfg Yannic

021aet04
26.09.2009, 21:35
Im DB steht auf Seite 6

C0 = 0 static mode, i.e. continuous display of digits 1 and 2
C0 = 1 dynamic mode, i.e. alternating display of digit 1 + 3 and 2 + 4
C1 = 0/1 digits 1 + 3 are blanked/not blanked
C2 = 0/1 digits 2 + 4 are blanked/not blanked
C3 = 1 all segment outputs are switched-on for segment test(1)
C4 = 1 adds 3 mA to segment output current
C5 = 1 adds 6 mA to segment output current
C6 = 1 adds 12 mA to segment output current
wobei es so anfängt

x C6 C5 C4 C3 C2 C1 C0

Was statt dem x steht ist egal

Wenn du bei max. Helligkeit den Segmenttest im Staticmode haben willst musst du &B01111110 schreiben.

Es ist für die Adresse egal, welchen Mode du nimmst. Wenn du den ADR Eingang auf GND gelegt hast ist die Adresse &H70

Blamaster
26.09.2009, 21:52
Hi,

ich habe jetzt folgendes code probiert:



$regfile = "m16def.dat"

$crystal = 16000000
$baud = 9600



I2cstart
I2cwbyte &H70
I2cwbyte 0

I2cwbyte &B01111110

I2cstop


Passiert leider garnichts. :(

Müsste es mit dem obigen code so funktionieren ?

Kann es sein das für I2c beim Mega 16 irgendwelche fuses gesetzt werden müssen, bzw. nicht gesetzt sein dürfen ?

mfg Yannic

021aet04
26.09.2009, 22:44
Bei mir funktioniert die Anzeige mit dem Code. Habe es mit C geschrieben und für einen R8C. Das ist mein Code
i2c_start();
i2c_send(0x70);
i2c_send(0x00);
i2c_send(01111110);
i2c_stop();

Das bedeutet, dass du entweder ein Problem mit der Initialisierung des I2C ist (weiß aber nicht ob und wie initialisiert werden muss) oder mit der Hardware, z.B. schlechte Verbindung oder Ähnliches. Wollte ein Bild hochladen aber die Seite vom Bildhoster streikt gerade. Wenn du es willst kann ich es später noch versuchen.

Blamaster
26.09.2009, 22:55
Hi,

Danke hätte Interesse an einem Bild.

Gibt es denn beim Mega16 fuses die die I2c beeinflussen können ?

mfg Yannic

021aet04
26.09.2009, 23:11
Hier ist das Bild http://j68.img-up.net/?up=DSCN3006zmjdo.JPG
Beim Mega16 gibt es normalerweiße keine Fuses für I2C.

PS: Es leuchten deswegen 2 Anzeigen, da ich sie im Static Mode angesteuert habe, kann sie aber auch im Dynamic Mode ansteuern.

Blamaster
26.09.2009, 23:19
Ich habe so das ungute Gefühl das mir irgendwie der saa1064 abgeraucht ist.

Muss ich mir nochmal einen neuen beschaffen und einen zweiten Test starten :)

mfg Yannic

021aet04
26.09.2009, 23:24
Hast du den SAA gesockelt oder fix verlötet? Wenn du vermutest, dass der abgeraucht ist, weißt du wie? Löten, falsch angeschlossen,...
Hast du ein Messgerät, mit dem du Frequenzen messen kannst? Optimal wäre ein Logikanalyzer (hast du vermutlich nicht) oder ein Oszilloskop.

Blamaster
27.09.2009, 09:32
Hi,

nur ein Multimeter, welches Frequenz 10/100 Hz/1/10/100 kHz, ± 2 % messen kann.

das ganze ist momentan auf einem steckbrett und da tauchte auch das Problem auf.

Ich wusste nicht, dass die X Reihe trotz unterteilungen miteinander verbunden ist und hatte somit für kurze zeit +5V Gnd Sda Scl zusammengeschlossen.

mfg Yannic

021aet04
27.09.2009, 09:49
Dann sollte normalerweiße nichts passieren. Du könntest den Takt auf der SCL Leitung messen (mit Frequenzmessung). Hast du einen 2ten Mega16? Vielleicht ist der hinüber. Sicherheitshalber einen Mega und einen SAA bestellen.

Blamaster
29.10.2009, 21:27
Hi,

heute kam die Lieferung an.

Einen neuen SAA1064 eingesteckt nichts geht :-s

Um mal zu vollständig zu zeigen was momentan an Hardware und was an Software nicht klappt.

Hier der Schaltplan zur Platine mit dem SAA:

http://img249.imageshack.us/img249/798/spsegm.th.png (http://img249.imageshack.us/i/spsegm.png/)

Der Mega16 sitzt auf einem Steckbrett mit Spannungsregler, externem Quarz und einer Led zum Test ob das Programm im Controller überhaupt anläuft.

Hier der Bascom Code mit dem ich es versucht habe:



$regfile = "m16def.dat"

$crystal = 16000000
$baud = 9600

Config Scl = Portc.0
Config Sda = Portc.1

Config Porta.1 = Output

Waitms 100

Porta.1 = 1

I2cinit
I2cstart
I2cwbyte &H70
I2cwbyte 0

I2cwbyte &B01111110

I2cstop


Die Led leuchtet (Porta.1 = 1) Programm im Controller läuft also.

Hat jemand eine Idee woran es liegen kann das sich sonst nichts tut ?

mfg Yannic

H.A.R.R.Y.
30.10.2009, 09:20
Könnte es sein, daß
a) Dir die Pullup-Widerstände auf SDA und SCL fehlen? Größenordnung 10kOhm. 4k7 geht auch. Im Schaltplan ist nixhts zu sehen und die internen Pullups der AVRs werden im I²C-Modus gesperrt! Sind eh zu hochohmig dafür.
b) die I²C-Frequenz zu hoch ist? Maximal 400kHz, normalerweise. Was kann der SAA1064? Wo wird die im Bascom eingestellt? Reicht die Definition $crystal = ...?
c) die Definition von Sda und Scl Tipfehler aufweist?

Blamaster
30.10.2009, 16:37
Hi,

Danke für die Hilfe.

zu a) Pullups hab ich keine sind die nötig ?
zu b) Glaube nicht das es daran liegt
zu c) Der Code steht oben wenn da keine Tippfehler drin sind dann nicht. (Ich konnte keinen Tippfehler finden)

mfg Yannic

Blamaster
30.10.2009, 18:01
Hi,

es lag an den fehlenden Pullups. Hatte vorher noch nicht mit i2c gearbeitet ](*,)

Jetzt läuft alles :)

Danke für die Hilfe.

mfg Yannic