synvox: VIELEN DANK! Du bist der Herr der TLCs
hatte den REXT an +5V gelötet und nicht an GND. Was für ein blöder Fehler.
Jetzt geht alles, auch die Error-Register haben dauer-0-zustand.
Nochmal vielen Dank.
Liebe Grüße,
jul
synvox: VIELEN DANK! Du bist der Herr der TLCs
hatte den REXT an +5V gelötet und nicht an GND. Was für ein blöder Fehler.
Jetzt geht alles, auch die Error-Register haben dauer-0-zustand.
Nochmal vielen Dank.
Liebe Grüße,
jul
Also momentan ist immer eins der Error-Register auf 255 und manchmal auch beide. Scheint relativ unregelmäßig zu sein. Habe auch noch nicht ganz verstanden was genau die Error-Register anzeigen.
Der REXT ist 1k groß. Weiterhin habe ich einen 100nF Kondensator über Masse am REXT Pin.
Die LEDs (Standard 20mA LEDs) sind mit der Kathode am TLC59116 und mit der Anode an 5V.
Versorgungsspannung am TLC59116 sind auch 5V.
Misst man mit dem Oszi an der Kathode der LED hat man eine Gleichspannung mit +3,32V mit ein bisschen Rauschen (Vpp ca. 100mV) drauf.
EDIT: Habe gerade nochmal getestet was passiert, wenn man die Helligkeit ändert.
Steht die Helligkeit auf 0 dann gehen die Error-Register auch auf 0.
Steht die Helligkeit auf einem Wert > 0 geht der Spass mit den Error-Registern wieder los.
An der Spannung von +3.32V ändert sich aber nicht.
Viele Grüße,
jul
Hey,
die Erklärung war super. Danke.
Das Auslesen funktioniert jetzt einwandfrei. Leider gehen meine LEDs immernoch nicht an
Bin hier total am verzweifeln, hab echt keine Ahnung mehr woran es liegen könnte...
Hier nochmal der Code und das was der Controller ausgibt:
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600
$lib "i2c_twi.lbx"
Config Twi = 400000
Twcr = &B00000100
'Tlc Adressen
Const All = &HD0
Const All_reset = &HD6
Const Tlc_1 = &HC2
Const Tlc_1_read = &HC3
Const Helligkeit = 187
'Variablen
Dim X As Byte
Dim X2 As Byte
Dim Eingang(31) As Byte
'Reset
I2cstart
I2cwbyte All_reset
I2cwbyte &HA5
I2cwbyte &H5A
I2cstop
Print "Reset: Done"
Print Err
Waitms 20
'Initialisierung
I2cstart
I2cwbyte All
I2cwbyte &B10000000
I2cwbyte &B00000001
I2cwbyte &B00000000
For X = 0 To 15
I2cwbyte 0
Next
I2cwbyte 255
I2cwbyte 0
For X = 0 To 3
I2cwbyte &B11111111
Next
I2cstop
Waitms 20
Print "Init: Done"
Print Err
'Auslesen
I2cstart
I2cwbyte Tlc_1
I2cwbyte &B10000000
I2cstart
I2cwbyte Tlc_1_read
For X = 1 To 30
I2crbyte Eingang(x) , Ack
Next
I2crbyte Eingang(31) , Nack
I2cstop
Print "Register: "
For X = 1 To 31
X2 = X - 1
Print Hex(x2) ; ": " ; Eingang(x)
Next
Wait 3
'Programm
Do
I2cstart
I2cwbyte All
I2cwbyte &B10100010
For X = 0 To 15
I2cwbyte Helligkeit
Next
I2cstop
Print "Send"
Print Err
Waitms 500
I2cstart
I2cwbyte Tlc_1
I2cwbyte &B10000000
I2cstart
I2cwbyte Tlc_1_read
For X = 1 To 30
I2crbyte Eingang(x) , Ack
Next
I2crbyte Eingang(31) , Nack
I2cstop
Print "Register:"
For X = 1 To 31
X2 = X - 1
Print Hex(x2) ; ": " ; Eingang(x)
Next
Wait 3
Loop
End
Alles anzeigen
Init: Done
0
Register:
00: 129
01: 0
02: 0
03: 0
04: 0
05: 0
06: 0
07: 0
08: 0
09: 0
0A: 0
0B: 0
0C: 0
0D: 0
0E: 0
0F: 0
10: 0
11: 0
12: 255
13: 0
14: 255
15: 255
16: 255
17: 255
18: 210
19: 212
1A: 216
1B: 208
1C: 255
1D: 0
1E: 0
Send
0
Register:
00: 129
01: 0
02: 187
03: 187
04: 187
05: 187
06: 187
07: 187
08: 187
09: 187
0A: 187
0B: 187
0C: 187
0D: 187
0E: 187
0F: 187
10: 187
11: 187
12: 255
13: 0
14: 255
15: 255
16: 255
17: 255
18: 210
19: 212
1A: 216
1B: 208
1C: 255
1D: 255
1E: 255
vielen Dank für den Tip und die schnelle Antwort. Werde das sofort testen
was genau bedeutet eigentlich ack?
viele Grüße
jul
Liebe Community,
habe ein Problem mit der Kommunikation zwischen einem Atmel Mega16 und
einem TLC59116 (Pwm LED Controller) per I²C.
Wenn ich Daten schicke meldet der Bus keine Fehler.
Im letzten Programmteil lese ich nochmal alle Register aus und die haben
alle den Wert 255.
Was mache ich falsch?? Hoffe Ihr könnt mir weiter helfen...
Schonmal im Vorraus danke für alle Hilfe.
Hier noch der Programmcode (Bascom):
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600
$lib "i2c_twi.lbx"
Config Twi = 400000
Twcr = &B00000100
'Tlc Adressen
Const All = &HD0
Const All_reset = &HD6
Const Tlc_1 = &HC2
Const Tlc_1_read = &HC3
Const Helligkeit = 187
'Variablen
Dim X As Byte
Dim Eingang(32) As Byte
'Reset
I2cstart
I2cwbyte All_reset
I2cwbyte &HA5
I2cwbyte &H5A
I2cstop
Print "Reset: Done"
Print Err
Waitms 20
'Initialisierung
I2cstart
I2cwbyte All
I2cwbyte &B10000000
I2cwbyte &B00000001
I2cwbyte &B00000000
For X = 0 To 15
I2cwbyte 0
Next
I2cwbyte 255
I2cwbyte 0
For X = 0 To 3
I2cwbyte &B11111111
Next
I2cstop
Waitms 20
Print "Init: Done"
Print Err
Do
I2cstart
I2cwbyte Tlc_1
I2cwbyte &B10100010
For X = 0 To 15
I2cwbyte Helligkeit
Next
I2cstop
Print "Send"
Print Err
Waitms 500
I2cstart
I2cwbyte Tlc_1_read
I2cwbyte &B10000000
For X = 1 To 32
I2crbyte Eingang(x) , Nack
Next
I2cstop
Print "Register: "
For X = 1 To 32
Print X ; ": " ; Eingang(x)
Next
Wait 3
Loop
End
hai,
erstmal großes Lob an den Autor. Das Projekt ist echt sehr gut geworden!
habe ein ähnliches Projekt vor, nur würde ich gern die LEDs von der Steuerung trennen. Meint Ihr, dass man zwischen TLC und LEDs 3m Leitung legen kann, ohne dass mir die 97KHz PWM einen Strich durch die Rechnung macht? wenn nein, warum nicht?
Grüße der Giraffe
Wenn eine LED niederohmig ausfällt geht nur die eine LED aus und die anderen laufen weiter ohne Schaden zu nehmen.
Bei einer Parallelschaltung werden die anderen LEDs hingegen überlastet wenn eine LED niederohmig ausfällt und nicht jede LED mit einem eigenen Widerstand angeschlossen ist.
Ergo: Wenn es kein Problem ist die Spannung für eine Reihenschaltung bereitzustellen ist diese Variante immer zu bevorzugen.
völliger Schwachsinn!
Jetzt mal richtige Physik Grundlagen:
wenn in einer Reihenschaltung eine LED niederohmig wird, ist es als wäre sie nicht da, also hat man für die übrig gebliebenen LED zu viel Spannung, was bedeutet, dass sie alle kaputt gehen!
Wenn in einer Parallelschaltung eine LED niederohmig wird und es KEINEN Vorwiderstand gibt, gibt es einen Kurzschluss zwischen Versorgung + und Versorgung -, was lediglich zur Folge hat, dass unsere Spannungsquelle kaputt geht.
Wird hingegen in einer Parallelschaltung MIT Vorwiderständen eine LED niederohmig, so passiert NICHTS.
Daher ist in jedem Falle die Parallelschaltung mit Vorwiderstand vor jeder LED die beste Lösung!
Grüße,
Giraffe
hai,
Als Controller würde ich Dir auch einen Atmel Tiny empfehlen. Bei 1MHz Taktrate sollten auch locker die 10 Software-PWMs drin sein. Wenn Du allerdings mal erweitern willst solltest Du einen Atmel Mega 8 benutzten, den gibts sogar in einer 16MHz Version, allerdings bräuchtest Du dann wieder einen Oszillator dazu.
Zum Thema µC gibts HIER einen guten Grundlagen-Artikel, wo auch alles zum Thema Spannungsversorgung und Filterkondensatoren erklärt wird.
In welcher Programmiersprache willst Du das ganze eigentlich umsetzen?
Zur Ansteuerung der LEDs: An einem Transistor kommst Du nicht vorbei. Wenn Du auf lautes Klappern stehst, kannst Du auch Relais verwenden, aber Du brauchst definitv ein Leistungsteil, da Dir sonst der µC früher oder später Hilferufe per Rauchzeichen gibt.
Grüße,
Giraffe