Forum: Mikrocontroller und Digitale Elektronik Problem mit Ansteuerung MAX7221


von reflection (Gast)


Lesenswert?

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

von reflection (Gast)


Angehängte Dateien:

Lesenswert?

grrrr Code vergessen:

von Udo (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

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.

von reflection (Gast)


Angehängte Dateien:

Lesenswert?

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

von reflection (Gast)


Lesenswert?

Ä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
}

von Udo (Gast)


Lesenswert?

ups, sorry, hatte ich überlesen...
aber das: dummy = RXBUF0; kannst du dir sparen.

von reflection (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

und

"P2OUT &= 0xFD;             // Setze Chip Select 74HCT244 low"
"P2OUT |= 0x02;    // Setze Chip Select 74HCT244 low"

Kommentar falsch?

Poste mal die max7221.h

von reflection (Gast)


Angehängte Dateien:

Lesenswert?

Ö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!

von Udo (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

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.

von reflection (Gast)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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)

von reflection (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

sorry, aber mit Wire-Wrap-Drähten und Lochraster wird das nichts. Da bin 
ich ganz sicher.

Gruß
Udo

von reflection (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

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....;))

von Udo (Gast)


Lesenswert?

Level an DIN im Ruhezustand sollte 5V sein.

von reflection (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

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

von Udo (Gast)


Lesenswert?

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.

von Udo (Gast)


Lesenswert?

Von Spitzen auf der Masse-Leitung....

von reflection (Gast)


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

Prüf dochmal, ob der Rset überhaupt einen Einfluß hat.

Wenn nicht, dann hast Du irgendwas falsch verschaltet.


Peter

von reflection (Gast)


Lesenswert?

OK, das werde ich machen, schalte mal was anders.

Was meinst Du Peter, kann das auf einer Lochrasterkarte laufen?

Gruss

von reflection (Gast)


Lesenswert?

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...

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

reflection wrote:
> Was meinst Du Peter, kann das auf einer Lochrasterkarte laufen?

Natürlich.

Ich mache fast alle Entwicklungen erstmal auf Lochraster.


Peter

von Udo (Gast)


Lesenswert?

>> 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

von reflection (Gast)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Kai F. (kai-) Benutzerseite


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Kobold (Gast)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Kobold (Gast)


Lesenswert?

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

von Udo (Gast)


Angehängte Dateien:

Lesenswert?

>> 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

von Gerd G. (elektrikser)


Lesenswert?

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.

von reflection (Gast)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von reflection (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?


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.