Forum: Compiler & IDEs Soft SPI mit MAX7221 funktioniert nicht


von Killerawft (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich versuche gerade 6 MAX7221, also zwei RGB Matritzen, erst einmal 
testweise mit einem Attiny2313 über Soft SPI anzusteuern. Später soll 
das ganze mit einem Atmega328 betrieben werden, der aber noch nicht da 
ist.

Ich habe das Problem, dass die IC's keine Regung auf mein Programm 
zeigen. Ich hatte zwischenzeitlich beim verrücken des Aufbaus oder 
anderen Nebeneffekten das Phänomen, dass die gesamten LED's in 
zufälligen Farben geleuchtet haben. Hab ich dann jedoch die Schaltung 
aus und wieder ein geschaltet war der Effekt weg, oder die LED's 
leuchteten in anderen Farben. Somit weiss ich schon mal, dass die 
Hardware an sich funktioniert.

Ich habe mich schon durch das Internet gegoogelt und diverse Seiten mit 
soft SPI Code und auch soft SPI code zu dem MAX7221 gefunden, jedoch hat 
davon nichts funktioniert. Also habe ich mir meine eigene Funktion 
geschrieben und die auf den Ablauf des MAX7221 angepasst.
Ich bezweifle jedoch, ob die Funktion das richtige Timing hat und ich 
weiss auch nicht, ob es überhaupt beim SPI Timing grenzen gibt, da im 
Datenblatt immer nur Minimas angegeben sind, über die ich weit hinaus 
komme, allein schon durch den 8Mhz Takt des µC.

Mein Programm habe ich Angehängt. Die UART schnittstelle benutze ich nur 
zum Debuggen.

von PittyJ (Gast)


Lesenswert?

Ich habe bei meinen Versuchen immer ein Oszilloskop dran gehängt. Dann 
konnte man schauen, was wirklich auf dem Bus passiert. Alles andere ist 
herumraterei.
Besorg dir ein Scope, oder einen Logicanalyzer und schau mal, was da 
wirklich gesendet wird.

von Killerawft (Gast)


Lesenswert?

Ja das hab ich auch schon überlegt. Am Montag wollte ich mir die Teile 
für ein USB Oscilloskop holen.

Aber  die Reihenfolge vom Pin an und ausschalten ist richtig?

von Killerawft (Gast)


Angehängte Dateien:

Lesenswert?

Ich melde mich nach längerer Abwesenheit mal zurück. Ich habe in der 
zwischenzeit meine schaltung komplett in betrieb genommen und nutzte nun 
den Atmega328p und Hardware SPI. Aber auch hier habe ich massive 
probleme, die sich durch tagelanges googeln, datenblätter studieren und 
rum probieren ncht ngelößt haben. Ich habe jetzt das Phänomen, dass 
sobal ich die Schaltung einschalte, die LED's in bunten farben leuchten. 
Soblad der SPI etwas überträgt sind die LED's während der übertragung 
aus, nur um dann wieder bunt zu leuchten, manchmal sogar in anderen 
farben als vorher.

Ich habe mir das USB AVR Lab von Ulrich Radig 
(http://www.ullihome.de/wiki/USBAVRLab/index) zusammen gebaut und die
SPI-Virtual UART Bridge genommen um damit zu sehen, ob der µC alles 
richtig sendet. Dabei habe ich festgestellt, dass die Befehle von der 
SPI schnittstelle nicht richtig gesendet werden, oder dass der SPI 
Logger selbst bei fck/128 nicht schnell genug ist um alles mit zu 
bekommen. Ich sende meine Daten immer 6 mal, für jeden MAX ein mal, 
jedoch zeigt der logger mir, dass nicht jeder befehl gesendet wird und 
dass auch nicht jeder befehl 6 mal gesendet wird, sondern immer 
unterschiedlich oft. Ein befehl besteht bei mir aus erst die Adresse und 
dann die Daten.

So langsam fällt mir da nichts mehr ein, was ich verändern müsste, um 
die Schaltung zum laufen zu bekommen. Ich habe auch schon jede einzelne 
LED auf ihre funktion überprüft, und sie funktionieren jetzt 
einwandfrei, also leuchtet die matritzen nicht so bunt, weil die led's 
nicht funktionieren. Ich habe auch schon spaßes halber die Zeilen und 
Spalten Pins vertauscht, um zu sehen ob die Matritzen dann dunkel 
bleiben, dann leuchteten Sie aber genau so bunt wie zuvor.

Ich habe nochmal mein aktuelles Programm angehängt, vielleicht findet ja 
einer der Experten einen Fehler darin.

Killerawft

von holger (Gast)


Lesenswert?

>Ich habe nochmal mein aktuelles Programm angehängt, vielleicht findet ja
>einer der Experten einen Fehler darin.

Das Programm ist in Ordnung. SPI2X liegt zwar nicht in SPCR,
aber das macht hier nichts aus.

Du hast Probleme in deiner Hardware.
Leider gibt es weder einen Schaltplan von dir
noch ein Foto vom Aufbau.

Schlechter Aufbau oder fehlende Abblockkondensatoren.
Das kann alles mögliche sein.

von Killerawft (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist der Schaltplan. Allerdings habe ich die Pins von oft SPI auf 
Hardware SPI umgelötet. Der rest ist so geblieben. DIe Munis pole der 
LeD's habe ich an die Zeilen gesteckt und die Plus pole an die Spalten.

von Uwe S. (de0508)


Lesenswert?

Sorry  Killerawft,

ich sehe leider nichts.

Wäre es zu viel verlangt eine lesbare (Grafik, PDF) Datei anzuhängen?

von dummy (Gast)


Lesenswert?

>ich sehe leider nichts.

Ich schon. AVCC und AGND sind am uC nicht angeschlossen.
Das ist schon mal nicht erlaubt.

Bei Matrize gibt es zwei Abblockkondensatoren für
drei ICs. Da fehlt ja schon mal einer. Und ich gehe
davon aus das die beiden vorhandenen Cs mit Sicherheit
schlecht platziert sind.

von Killerawft (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt die AVCC und AGND mit vcc und gnd verbunden und 2 
Kondensatoren an 2 IC'S direkt an Vcc zu GND gelötet, da ich nur noch 2 
hier rum liegen hatte udn habe dann auch nur 3 IC's angeschlossen. 
Jedoch zeigt sich das gleiche bild wie vorher. Es leuchten alle LED's 
bunt.

Für die Leute, die kein Eagle haben, habe ich meinen Schaltplan nochmal 
als Bild angehängt.

von Killerawft (Gast)


Lesenswert?

In der Zwischenzeit war ich bei Conrad und habe noch ein paar 100nF 
keramik kondensatoren gekauft und die an die Vcc pins der restlichen 
IC's gelötet. Dann habe ich das ganze wieder in betrieb genommen und 
wieder sind alle led's nur bunt am leuchten.

Ist es vielleicht notwendig den SPI Bus zu terminireren oder Pull down 
widerstände o.ä. ein zu löten? Vom µC bis zum letzten IC sind es ca 30cm 
Leitungsweg.

von _Gast (Gast)


Lesenswert?

Pin 9/10/11 liegen jedoch an Port D 5/6/7.

Deine Konfiguration ist falsch.
#define SPI_SCLK  PB2
#define SPI_DATA  PB0
#define SPI_CS    PB1
#define SPI_PORT  PORTB

von _Gast (Gast)


Lesenswert?

Ooops nicht gesagt, hatte den alten Code genommen

von Killerawft (Gast)


Lesenswert?

Heute habe ich mal die LED's alle im sekunden takt ein und aus schalten 
lassen und siehe da, sie tun es sogar.
Das komische ist nur, wenn ich die LED's nur an ein IC stecke leuchten 
alle LED's wie sie es sollen. Stecke ich jedoch die anderen 2 oder alle 
6 IC's mit ran, leuchten wieder nur alle LED's bunt, also einige setzten 
aus.
Zwar blinken Sie auch und lassen sich abschalten usw, also die IC's tuen 
was sie gesagt bekommen, jedoch leuchten nicht alle led's, wenn alle 
IC's an LED's angeschlossen sind. Ich betreibe meine Schaltung mit einem 
5V 2A Steckernetzteil und wenn alle IC's voll an sind, zieht die 
Schaltung 760mA, also von der Stromversorgung sollte das eigentlich 
klappen.

Hat jemand von euch eine Idee woran es ligen könnte? sind die 
widerstände an RSet vielleicht falsch für eine PLCC6 RGB LED, sodass das 
IC nicht genug strom für alle led's liefert? Laut Datenblatt sollten das 
eigentlich die richtigen widerstände sein, aber das wäre das einzige, 
was mir noch einfällt.

Killerawft

von Peter D. (peda)


Lesenswert?

Durch das Multiplexen fließen sehr hohe Impulsströme. Man sollte eine 
GND-Plane verwenden.
Auch sollte ein >=100µF auf das Board und natürlich die obligatorischen 
100nF Pillen an jeden IC nahe VCC.

von Killerawft (Gast)


Lesenswert?

Ich habe die komplette obere Fläche der platine als GND genutzt und die 
untere als Vcc. Das mit den 100 Micro F werde ich mal testen,  aber erst 
heute abend oder morgen. Jetzt habe ich keine Zeit.

von Phan Tom (Gast)


Lesenswert?

Killerawft schrieb:
> Das mit den 100 Micro F

Ich verkaufe dir ein "µ" (AltGr-m) ;-)

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Meine bescheidene Meinung und mein eigenes Vorgehen bei einer 
Neuentwicklung ist es immer für den µC eine evaluierte Umgebung zu 
nehmen. Also in meinem Fall z.B. ein SDK600. Die neu entwickelte HW 
kommt dann erst mal aufs Breadboard oder wenn's damit nicht geht auf 
einen Prototypen. So lässt sich leicht mit Hilfe eines Logikanalysators, 
oder in system debugging feststellen wo der Fehler liegt. Eine 
Fehlfunktion des µC selbst ist bei Verwendung eines SDK oder EvalBoards 
schon fast von selbst ausgeschlossen. Haut man alles direkt auf die 
selbst entworfene Platine sind die Fehlerquellen so mannigfaltig dass 
eine Analyse sehr kompliziert und Zeitintensiv sein kann.

von Killerawft (Gast)


Lesenswert?

Ich habe auf dem Handy kein Micro Symbol ;) und ich habe vorher die 
Schaltung mit einem eigenen test board und einen Attiny2313 getestet und 
die gleichen Probleme gehabt. Für ein professionelles testboard mit JTAG 
o. ä hab ich nicht das Geld und bis jetzt auch noch keinen zwingenden 
bedarf gehabt.

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Wenn die Schaltung schon auf einem eigenen Testboard, ich gehe davon 
aus, dass ansonsten die Controller auf dem Testboard einwandfrei 
arbeiten, nicht funktioniert, dann macht es doch keinen Sinn die 
Schaltung komplett mit Peripherie aufzubauen. Wenn man keine 
professionellen Tools hat macht es um so mehr Sinn seine Schaltungen 
Step by Spep  zu realisieren..

von Killerawft (Gast)


Lesenswert?

So ich habe jetzt zwei defekte LED's ausgetauscht, nachdem die endlich 
geliefert wurden und ich habe an jedes IC einen 470µF ELKO angelötet, 
parallel zu einem 100nF Kerko. Außerdem habe ich an die beiden Platinen 
am eingangs Stecker ebenfalls einen 470µF ELKO parallel zu einem 100nF 
KerKo gelötet, somit sollte die Spannung stabil bleiben. Desweiteren 
habe ich die Zeilen und Spalten Kabel nicht mehr über eine 
Steckverbindung mit den IC's verbunden, sondern die Kabel direkt an die 
Stiftleisten angelötet, um auch Kontakt Schwierigkeiten auszuschließen. 
Trotzdem leuchtet die Matrix bunt wie bisher und einige LED's flackern, 
wie bisher. Also in allem, alles wie bisher leider :(


Killerawft

von Killerawft (Gast)


Lesenswert?

Ich habe eben auch noch etwas interessantes herausgefunden. Ich habe zum 
testen die LED's in Rot, Grün, Blau und weiss nacheinander alle 
gleichzeitig leuchten lassen, also erst alle rot, dann alle grün usw. 
und es gibt einige led's die bei den einzelnen farben garnicht leuchten, 
wenn ich die Matrix aber weiss leuchten lasse, leuchten diese in rosa.

von Killerawft (Gast)


Lesenswert?

Ich habs jetzt mit den MAX7221 aufgegeben und verwende lieber WS2812 LED 
Pixel. Ich bekomme das einfach nicht hin und die LED Pixel habe ich 
schon öfter ohne Probleme angesteuert.

Danke an alle die mir hier Tips gegeben haben und sich die Mühe gemacht 
haben sich Gedanken über meine Schaltung zu machen.

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.