Hallo zuammen Ich habe ein Problem mit einem MAX7221. Ich betreibe ihn an einem MSP430F149 über SPI. Das Problem ist folgendes: Irgendwie übernimmt der MAX einfach keine Daten. Die Daten kommen am MAX an, habe ich mit dem KO gemessen. Trotzdem tut sich nichts :o( Wenn ich die SChaltung einschalte leuchten alle LED, also der Testmode. Dieser müsste aber wenn ich das richtig sehe nach der Initialisierung des MAX abgeschaltet werden. (Siehe mein Code) Weiss langsam nicht mehr weiter. Sieht zufällig gerade jemand den Fehler? Da der Code zu gross ist habe ich mal die relevanten Stellen in ein File kopiert. Wäre echt toll wenn ihr mir weiterhelfen könntet! Gruss reflection
Hallo, ich denke dein Problem ist du übergibst nur 8 Bit und setzt dann LOAD wieder auf High. Das Verfahren ist folgendes: 1. LOAD auf Low schalten 2. 8 Bit für die Registeradressierung reintakten 3. 8 Bit für das Datum reintakten 4. LOAD auf High schalten Les dir mal das Datenblatt durch. Gruß Udo
Ergänzung: In der Regel kannst du den chip select Ausgang der SPI Schnittstelle nicht für LOAD benutzen, es sei denn du kannst 16 Bit-Übertragung bei der SPI-Schnittstelle einstellen. Aber das ist kein Problem, nimmst einfach einen anderen Pin als Ausgang und bedienst damit LOAD.
Das habe ich auch so gemacht. Ich habe MOSI und SCLK vom MSP an den MAX angeschlossen. Der CS wird von einem separaten Pin gemacht. Benutze also nicht den STE Pin. Hier mal ein Screenshot des Schemateils Gruss
Ähm, ich sende übrigens 16Bit, nicht nur 8, und der CS bleibt low während der ganzen Zeit void spiSendByte(unsigned char op,unsigned char val) { P2OUT &= 0xFD; // Setze Chip Select 74HCT244 low CS_LOW(); // Setze Chip Select MAX7221 LOW TXBUF0 = op; // Sende Adresse SPI0WaitForComplete(); // Warte bis gesendet dummy = RXBUF0; // RXBUF0 auslesen (somit: löschen) WICHTIG!!! TXBUF0 = val; // Sende Value (Bitmuster) SPI0WaitForComplete(); dummy = RXBUF0; CS_HIGH(); // Setze Chip Select MAX7221 HIGH P2OUT |= 0x02; // Setze Chip Select 74HCT244 low }
ups, sorry, hatte ich überlesen... aber das: dummy = RXBUF0; kannst du dir sparen.
Na dann wäre doch alles in Butter, aber leider geht immer noch nix :o) Mache ich denn die Initialisierung korrekt oder liegt vielleicht da der Fehler? Gruss
und "P2OUT &= 0xFD; // Setze Chip Select 74HCT244 low" "P2OUT |= 0x02; // Setze Chip Select 74HCT244 low" Kommentar falsch? Poste mal die max7221.h
Öhm, ja, sorry, soll bei P2OUT |= 0x02 natürlich heissen: Setze Chip Select 74HCT244 high" Hier der Code. Mit dem CS ist das speziell. Ich muss ja zuerst den 74244 aktivieren und danach den MAX7221. Dies hab ich mit dem KO gemessen und meiner Meinung nach scheint es zu stimmen. Was ich komisch finde ist: Wieso leuchten alle LED wenn ich einschalte? Das würde ja auf den Testmode deuten, aber den schalte ich ja in der Initialisierung zur Sicherheit aus. Danke das Du mir hilfst!
Der Code für den MAX sieht ok aus, eventl. würd ich nach "P2OUT &= 0xFD; // Setze Chip Select 74HCT244 low" und "P2OUT |= 0x02; // Setze Chip Select 74HCT244 high" jeweils ein kleines Delay schalten, damit auch sicher ist, dass der 244 funktionsfähig ist. 10k Pull-Up Widerstände an LOAD und SCLK und DIN am MAX7221 wären auch nicht verkehrt, damit sich, wenn der 244 im high-z Modus ist, da nichts tut. Zur Initialisierung der SPI des MSP430F149 kann ich nichts sagen, den kenn ich nicht. Gruß Udo
Ich hatte mal was für 3xMAX7219, kaskadiert, 8x8Matrix-Anzeigen und ATmega32 programmiert:
1 | void transmit(unsigned char, char); |
2 | |
3 | void static Load_Low() //Datenübernahme durch die 7219 wird vorbereitet |
4 | {
|
5 | PORTB &= ~(1 << PB4); |
6 | }
|
7 | |
8 | void static Load_High() //Daten werden von den 7219 übernommen |
9 | {
|
10 | PORTB |= (1 << PB4); |
11 | }
|
12 | |
13 | void transmit(unsigned char addr, char data) { /* Daten zu den 7219 schicken*/ |
14 | |
15 | SPDR = addr; // Start transmission |
16 | while(!(SPSR & (1<<SPIF))); // Wait for transmission complete |
17 | |
18 | asm volatile("nop"); |
19 | |
20 | SPDR = data; // Start transmission |
21 | while(!(SPSR & (1<<SPIF))); // Wait for transmission complete |
22 | }
|
23 | |
24 | void static max7219_Init(void) // 7219 werden initialisiert |
25 | {
|
26 | Load_Low(); |
27 | for (int i = 0; i < 3; i++) |
28 | {
|
29 | transmit(0x0C,0x01); // normal mode transmit(0x0C,0x01); |
30 | }
|
31 | Load_High(); |
32 | |
33 | Load_Low(); |
34 | for (int i = 0; i < 3; i++) |
35 | {
|
36 | transmit(0x0A,0x01); // set intensity 0x00 - 0x0F |
37 | }
|
38 | Load_High(); |
39 | |
40 | Load_Low(); |
41 | for (int i = 0; i < 3; i++) |
42 | {
|
43 | transmit(0x0B,0x07); // scan digits 0-7 Achtung, damit ist eine Stelle gemeint |
44 | }
|
45 | Load_High(); |
46 | |
47 | Load_Low(); |
48 | for (int i = 0; i < 3; i++) |
49 | {
|
50 | transmit(0x09,0x00); // no decoding |
51 | }
|
52 | Load_High(); |
53 | }
|
54 | |
55 | |
56 | int main() |
57 | {
|
58 | SPI_MasterInit(); |
59 | _delay_us(10); |
60 | max7219_Init(); |
61 | |
62 | while (1) |
63 | {
|
64 | Load_Low(); |
65 | for (int i = 0; i < 3; i++) |
66 | {
|
67 | transmit(0x0F,0x01); // Dispay-Test an |
68 | }
|
69 | Load_High(); |
70 | |
71 | _delay_ms(3000); |
72 | |
73 | Load_Low(); |
74 | for (int i = 0; i < 3; i++) |
75 | {
|
76 | transmit(0x0F,0x00); // Display-Test aus |
77 | }
|
78 | Load_High(); |
79 | |
80 | _delay_ms(3000); |
81 | }
|
82 | |
83 | while (1) { } |
84 | |
85 | return 0; |
86 | }
|
In dem Beispiel schaltet er den Test-Modus an und aus. Kannst das ja mal mit deinem Code vergleichen.
He vielen Dank, werde ich heute Abend genauer untersuchen. Habe jetzt mal den MAX gewechselt. Dann kann ich einen Hardwaredefekt schonmal fast ausschliessen. Hatte eben noch einen rumliegen auch wenn ich nicht denke das es das war. Probiere jetzt halt eins nach dem anderen auszuschliessen. Danke für die Hilfe, werde mich sicherlich melden wenn ich weiss an was es lag, oder wenn ich nicht weiterkomme ;o) Greets
Hallo zusammen So, ich bin nun ein wenig schlauer, aber es läuft immer noch nicht. Habe den MAX7221 gewechselt und es leuchten immer noch alle LED. Ebenfalls habe ich festgestellt, dass wenn ich den MAX gar nicht initialisiere, doch alle LED leuchten. Laut Datenblatt müsste er ja dann in den Shutdown Mode gehen und alle LED löschen. Schon das macht er nicht. Die Daten kommen am MAX an, SCLK, DIN und CS (direkt am MAX gemessen) Was mir nun aber komisch erscheint: Messe ich am MAX an DOUT, ist das inaktive Level auf 0, wenn ich aber am DIN messe ist das inaktiv Level 1. Ist das so korrekt? Ich kann so viel ich weiss meinen uP gar nicht so einstellen das der inaktive SPI Level auf 0 liegt. Den SCLK habe ich so eingestellt, also dort ist der inaktive Level auf 0, wie im Datenblatt beschrieben. Weiter, wenn ich am SCLK Pin messe kommen 8 Clocks, dann eine kurze pause, da er ja wartet bis die Daten übertragen wurden, und dann wieder 8 Clocks. Habe eben nur ein 8 Bit Register für die SPI Schnittstelle, kein 16Bit. Kann das zu Problemen führen? Also ich meine, dass der Clock "unterbrochen" wird? Die Daten müssten ja trotzdem ankommen, oder sehe ich das falsch? Gruss
Hallo, das die Clock-Impulse unterbrochen sind, ist nicht schlimm, nur LOAD darf dabei nicht High werden. Wie sieht denn dein Layout aus? Die MAX7219 und 7221 reagieren empfindlich auf zu schmale Masse- und Versorgungsspannungs-Leiterbahnen. Außerdem sollte der Versorgungsspannungs-Pin so nah wie möglich am Pin mit einem 10µF und einem 0,1µF Kondensator, vorzugsweise SMD-Kerko, versehen werden. Gruß Udo
Hm, habe Wrap Drähte genommen. Ich habe eben nur die SMD Variante bekommen und musste darum improvisieren (Lochrasterplatine). Kondensatoren habe ich 10uF und 100nF in ca. 3cm Abstand. Zuerst hatte ich die Kondensatoren nicht und da hat manchmal gar nichts geleutet, aber nur jedes 10Mal wenn ich ihn eingeschaltet habe. Es wird auch nix warm oder so. Speisung ist stabil, kommt von einem Traco DCDC Wandler der 660mA an 5V liefert. Gruss von einem der sich jetzt dann die letzten Haare vom Kopf reisst :o)
Ach ja, ich habe ja einen 27kOhm Widerstand für RSet des MAX. Die LED hat ca. 2.1V Vorwärtspannung und ich wollte das ganze bei ca 20mA betreiben. Müsste doch hinkommen, oder? Nicht das der irgendwie da ein Problem hat. Habe ja auch alle scan Digits an, also 0x07... Gruss
sorry, aber mit Wire-Wrap-Drähten und Lochraster wird das nichts. Da bin ich ganz sicher. Gruß Udo
Hä, also ich habe schon sehr viele Sachen so aufgebaut, das war noch nie ein Problem, auch mit Dingen die noch viel höher getaktet waren. Wieso soll das nicht gehen? Meine, ich habe schon nicht die dünnsten Wrap Drähte genommen, dicker ist der Pin am MAX auch nicht. Da ich Layouter bin von Beruf, aber Privat halt nicht an LP rankomme mache ich das immer so. Die Datenleitungen sind auch nicht direkt neben den Ausgängen ect. Aber weisst Du wie das mit den Level an DIN aussieht? Muss der im inaktiven Fall auf 0V sein oder 5V? Gruss
27K für Iset ist schon ok, aber wie schon gesagt, du brauchst ein vernünftiges Layout, sonst wird das nichts, glaub mir. Du reist dir letztendlich auch noch die Kopfhaut ab....;))
Sorry, aber das verstehe ich als Layouter jetzt nicht. Solange alle Signale die ankommen mit dem KO gemessen i.O sind, was soll dann ein Layout bringen? Ich sehe ja die Speisung vor mir und die ist glatt, also keine Einbrüche. Will dir nicht blöd kommen, aber bitte erkläre es mir. :o) Gruss
Das Problem ist nicht die Taktfrequenz, sondern der Strom der durch das Multiplexen der Anzeige-LED's kurzzeitig fließt. Wenn du keine ausreichen Ground- und VCC- Plane hast, machen die MAX was sie wollen, nur nicht das was du willst. Gruß Udo
Ich geh mal davon aus, dass KO = Oszilloskop heißen soll. Wie hoch ist denn die Grenzfrequnz die dein KO noch aufzeichnet und bei wieviel dB abfall??? Wir reden hier von Spitzen im ns-Bereich.
Ok, ist zwar denke ich ein gutes Teil, ist ein Fluke Scopemeter mit 200MHz. Jetzt bin ich ja voll am A.... :o) Naja, mal schauen was ich mache, nochmals bau ich das Teil nicht auf...
Prüf dochmal, ob der Rset überhaupt einen Einfluß hat. Wenn nicht, dann hast Du irgendwas falsch verschaltet. Peter
OK, das werde ich machen, schalte mal was anders. Was meinst Du Peter, kann das auf einer Lochrasterkarte laufen? Gruss
Also, wenn ich RSet verändere, verändert sich auch die Helligkeit der LEDs. Das sollte also schonmal funktionieren. Aber nun ist guter Rat teuer...
reflection wrote:
> Was meinst Du Peter, kann das auf einer Lochrasterkarte laufen?
Natürlich.
Ich mache fast alle Entwicklungen erstmal auf Lochraster.
Peter
>> Aber nun ist guter Rat teuer... Nö, meiner war kostenlos. Aber wie im richtigen Leben meinen die Leute alles was kostenlos oder preisgünstig ist, muss schlecht sein.... Schau dir mal diesen Thread an Beitrag "LED_Laufschrift mit Mega 32 und MAX 7219" Letztendlich hat er mir seine Schaltung zugesandt. Ich habe die Masse- und die VCC-Leitungen verstärkt und direkt an den Pins der MAX SMD-Kerkos gelötet und siehe da, es funktionierte. Wenn du willst, kann ich dir seine e-mail geben, dann kannst du ihn selber fragen. Gruß Udo
Hallo Udo Nene, das glaub ich Dir schon. Frage mich nur gerade, wenn der Bautstein so empfindlich ist, ob das wirklich die richtige Wahl ist... Werde mir wenn möglich morgen einen Adapter bauen um den MAX, der ja SMD ist, auf ne kleine Platte packen (gefräst) und ihn quasi auf THD umzubauen. Dann kann ich auch gleich die Kondensatoren direkt daneben platzieren. Gruss reflection
So, es läuft....... immer noch nicht! Ich habe den MAX nun nochmals aufgebaut. Die Kondensatoren 100nF und 10uF sind direkt über den IC gelötet und mit richtigen Drähten (1mm) an die +5V und GND gehängt. Würde mal sagen andere ziehen darüber 10A, aber lassen wir das ;o) Sieht alles ziemlich verbastelt aus, da der MAX ja SMD ist, aber die Lötstellen gehen einfach nicht mehr dicker. Problem: Jetzt leuchten beim Einschalten entweder alle oder keines, chance ca. 50:50. Vom Programm her ist es egal, das sollte ja laufen. Auch mit einem Layout bekomme ich keine dickeren Leitungen hin, eher dünner, da das Teil ja SMD ist. Was mir noch eingefallen ist, aber was ja eigentlich nicht sein kann... Meine Verbindungen vom MAX zur Matrix sind ca. 30cm lang (Flachbandkabel) Da ja aber ein Strom von 20mA fliesst, sollte da ja kein Problem entstehen, oder irre ich? Ansonsten wäre der IC eh für mich gestorben da ich einen Cube damit aufbauen möchte und somit die einzelnen Leitungen sicher 30cm werden. Gruss
Hallo, habe mir jetzt nicht alle Beiträge durchgelesen, habe aber auch schon meine Erfahrungen mit MAX Treibern gemacht. Das ganze Adressregistersystem kann einen ganz schön verwirren, daher rate ich dir das Datenblatt besonders wegen der Initialisierung nochmal genau durchzulesen, das war zumindest mein Problem. Ich bin dann auf treiber von TI umgestiegen, die sind einfacher anzusteuern ;) 30cm stellt kein Problem dar, hab schon 2 Meter fast fehlerfrei hinbekommen :) Gruß Kai
Aha, na dann bin ich wenigstens was die Kabellänge anbelangt beruhigt. Ich denke die Initialisierung sollte korrekt sein, da ich diverse andere Programme im Netz gefunden habe und die auch nichts anderes machen als ich. Ich denke langsam aber sicher das der MAX nix taugt. Sorry die Aussage, aber ich bin auch nicht erst seit gestern Elektroniker und hatte denke ich schon bei weitem empfindlichere Bauteile die ich ansteuern konnte und die dann auch funktionierten. Maxim ist sowiso ein Kandidat den ich wo ich kann aussen vor lasse, auch in der Firma. Hatte einfach schon zu viele schlechte Erfahrungen mit Teilen von denen, aber hier hab ich halt wieder mal nicht wiederstehen können. Frage: Gibt es Teile die dasselbe machen und funktionieren? Ich habe eben einfach schlicht weder die Zeit noch die Nerven wieder ne Woche an dem Teil rumzumessen. Kann doch nicht sein das es so ein Prob darstellt 64 poplige LEDs zum laufen zu bekommen!!! Ich könnt im Moment echt k..... War gestern bis spät in die Nacht dran und der Erfolg ist = 0. Messtechnisch ist das ganze nicht zu ermitteln. Die Pegel stimmen, die Daten kommen an. CS, CLK ect. ist alles 1:1 wie im Datenblatt, nur die Matrix macht nix. Falls jemandem noch was in den Sinn kommen sollte wäre ich froh wenn er sich meldet, ansonsten fliegt die Schaltung morgen in die Tonne und die 10MAX's gleich hinterher. Haben zwar auch nicht wenig gekostet, aber wie sagt man so schön. Lieber ein Ende mit Schrecken als ein Schrecken ohne Ende... Gruss reflection
Ach ja, kann zwar eigentlich nicht sein, aber frage jetzt doch: Die Daten die vom uP zum MAX gehen sind schon MSB first, oder???? Also ich sende das Bit 8 der Adresse zuerst, sprich die don't care Bits. Liegt da vielleicht der Hund begraben? Gruss
reflection wrote: > Ich denke langsam aber sicher das der MAX nix taugt. Sorry die Aussage, > aber ich bin auch nicht erst seit gestern Elektroniker und hatte denke > ich schon bei weitem empfindlichere Bauteile die ich ansteuern konnte > und die dann auch funktionierten. Maxim ist sowiso ein Kandidat den ich > wo ich kann aussen vor lasse, auch in der Firma. Hatte einfach schon zu > viele schlechte Erfahrungen mit Teilen von denen, aber hier hab ich halt > wieder mal nicht wiederstehen können. Also ich kann das in keinster Weise bestätigen. Ich setze den MAX7219 schon jahrelang in vielen Projekten ein und er läuft wie dumm. Hier mal mein AVR-GCC Code:
1 | u8 display_ram[8] = { 0x00, 0x00, 0x62, 0x62, 0x40, 0x00, 0x62, 0x20 }; |
2 | |
3 | |
4 | static void spi_write( u8 bh, u8 bl ) // write 2 bytes |
5 | {
|
6 | SPDR = bh; |
7 | while( !(SPSR & 1<<SPIF) ); // wait until done |
8 | SPDR = bl; |
9 | while( !(SPSR & 1<<SPIF) ); // wait until done |
10 | }
|
11 | |
12 | |
13 | void set_display( u8 bh, u8 bl ) |
14 | {
|
15 | LD_DISPLAY = 0; |
16 | spi_write( bh, bl ); |
17 | LD_DISPLAY = 1; // latch display |
18 | }
|
19 | |
20 | |
21 | void update_all( void ) |
22 | {
|
23 | u8 i; |
24 | |
25 | set_display( 0x09, 0x00 ); // no decode |
26 | set_display( 0x0F, 0x00 ); // test mode off |
27 | set_display( 0x0B, 0x07 ); // 8 digits |
28 | set_display( 0x0C, 0x01 ); // on |
29 | set_display( 0x0A, 0x0F ); // brightness = 15 |
30 | |
31 | for( i = 8; i; i-- ){ |
32 | set_display( i, display_ram[i-1] ); |
33 | }
|
34 | }
|
35 | |
36 | |
37 | void init_spi( void ) |
38 | {
|
39 | MISO = 1; |
40 | |
41 | SCK_DDR = 1; |
42 | MISO_DDR = 0; |
43 | MOSI_DDR = 1; |
44 | LD_DISPLAY_DDR = 1; |
45 | |
46 | SPCR = 1<<SPR0^1<<MSTR^1<<SPE; // XTAL / 16 |
47 | // SPI-mode 0
|
48 | // Master
|
49 | // MSB first
|
50 | SPSR = 0; // no double speed |
51 | |
52 | update_all(); |
53 | }
|
Peter
Nun ich kann einen Fehler im Programm vorerst mal aussschliessen. Aus folgendem Grund: Initialisiere ich den MAX nicht, also ich lege lediglich die Speisung an, müsste das Ding ja in den Shutdown Mode gehen. Wie gesagt, manchmal leuchten aber alle LED, manchmal keines. Ca 50:50. Bevor das nicht mal funktioniert muss ich mir wohl keine Gedanken mehr machen bezüglich Code. Wenn ich es mal erreiche, dass er sich immer gleich einschaltet, dann versuche ich es weiter. Erreiche ich aber schon nicht immer den gleichen Aufstartzustand, der ja fix ist, ist das Problem wohl im IC oder dessen Beschaltung zu suchen. Als letzter Strohhalm bleibt wohl jetzt nur noch die SMD Dinger zu schmeissen und THD zu bestellen. Vielleicht lässt sich dann das Problem ja umgehen da ich dann wirklich dicke Leitungen anlöten kann. Mit den SMD Beinchen ist man halt sehr schnell am Limit. Vielleicht liegt es ja auch am 7221, hier setzen ja glaube ich alle den 7219 ein. Gruss
Ich nutze den MAX mit einem F2013, geht auch ohne den HC244 problemlos trotz Aufbau auf Lochraster. Startschwierigkeiten lagen an mir, nämlich am nicht gesetzten Bit namens USICKPH (Clock phase select) im USICTRL1 Register. Grüße
Hallo Kobold Hm, Laut Datenblatt dürfte das nicht gehen. Der MAX erwartet min 3.5V an den Eingängen. Ich dachte halt ich geh auf Nummer sicher und habe jetzt schöne 5V Pegel an den Eingängen. Das CKPH Bit habe ich gesetzt, darin liegt das Problem auch nicht begründet. Gruss
Hallo reflection, das war ja nur so ein Gedanke, weil es bei mir daran hing. Mit den Pegeln gibt es keine Probleme, den MSP könnte man ja auch mit 3,6V betreiben wenn es so sein sollte. Die zwei MSP kann man sonst nur teilweise vergleichen, da der 20xx die 16bit in einem Rutsch raus schiebt. Aber wie geschrieben: Problemloser Betrieb, es muss bei dir also an etwas anderem liegen. Grüße
>> reflection wrote: >> Vielleicht liegt es ja auch am 7221, >> hier setzen ja glaube ich alle den 7219 ein. Der einzige Unterschied zwischen 7219 und 7221 ist der, dass der 7219 eine quasi SPI-Kompatible Schnittstelle und der 7221 eine SPI-Kompatible Schnittstelle hat (lt.Datenblatt). In der Praxis wirkt sich das so aus, dass es beim 7219 reicht, nach dem übertragen der Daten LOAD einmal kurz auf Low zu ziehen, während man beim 7221 LOAD vor dem Senden der Daten auf Low und nach dem Senden auf High setzen muss. Bei beiden werden die Daten mit der Low-High-Flanke von LOAD übernommen. Zu der Länge der Leitungen vom 72xx zu den Leuchtdioden kann ich nichts sagen, bei mir waren die Abstände immer recht kurz, dafür waren bei mir die Leitungslängen der SPI-Signale recht lang (ca.2m) ohne Probleme zu verursachen. Ich hab mal Bilder angehängt, wie ich es gelöst habe. Gruß Udo
Also zur Beruhigung: Lochraster ist beim Max kein Problem. Meine Prototypen sind auch ziemlich wild auf Lochraster zusammen gelötet. Die Länge der Drähte zwischen LEDs und Max waren bei mir auch schon 60 cm und es gab keine Probleme.
So, die Kiste läuft. Probleme gab es noch einige. Hier mal was ich noch so machen musste und feststellte. Vielleicht nützt es ja dem nächsten Probleme die ich hatte: 1. Die Speisung muss wohl direkt abgeblockt werden. Ein paar cm zu weit entfernt und das geht nicht mehr. Also C's direkt an IC. Jetzt läuft er zu 90%, ca. jedes 10te Mal schaltet er sich nicht ein oder schwingt nicht an (Anzeige bleibt dunkel) 2. Da ich mit dem MSP430 programmiere muss das Bit CKPH gesetzt werden. Hatte ich schon, ist aber tatsächlich ein Stolperstein. Ohne dieses Bit klappt es manchmal, manchmal nicht. 3. Ich hatte noch Probleme mit dem CS welcher ein bisschen zur falschen Zeit kam. Mit einer Sonde sah alles gut aus, aber als ich endlich eine zweite Sonde auftreiben konnte sah ich, dass er den Pin zu früh auf High zieht. 4. Nachdem ich dies alles korrigiert hatte lief es immer noch nicht. Mein Programm bestand darin den Testmode ein, resp- auszuschalten. Das macht das MÄXCHEN aber nicht. Ich kann von Hand alle LED einschalten oder ausschalten (mit eigenen Routinen) aber wenn ich mal den Testmode eingeschaltet habe geht gar nix mehr. Kann ihn auch nicht mehr abschalten, der MAX hängt sich auf (Sah ich im Debugger). Im Moment funktioniert alles. Alle Muster die ich programmiert habe laufen, Helligkeit kann ich verändern, aber der Testmode geht nicht. Ist nicht tragisch da ich den ja eh nicht benötige, aber da hätte ich noch Stunden rumsuchen können. Falls bei Euch also mal alle LED leuchten, dann schickt einfach mal ein Bitmuster, versucht nicht den Testmode abzuschalten, das hilft nix. Ach ja, zu den Leitungslängen. Meine Leitungen vom MAX zu den LED sind nun wieder Wrap Drähte, funzt auch bei 40cm tadellos. Hoffe es nützt in Zukunft jemandem. Wollte mich noch für die tolle Hilfe in diesem Thread bedanken! Gruss reflection
Salu zusammen Ich hatte ja damals (wie ihr oben lesen könnt) einige Probs mit dem MAX7221. Ich habe mir nun aus diesem Baustein einen 8x8x8 LED Cube gebaut welcher auch funktioniert (ein bisschen Basteln muss halt auch mal sein :o)). Nun zum Problem: Der Cube wird über einen AC-DC Wandler von Traco versorgt (+5V). Diese 5V Leitung ist über eine Schalter geschaltet, die 230V hängen immer am Wandler. So, stecke ich nun den Stecker in die Steckdose und schalte den Cube über den Schalter ein (+5V Speisung) dann passiert gar nix oder die Matrizen leuchten willkürlich. Schalte ich aber den Schalter ein und stecke danach das Stromkabel in die Netzdose, läuft das Ding zu 100%! Ich hatte das bereits beim Aufbau der Matrix. Manchmal wenn man die Speisung über einen Schalter legte, ging es nicht, steckte man einfach die Bananenbuchse am Netzteil aus und ein lief es. Kennt jemand von Euch dieses Verhalten? Ist bei allen Ebenen genau gleich. Die Hardware ist sauber aufgebaut, Kondensatoren sind vorhanden (pro MAX 10uF und 100nF) Der Strom der durch die LED fliesst ist ca. 10mA. Gruss und danke im Voraus reflection
Dann ist irgendwas faul mit Deiner Resetschaltung oder der Quarz schwingt schlecht an. Das Netzeil rampt VCC langsam und monoton hoch. Ein Schalter dagegen schnell und lückend (er prellt). Es kann auch ein Bug im MC sein. Lies mal das Datenblatt, manche MCs benötigen ein genau definiertes Power-Up. Das war z.B. bei den ersten AVRs das Problem (z.B. ATtiny22), daß einige nicht richtig die Fusebits lesen oder den EEPROM überschreiben, wenn VCC zu schnell anstieg. Peter
Salu Peter Also ich denke am uP kanns fast nicht liegen. Habe hier sehr viele unterschiedliche Schaltungen die ich genau gleich aufgebaut habe. Hatte noch nie Probs das da einer nicht mit Schwingen anfing. Der Reset des uP funktioniert auch tadellos, an dem kann es nicht liegen. Tja, ist ja nicht so tragisch, aber stört halt schon wenn man nicht weiss an was es liegt. Gruss und Danke für die Antwort reflection
hier gibt es für kleines Geld 8x8 LED-Matrix-Module mit MAX7219: http://www.solarlogshop.de/shop/article_230103/Display-TE-Bausatz.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.