Hallo liebes Forum. Noch immer bin ich etwas neu in der Mikrocontroller-Welt. Dachte aber eigentlich, ich hätte inzwischen ein bisschen was gelernt, wohl aber immer noch zu wenig... mein Problem(an dem ich schon die ganze Nacht verzweifle): Ein Atmega 328 steuert zwei max 7219 an. Diese sollen 96 Leds zum Leuchten bringen. Leider leuchten fast immer alle. Manchmal allerdings macht das Programm grob was es soll(LEDS gehen nacheinander an), manchmal nur einer von den beiden MAX7219.Manchmal leuchtet auch nichts. Habe keine Ahnung, nach welchem System. Manchmal gehts nach dem Flashen, manchmal aber auch, wenn ich die Schaltung (nachdem alle LEDS leuchteten) mal kurz von der Stromversorgung nehme. Meistens leuchten alle, am zweithäufigsten keine und ab und an so, wie es soll... Ich mache zum ersten Mal was mit SPI-Kommunikation. Die Signale sind teilweise sehr unsauber: wo man eigentlich ein schönes Rechtecksignal sehen sollte, scheint sich das gleiche Signal nochmal phasenverschoben zu überlagern... oder hat unschöne Ausreißer irgendwohin. Hab leider nur ein Oldschool-Oszi und kann keine Bilder rumschicken. Und dann gehts ja auch manchmal. Wenn das Programm läuft, dann läufts auch und stürzt dann nicht irgendwann ab. Bin grad leider zu müde und genervt um mehr und besser zu schreiben, sorry. Meine Frage: sieht irgendwer im Schaltplan oder Board einen groben Fehler? (Beim Board fehlen die Verbindungen von den Max zu den Jumpern für die LEDS, war faul.) Kanns an EMV liegen? Die Platine hat keine Brücken, einige Lötpunkte sind aber schon recht fett und recht nah an den anderen. Die Kabel zu den Leds sind im längsten Fall ca. 120cm. Die Stromversorgung läuft über eine Powerbank, die durch eine Grundlast nicht abschaltet. Kanns daran liegen? Funktioniert soweit eigentlich ganz gut... Oder mach ich bei der SPI kommnikation irgendwas grundsätzlich falsch? Meinen Testcode häng ich auch mal an... Falls irgendwer ne Idee oder Erfahrung mit dem Problem hat, bin für alles dankbar. Sorry nochmal für die vermutlich etwas wirre Anfrage, muss jetzt schlafen. Danke für jede Hilfe! C. CODE: //AtMega 328 @8MHZ // Outputs, pin definitions #define PIN_SCK PORTB5 #define PIN_MOSI PORTB3 #define PIN_SS PORTB2 #define ON 1 #define OFF 0 #define MAX7219_LOAD1 PORTB |= (1<<PIN_SS) #define MAX7219_LOAD0 PORTB &= ~(1<<PIN_SS) #define MAX7219_MODE_DECODE 0x09 #define MAX7219_MODE_INTENSITY 0x0A #define MAX7219_MODE_SCAN_LIMIT 0x0B #define MAX7219_MODE_POWER 0x0C #define MAX7219_MODE_TEST 0x0F #define MAX7219_MODE_NOOP 0x00 #include <avr/io.h> #include <util/delay.h> #include <math.h> char digitsInUse = 6; void spiSendByte (char databyte) { // Copy data into the SPI data register SPDR = databyte; // Wait until transfer is complete while (!(SPSR & (1 << SPIF))); } void MAX7219_writeData(char data_register, char data) { MAX7219_LOAD0; //sende 2 x 16Bit spiSendByte(data_register); spiSendByte(data); spiSendByte(data_register); spiSendByte(data); MAX7219_LOAD1; } void MAX7219_clearDisplay() { for (int i = 1; i <= digitsInUse; i++) { MAX7219_writeData(i, 0); } } int main(void) { // SCK MOSI CS/LOAD/SS DDRB |= (1 << PIN_SCK) | (1 << PIN_MOSI) | (1 << PIN_SS); // SPI Enable, Master mode SPCR |= (1 << SPE) | (1 << MSTR)| (1<<SPR1); // Decode mode to "No Code" MAX7219_writeData(MAX7219_MODE_DECODE, 0x00) MAX7219_writeData(MAX7219_MODE_SCAN_LIMIT, digitsInUse - 1); MAX7219_writeData(MAX7219_MODE_INTENSITY, 0x0F); MAX7219_writeData(MAX7219_MODE_POWER, ON); MAX7219_clearDisplay(); while(1) { //Test for (int i=1; i <= 6; i ++) { for (int j = 0; j <= 7; j++) { MAX7219_writeData(i, pow(2,j)); _delay_ms(10); MAX7219_clearDisplay(); } } } }
kleiner Nachtrag: jetzt z.B. wars grad so: bei einem MAX leuchteten alle LEDS, beim zweiten keine. Dann steckte ich den Programmer auf die ISP Buchse und siehe da, der MAX, der vorher nicht ging, spulte das Programm ab, der andere leuchtete durchgängig. Es war aber auch schon öfter anders rum. Jetzt geh ich wirklich schlafen... C.
Nochmal Nachtrag: Nochmal alles ausgemacht, ISP-Stecker abgezogen. Stromversorgung angemacht, ISP Stecker aufgesteckt, Programm läuft wie testweise programmiert.ISP-Stecker wieder, nichts läuft. Stecker wieder rauf, läuft. Das gleiche Programm nochmal geflasht, alle LEDs leuchtet. ISP wieder abgenommen, leuchten immer noch alle LEDS. Strom aus und an, nichts leuchtet. ISP wieder rauf, das Programm läuft! ich versteh es nicht. und geh jetzt wirklich schlafen!
claudia schrieb: > Die Stromversorgung läuft über eine Powerbank Ich würde besser ein Steckernetzteil 5V/1A nehmen.
Das Layout ist ein wenig gruselig... Und nimm lieber gleich den MAX7221, der 19er stört wie sau, dedingt durch die steilen Flanken. Software für den MAX7221 ist ein bisschen anders.
claudia schrieb: > irgendwer im Schaltplan oder Board einen groben Fehler? Na ja, die 320mA, die in MAX7219 schaltet, fliessen nicht über deine dünne langen Leitungen. Die Abblockkondensatoren an den 7219 wirken so nicht, so wie du sie montiert hast. Das Layout ist also grottig und kann schon Ursache für die Probleme sein. Allerdings kann das Board sowieso nicht eingesetzt worden sein, es fehlen ja die Hälfte der Verbindungen. Wie hast du die Schaltung den aufgebaut, auf einem Steckbrett ? Man baut Stromversorgungen als Stern. Siehst du, wie auf meinem board.gif die plus und Masse Leitungen für jeden Baustein direkt vom Stromanschlussk kommen ? Und kurz vor dem Baustein die Abblockkondensatoren sitzen. Mit mehr Umarbeitung deines baords hätte ich beide Stromanschlüsse (plus und Masse) unter den MAX7291 an der Seite von Pin12/Pin13 herausgeführt und dort die Abblockkondenstaoren gesetzt.
:
Bearbeitet durch User
Moin Claudia, sieht dein Board so aus wie im Anhang? Bei den 90° Winkeln würden mich dann Reflexionen und Überlagerungen nicht zu sehr wundern. Als du das mit dem Stecker geschrieben hast, dachte ich an ein Masse-Problem. Gruß Beast
Vielen lieben Dank für die Antworten. Entschuldigt die verspätete Antwort, hatte vorher keine Zeit, Lohnarbeit. Das Problem ist gelöst: Tatsächlich war es der ISP-Stecker. Beim Testen habe ich, wenn ich den Stecker als Problem ausschließen wollte, immer den Programmer aus der USB-Buchse gezogen. Allerdings verursachte der aufgesteckte ISP Stecker das Problem. Abgezogen, Strom aus, Strom an, alles lief wie geünscht... @ crazyhorse: Danke für den Hinweis, in Zukunft lieber den 7221 zu nehmen. wird so und nicht anders gemacht! @ laberkopp: tausend Dank an dich, dass du dir auch die Mühe gemacht hast, das Board nochmal anders zu zeichnen! DANKE! Die vielen Verbindungen in der Boarddatei fehlten, weil es ja nur die "einfachen" Verbindungen zu den LEDs waren, wie gesagt, da war ich kurz faul. Die Platine ist genau wie mein grottiges Board auf Lochraster gelötet (mit allen Verbindungen von den MAXen zu den Pinheads und funktioniert jetzt gut. Ohne ISP-Stecker auch ordentlich saubere Signale am Oszi. Ich hätte aber noch zwei Fragen. Vorneweg: ich komme eigentlich aus der künstlerischen Ecke und bring mir seit zwei Jahren selber Elektrotechnik und Mikrocontrollergedöns bei. Deswegen meine Unwissenheit, auch wenn ich mir schon ganz gut was angeeignet hab... 1. Warum funktionieren meine Abblockkondesatoren so nicht? Schaltplantechnisch ist es ja (vermutlich) ok, oder? Kommt die Masse von zu weit her? Bzw es heißt ja immer, Abblockkondensatoren so nah wie möglich an die Eingänge - das gilt also auch für Masse? 2. Plus und Masse probieren tendenziell als Stern aufzubauen, das werde ich in Zukunft berücksichtigen. Dank auch an dich Beastyk. Deinen Kommentar verstehe ich so, dass man die Leitungen eher mit 45 Grad Winkeln verlegt, weil Signale anscheinend in den Leitungen sowas wie reflektieren? 3. Da fällt mir noch ne Frage ein. Als ich das Board gelötet hab, habe ich die Leitungen mit 0,4mm verzinnten Kupferdraht gelegt und dann gelötet. Danach habe ich da dann (bei allen leitungen auf der Unterseite) nochmal großzügig Zinn drübergeballert. Macht man das so überhaupt? Ist ja z.B. bei denen, die dann teilweise oben langgeführt werden, Quatsch. Oder setz ich da lieber enfach hier und da mal einen Lötpunkt und gut ist? Plus und Minus habe ich mit 0,6mm gelegt. Is das eigentlich schon oversized (bei sagen wir mal max. 1A) Ich hab da schon öfter mal nach Hinweisen gesucht, aber alles was ich diesbezüglich fand waren immer Angaben zur Breite der Leiterbahnen bei geätzten Platinen. Gibts auch ne Faustregel für Platinen für Draht mit rundem Querschnitt? Danke nochmal an alle! Und nen schönes Wochenende!
Claudia schrieb: > Deinen Kommentar verstehe ich so, dass man die Leitungen eher mit 45 > Grad Winkeln verlegt, weil Signale anscheinend in den Leitungen sowas > wie reflektieren? Ja, das stimmt erstmal beim layouten von Platinen. Bei elektrischen und auch optischen Leitungen gibt es das auch. Ich wußte allerdings nicht das du deine Schaltung auf Lochraster platziert hast, da kann viel passieren...für ein Testboard kann man das aber machen. Ganz dolle würde ich empfehlen sich auf UTube mal das ein oder andere Video über das richtige Löten anzusehen. Viel hilft nicht viel.... Was die Kabel angeht, da stehen vom Hersteller der Kabel schon dabei was sie aushalten, im Netz und auch hier solltest du etwas über Kabelquerschnitt, Spannung und Strom (Leistung, ohmscher Widerstand und Wärmeentwicklung im Kabel) finden. Gruß Beast
BeastyK schrieb: > Ganz dolle würde ich empfehlen sich auf UTube mal das ein oder andere > Video über das richtige Löten anzusehen. Viel hilft nicht viel.... Und ich empfehle mir das richtige lesen...wenn man eine Anwendung hat die mehr Strom braucht kann man natürlich auch den Kupferleiter noch mit der Kupferleiterbahn auf der Lochrasterplatine mit Lötzinn verbinden. So, hab mich mal verbessert... Schönes WE Beast
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.