www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED-Treiber MAX6956 C-Code


Autor: Martin J. (bluematrix) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo Euch allen,...

Ich habe auch ein Problem mit meinem I2C-Bus.
Mein ATmega16 ist Master und hat einen MAX6956 (LED Treiber von Maxim) 
als Slave. Das programm wird komplett ausgeführt, so dass keine 
Fehlermeldung kommt. Jedoch bleiben trotzdem alle Leds dunkel.

Verdrahtet ist alles wie auf der vorletzten seite im Datenbaltt
beschrieben

Leider ist das datenblatt mit seinen zig registern etwas unduchsichtig 
gestaltet, finde ich jedenfalls.

Kannst du mir jemand dabei helfen,
da ich den Treiber tringend bräuchte.


Vielen Danke martin

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Panik die vielen Register schrecken erstmal ab, aber man braucht 
nur die wenigsten. Der Baustein ist eine "eierlegende Wollmilchsau". Wo 
hast du den Baustein denn her (Distributor)?

Also du willst den Baustein als LED Treiber einsetzen, also mußt du 
erstmal die Ports dementsprechend konfigurieren. Dazu werden im Register 
0x09..0x0F (alles auf 0x00 setzen) sowie 0x24..0x3F (alle auf 0x01) die 
Ports ensprechend konfiguriert. Jetzt muß du noch die Betriebsmodi 
konfigurieren. Du kannst dir aussuchen, ob du den Strom für alle LEDs 
gleichzeitig (Bit 6 im Register 0x04). Wenn du den Strom global regelst, 
solltest du in Register 0x02 einen Wert zw. 0..16 eintragen. Wenn du die 
Werte einzeln regelst, kannst du über die Register 0x12..0x1F auf 
jeweils 2 Ports (45,67,..) zugreifen. Die oberen 4 Bits sind der Wert 
für den einen Port, die untern 4 Bits für den anderen Port. Jetzt mußt 
du nur noch im Register 0x04 den Baustein aus dem Shutdown-Modus holen 
(Bit 0 auf eins). Also nochmal kurz:

Jeder Port wird einzeln geregelt:
Reg. 0x09..0x0F auf 0x00: LED-Treiber-Modus
Reg. 0x24..0x3F auf 0x01: LED-Treiber-Modus (Register Bit)
Reg. 0x12..0x1F auf 0xXY: X=0..16, Y=0..16 -> Strom einstellen
Reg. 0x04 auf 0x41: Einzel-Strom + Normal-Mode

Strom wird global geregelt:
Reg. 0x09..0x0F auf 0x00: LED-Treiber-Modus
Reg. 0x24..0x3F auf 0x01: LED-Treiber-Modus (Register Bit)
Reg. 0x02 auf 0x0X: X=0..16 -> globalen Strom einstellen
Reg. 0x04 auf 0x01: Globaler-Strom + Normal-Mode

fertig...viel Spaß ;)

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.: Hast du alle LED-Anoden zusammengeschlossen? Die Kathoden kommen 
an den Baustein...

Autor: Martin J. (bluematrix) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo...

also ich hab es wie im anhang dargestellt angeschlossen.

Ich muss noch dazu sagen ich beschäftig mich erst seit kurzer Zeit Mit 
Microcontrollern und auch nur mit der Programmierung in C.

danke erst mal

Autor: Jan Enenkel (Firma: Austriamicrosystems AG) (jankey)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dir fehlen:
- Schematic
- Sourcecode

damit dir irgendjemand helfen kann

auf den ersten blick tipp ich mal du hast die I2c nicht richig 
implementiert, vl. auch nur eine falsch I2C Addresse.

lg

Autor: Jan Enenkel (Firma: Austriamicrosystems AG) (jankey)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aaahhh, das ging ja flott,

poste doch bitte den code :)

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnt Ihr mal über mein Programm drüberschauen,
ob die Programmierung des I2C überhaut richtig ist.

Ich hab den Quellcode aus dem Datenblatt vom ATmega16 auf seite 185 
übernommen.

Außerdem hatte ich Probleme mit den Variablen
char START  =0x08;
char MT_SLA_ACK  =0x18;
char MT_DATA_ACK  =0x28;

die werte hab ich dann in einem anderem Forum gefunden.

Autor: Martin J. (bluematrix) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Code ist ganz oben in meinem ersten Beitrag ...
aber hier nochmal im anhang

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal die Inititalisierungsroutine direkt in den Beitrag, z.B. 
so
Hier deine Routine...

Ich hab hier keine Rar-entpacker...

Gruß
Mario

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>
#include <inttypes.h>
#include "belegung.h"

//##########################################################
char START  =0x08;
char MT_SLA_ACK  =0x18;
char MT_DATA_ACK  =0x28;
int Fehler        =0;

//---------------------------------------------------------
void ERROR(void)
  {
  AnzeigePORT  |= (1<<Fehler);
  Fehler++;
  }
//#########################################################
  DATENPORT_DDR   = 0b11111111;
  AnzeigePORT_DDR  = 0b11111111;
  AnzeigePORT  = 0b00000000;
  DATENPORT    = 0b11111111;
//-----------------------------------------------
void I2CWrite(unsigned int SLA_W, unsigned int COMMAND, unsigned int
DATA)
{
  TWCR  = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  while (!(TWCR & (1<<TWINT)))
    ;

  if ((TWSR & 0xF8) != START)
    {
    ERROR();
    }
  //---------------------------------------------SLAVE Adress
  TWDR = SLA_W;
  while (!(TWCR & (1<<TWINT)))
    ;
  if ((TWSR & 0xF8) != MT_SLA_ACK)
    {                ERROR();
    }
  //---------------------------------------------COMMAND
  TWDR = COMMAND;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)))
    ;
  if ((TWSR & 0xF8) != MT_DATA_ACK)
    {
    ERROR();
    }
  //-----------------------------------------------DATA
  TWDR = DATA;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)))
    ;

  if ((TWSR & 0xF8) != MT_DATA_ACK)
    {
    ERROR();
    }
  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}

//-------------------------------------------------------
Programmschleife
  while(1)
  {
  I2CWrite(0x80, 0x12, 0x07); // Set a half port P4 constant current
  I2CWrite(0x80, 0x09, 0xA8); // Set P4 to LED drive mode
  I2CWrite(0x80, 0x04, 0x01); // Set the shutdown/run
  }
}

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich überblicke die I2C-Routine nicht so schnell, es sieht aber sehr nach 
"Spaghetti-Code" aus. Als erstes empfehle ich dir auf eine I2C-library 
zurückzugreifen, z.b. von Peter Fleury (http://jump.to/fleury). Unter 
"AVR Software - libraries" findest du das "I2C Master Interface". 
Einfach runterladen, twimaster.c und i2cmaster.h einbinden. Online 
Manual durchlesen und fertig. Danch würde ich schauen ob die 
I2C-slave-Adresse des Bausteins richtig ist (Pin AD0 und AD1 
nachmessen). AD0 und AD1 müßten bei beide auf GND sein laut deinem Code 
(Adresse 0x80).

Ein bisschen komisch ist, das du in der Hauptschleife den Baustein immer 
wieder initialisierst, Normalerweise läuft das so ab:
void main()
{
  I2CWrite(0x80, 0x12, 0x07); // Set a half port P4 constant current
  I2CWrite(0x80, 0x09, 0xA8); // Set P4 to LED drive mode
  I2CWrite(0x80, 0x04, 0x01); // Set the shutdown/run

  while(1)
  {
     // mach irgendwas oder auch nicht...
  }
}

Gruß
Mario

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hattest außerdem gefragt was
char START  =0x08;
char MT_SLA_ACK  =0x18;
char MT_DATA_ACK  =0x28;
bedeuten.
Mit diesen defines setzt man die Start-condition bzw. das Acknowledge 
bzw. fragt das slace acknowledge ab. In der library brauchst du dich 
darum nicht mehr kümmern. Das würde man dann so machen:
I2CWrite(uint8_t ADDR, uint8_t CMD, uint8_t DATA)
{
     i2c_start_wait(ADDR+I2C_WRITE); // set device address and write mode
     i2c_write(COMMAND);             // write command
     i2c_write(DATA);                // write data
     i2c_stop();                     // set stop conditon = release bus
}

void main()
{
   i2c_init();                       // initialize I2C library
   
   I2CWrite(0x80, 0x12, 0x07); // Set a half port P4 constant current
   I2CWrite(0x80, 0x09, 0xA8); // Set P4 to LED drive mode
   I2CWrite(0x80, 0x04, 0x01); // Set the shutdown/run

   while(1)
   { 
       // tu was
   }
}

Ob die Register richt gesetzt mußt noch mal in meinen oberen Post 
gucken...

Gruß Mario

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne jetzt deinen ganzen Code durchzuschauen, überprüfe mal ob du die 
LEDs überhaupt angeschaltet hast.
Ich habe mal mit dem MAX6957 gemacht (der gleiche Baustein mit SPI) und 
hatte auch alles schön initialisiert, hatte aber vergessen die LEDs 
anzuschalten. Du musst demnach die Ausgänge als LEDs initialisieren, 
einen Wert für die LED Helligkeit setzen UND die LEDs einschalten

Gruß
Kai

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kai Franke und  Martin Juha,

wo habt ihr denn die Bausteine bezogen? Samples?

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich denke richtig wäre die Initialisierung so:
// Port 12..21 als LED-Treiber konfigurieren
I2CWrite(0x80, 0x0A, 0x00);  // Port 12..15 als LED-Treiber
I2CWrite(0x80, 0x0B, 0x00);  // Port 16..19 als LED-Treiber
I2CWrite(0x80, 0x0C, 0xA0);  // Port 20..21 als LED-Treiber (22..23 Input)

// Port 12..21 einschalten (Register bit)
I2CWrite(0x80, 0x2C, 0x01);  // LED Port 12 einschalten
I2CWrite(0x80, 0x2D, 0x01);  // LED Port 13 einschalten
I2CWrite(0x80, 0x2E, 0x01);  // LED Port 14 einschalten
I2CWrite(0x80, 0x2F, 0x01);  // LED Port 15 einschalten
I2CWrite(0x80, 0x30, 0x01);  // LED Port 16 einschalten
I2CWrite(0x80, 0x31, 0x01);  // LED Port 17 einschalten
I2CWrite(0x80, 0x32, 0x01);  // LED Port 18 einschalten
I2CWrite(0x80, 0x33, 0x01);  // LED Port 19 einschalten
I2CWrite(0x80, 0x34, 0x01);  // LED Port 20 einschalten
I2CWrite(0x80, 0x35, 0x01);  // LED Port 21 einschalten

// Port 12..21 Strom einstellen
I2CWrite(0x80, 0x16, 0x88);  // Strom Port 12..13 auf Mitte (13.5mA)
I2CWrite(0x80, 0x17, 0x88);  // Strom Port 14..15 auf Mitte (13.5mA)
I2CWrite(0x80, 0x18, 0x88);  // Strom Port 16..17 auf Mitte (13.5mA)
I2CWrite(0x80, 0x19, 0x88);  // Strom Port 18..19 auf Mitte (13.5mA)
I2CWrite(0x80, 0x1A, 0x88);  // Strom Port 20..21 auf Mitte (13.5mA)

// Global Settings
I2CWrite(0x80, 0x04, 0x41);  // Einzel Strom + Normal Mode

// fertig...

so müsste es gehen...

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, ich habe die Treiber gesampled, war allerdings nicht wirklich 
zufrieden damit. Die ganzen Register machen einem das Leben sehr schwer, 
das Programm langsam und wenn man sie kaufen will (digikey) kann man 
auch gleich einen Goldesel mitbestellen...
Ich bin daher auf die TLC5922 umgestiegen, die wesentlich billiger sind 
und auch viel einfacher und SCHNELLER anzusteuern sind. Dort gibt es 
keine Register, man schiebt einfach immer alle Helligkeitswerte in das 
Register. Noch ein großer Vorteil ist, dass man bei den TLCs mit dem 
Helligkeitswert 0 die LED tatsächlich auch ausschaltet. Bei den 
MAX6956/57 ist das nicht so! Die Helligkeit 0 ist dort 1/16 der 
maximalen Helligkeit, was mir ebenfalls nicht gefallen hat...

Gruß
Kai

PS: Die Initialisierung scheint vollständig

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kai Franke:

gibt es den auch mit I2C?

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kai Franke:
Kannst du mal kurz beschreiben wie du den Baustein ansteuerst?

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
und erst mal vielen Danke für die schnelle hilfe und werd das heut abend 
noch alles probieren.
Ich wollt keine fertige library nehmen, da ich ja uach verstehen will 
was das program macht und all die funktionn, die ich nicht brauch muss 
ich ja nicht mit auf den MC schieben... ist ja unnötiger speicher 
verbrauch.
Der COde von mir ist der AUs dem ATmega16 datenblatt seite 184.

aber gut ich versuch das mal mit der library.
kann mir das zur Sicherheit noch jemand fertig reinstellen, damit ich 
was zum vergleichen hab? Als zip datei oder so?
Wär super.

VIelen Dank
Martin

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin:

Nimm lieder die Library, ist keine Schande. Die Lib ist sehr schlank und 
universell einsetzbar. Der Code steht doch schon in den vorigen Posts. 
Du mußt nur in deinem Hauptprogramm die i2cmaster.h includen, die 
twimaster.c deinem Projekt hinzufügen. Dann als erstes im Hauptprogramm 
die i2c_init() aufrufen und dann alles initialisieren, danach 
Endlosschleife oder was auch immer. Bei der I2C-Lib ist auch ein Bsp 
dabei welches du entsprechend abändern kannst. Ich finde die Hilfe geht 
schon sehr weit, ich möchte aber nicht dein Programm schreiben. Einfach 
mal Datenblatt in Ruhe lesen (vielleicht mal ausdrucken) und dann 
versteht man das auch. Sonst ist ja kein Lerneffekt dabei... :)

btw, wo hast du die Bausteinchen her, auch gesampelt?

@Kai Franke:
wenn du den gesampleten MAX6956 nicht mehr brauchst, könntest du mir den 
überlassen (ich würd Brief mit Rückporto schicken...)

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den abustein hab ich auch gesampelt... und da ich nicht dachte das das 
funktioniert, da der mir nen fehler angezeigt hat, hab ich jetzt 4 mal 
von denen post bekommen mit je 4 bausteinen... also ich denk die reichen 
für die nächsten 10 projekte   ;-)

vielen dank
für alles

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>@Kai Franke:
>>Kannst du mal kurz beschreiben wie du den Baustein ansteuerst?

Klar!
Der IC hat einen Modus Pin. Je nachdem ob dieser HIGH oder LOW ist kann 
man entweder die Helligkeit der LEDs verändern oder bestimmen welche 
LEDs an sein sollen und welche aus.
Wenn man AN/AUS einstellen will schiebt man einfach 16 Bit (ein Bit pro 
LED) in den Treiber rein, wobei eine 1 die LED anschaltet und eine 0 die 
LED ausschaltet.
Sollte man die Helligkeit verändern wollen muss man 112 Bit 
reinschieben. Diese setzen sich zusammen aus 16 LEDs mit je 7 Bit (128 
Stufen) also 16*7.
Das wars auch schon. Das tolle ist, dass man mit diesen 112 Bit bzw 14 
Byte die Helligkeit aller LEDs verändert hat.

>> gibt es den auch mit I2C?

da bin ich überfragt, was spricht gegen SPI?

>> wenn du den gesampleten MAX6956 nicht mehr brauchst, könntest du mir den
>> überlassen (ich würd Brief mit Rückporto schicken...)

wie aus meinem obigen Post erkennbar sein sollte, habe ich nur mit dem 
MAX6957 herumexperimentiert, diesen kann ich aber gerne 
weiterverschenken

Gruß
Kai

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegen dem MAX6956 einfach auf die seite ...

http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3503/t/al

und dort unter Samples bestellen. Dauert ca. 1,5 wochen. Am besten 
mehrmals bestellen, da es nicht immer angenommen wird.

Es gibt den Max6956 einmal mit 28pins und mit 36pins.
Für die Bestellung wird eine anmeldung benötigt, die aber nur die 
Lieferadresse erfordert.

Viel Erfolg

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leuchtet immernoch keine LED?
wenn das so ist könnte der IC kaputt sein oder die LEDs falsch herum 
angeschlossen... das sind doch Common Anode LEDs oder?
Der Treiber kann nämlich nur nach GND regeln

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kai + Martin:
Ich hab jetzt auch Samples bestellt bei Maxim, mal sehen wie viele ich 
bekomme (hab 20 bestellt :)
Mir schwebt da nämlich schon länger ein Projekt im Kopf rum: Eine große 
Wand aus LEDs (16 x 20), die sich wie ein Display ansprechen lassen 
(Animationen, Arcade-Spiele). Wurde alles schon gebaut... finds aber 
trotzdem lustig. Da könnt ich mir den MAX6956 gut vorstellen. Bei 16 
MAX6956 á 20 LEDs komme ich auf ca. 7.2ms max. Wiederholrate, sollte 
also ausreichen. So schnell muß man ja eh nicht sein, da die LED eben 
durch den Baustein aktiv angesteuert werden und die viele Bilder (zm. 
teilweise) quasistatisch sind. I2C scheint mir irgendwie einfach als 
SPI, weiß auch nicht warum. Ein kollege von mir hatte kürzlich große 
Probleme SPI ans laufen zu kriegen. Ist vielleicht aber auch einfach nur 
irgendwie so ein Gefühl...

@Kai:
wie schiebst eigentlich immer 7 Bit raus. Ich dachte das SPI Register 
ist auch 8 Bit und die werden dann auch ad hoc rausgeschoben. Ich stelle 
es mir schwierig vor das als kontinuierlichen Datenstrom 
hinzubekommen....

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso 7 Bit?
16*7 Bit = 112Bit
112Bit / 8 = 14 Byte
ich schiebe also immer nur 14 Byte raus

solange du die "Wand" mit einfarbigen LEDs machst, könnte das reichen, 
sollten es jedoch RGB werden, wird das ganze sehr knapp vom Timing 
her...
Ich verstehe jetzt jedoch nicht warum du die MAX6956 nimmst und nicht 
die TLC.
Wenn du das nur machst, weil du die MAX umsonst bekommst, wirst du dich 
spätestens bei der Ansteuerung ärgern, wenn du dich mit den Registern 
herumschlagen musst und immer abfragen musst ob die LED nicht vielleicht 
doch aus ist und du dann auch noch die AN/AUS Werte verändern musst.
Ich verstehe es wenn man sich ICs sampled und damit Testaufbauten macht 
um mal etwas auszuprobieren, aber wenn man sich ein ganzes Projekt 
zusammensampled ist das nur noch Schmarotzen. Naja... meine Meinung

Wünsche dir trotzdem viel Spaß beim Basteln

Kai

Autor: Martin J. (bluematrix) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt weiter rum probiert und die Library vom Peter mit 
eingebunden... aber es geht trotzdem nichts. Es kommen zwar Signale am 
SCL SDA an aber diese werde nicht weiter verarbeitet.
Was auch immer das heißen mag.

Vielleicht kann ja mal von euch einer das programm durch probieren oder 
auf einem Max6956 zum laufen bringen, mir ist egal was am ende leuchtet 
hauptsache es funktioniert!!!

Vielen dank.

Achso wegen Format problemen diesmal als.... zip Dateí

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gib mal als Adresse die 0x80 an, dann sollte es gehen :)

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das hatte ich erst , aber geht auch nicht...

also wenn du die adresse aus dem datenblatt nimmst, hast du ja die 0x40 
und wenn du dann noch das R/W Bit dazu nimmst... wird die 0x80 daraus!

i2c_start_wait(ADDR+I2C_WRITE);

oder seh ich das falsch?

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich das compiliere, beim erstellen der eep datei folgender 
ausdruck, be allen anderen datein verläuft alles normal!


Creating load file for EEPROM: MAXSteuerung.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
  --change-section-lma .eeprom=0 -O ihex MAXSteuerung.elf 
MAXSteuerung.eep
c:\Programme\Atmel\bin\avr-objcopy.exe: there are no sections to be 
copied!
c:\Programme\Atmel\bin\avr-objcopy.exe: --change-section-lma 
.eeprom=0x00000000 never used
make.exe: [MAXSteuerung.eep] Error 1 (ignored)

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du erzeugst ein EEPROM-file. legst du irgendweelche Daten im EEPROM ab?
zu der 0x80, suche mal in der Forumsuche nach "MAX6956" und dann der 
erste Forumslink ("I2C & ATmega16 & MAX6956"), da stehts.
Ich habe leider noch keine Hardware zum ausprobieren.

Mir ist noch was in deinem Schaltplan aufgefallen. Für I2C brauchst du 
noch Pull-up Widerstände in der SDA und SCL - Leitung (4.7kOhm sollte 
gehen).

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du willst kann ich dir auch so einen max zu schicken ,dann hast du 
ihn schon morgen...

daten leg ich nicht drin ab, aber bei den anderen programmen kam da nie 
der fehler...

ok ich probiers mal mit der 0x80
die widerstände mach ich auch noch dazwischen

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gehn auch 5,1 KOhm
hab grad nix anderes hier...
warum steht von den dirngern nirgends was auf den schaltplänen?
hab bisher noch keinen plan mit diesen widerstnden gefunden

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin:
Ich habe mir grad selbst Samples bestellt (s. obiger Post). dann kann 
ich auch praktisch mitreden :) Mein Problem ist eher die Zeit zum 
basteln...

5,1k geht auch, üblicherweise nimmt man irgendwas zwischen 4,7k und 10k, 
je nach Leitungslänge + kapazität. Die Pull-ups sind aber unbedingt 
notwendig, da die I2C-Schnittstelle Open-Drain ist. Steht übrigens auch 
im Atmega16 Datenblatt (auf S.172 und Tabelle S.294 (Rp - Value of 
Pull-up Resistor))...

@Kai:
Wenn es mit den MAX6956 nicht klappt, komm ich nochmal auf den TLC5922 
zurück. Der Weg ist das Ziel... :)
Nochmal zu deiner Ansteuerung: Die 16*7 Bit = 14 Byte mußt du ja aber 
vorher irgendwie bündig in einem Array zusammenbauen, oder? Kannst du 
mir mal die Funktion dafür posten? So interessehalber...

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kai:
wo hast du denn den TLC5922 bestellt?

Autor: Mario Grafe (mario)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner meldet sich mehr, scheint alles zu funktionieren...

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
funktionieren tut nix ... aber was soll ich machen
bin immer noch in der selben situation wie im vorletzten Post.

aber ich gebs langsam auf obwohl ich das ding dringend für in projekt 
brauch!

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
trotz den widerständen hat sich nix geändert

achso die bestellung der samples dauert ca 2 wochen wenn nicht sogar 
noch länger

Autor: Mario Grafe (mario)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann schick mir doch mal so einen baustein, ich versuchs dann mal auf 
dem steckbrett...

Autor: Kai Franke (kai-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo an alle,
ich benutze den TLC5922 für eine RGB Propellerclock aus 40 RGB LEDs.
Für das Umrechnen in ein Array habe ich ein Visual Basic Programm 
geschrieben in das ich ein Bitmap laden kann, den richtigen 
Teilausschnitt aussuchen kann und dann das ganze in eine compilierte Hex 
Datei umforme, die mein SD Card Bootloader frisst. Das Programm ist 
fertig, allerdings noch nicht getestet, da ich noch auf die Platinen für 
den Prototyp warte.
Wenn das ganze fertig ist, werde ich alle Dateien mal hochladen, wenn du 
es eilig hast kann ich dir auch die noch nicht getestete Version 
zuschicken.

Die TLCs hab ich übrigens bei digikey bestellt

Ich habe auch schon ein Codebeispiel in der Codesammlung hochgeladen, 
einfach mal nach TLC5922 suchen. Da ist eine Lauflichtfunktion und ein 
sanfter Farbübergang dabei.

Gruß
Kai

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.