Hallo, ich hab hier eine Konstantstromquelle (LED-Treiber) mit 1,4A und einen ARM7 µC, der ein (COG) 128x64px LCD mit UC1601SA ansteuert ... Mein Problem ist nun, dass das LCD einwandfrei funktioniert, wenn die Konstanstromquelle ausgeschaltet ist. Ist sie eingeschaltet gibt es Übertragungsfehler über den SPI-Bus. Das LCD ist per SPI angebunden und hat keine offenen Eingänge, die Signal treiben alle sauber - nachgemessen mit Oszi. Spannungsversorgung (inkl Masse) sind seperat. Wenn ich den Treiber in der Hand halte, scheint die Übertragung zu funktionieren, leg ich sie weg, gibts plötzlich wieder Fehler ... Weiß jemand, was man da machen kann? Grüße, Thomas
Andreas K. schrieb: > Ist die Konstantstromquelle für die Hintergrundbeleuchtung gedacht? Jap, also nein, nicht direkt ... hier gibts ein Video von dem Ding: http://www.youtube.com/watch?v=FSo2oi95M2Y Ist eine Art Mini-Low-Cost Projektor, der einen 64*64px Teil an die Wand beamen soll, daher die starke LED Grüße, Thomas
Thomas schrieb: > Wenn ich den Treiber in der Hand halte, scheint die Übertragung zu > funktionieren, leg ich sie weg, gibts plötzlich wieder Fehler ... Klingt nach offenen Eingängen des MC. Prinzipiell sind offenen Eingänge nicht sehr schlimm, sie erhöhen nur den Stromverbrauch. Deshalb muß da noch ein Softwarefehler hinzukommen, z.B. Interrupts dafür enabled oder beim Einlesen nicht ausmaskiert. Anfänger vergessen sehr oft, alle anderen Pins zu maskieren, wenn sie nur einen Pin einlesen wollen und werten dann immer den ganzen Port aus. Das geht schief. Peter
Peter Dannegger schrieb: > Klingt nach offenen Eingängen des MC. > Prinzipiell sind offenen Eingänge nicht sehr schlimm, sie erhöhen nur > den Stromverbrauch. Jap, ist ein Mini-ARM7-Board, Marke Eigenbau, und ich verwende es praktisch bei jedem neuen Projekt, seit ungefähr 3 Jahren. Die meisten Pins sind tatsächlich offen, weil ich sie nicht gebraucht hab. Ich kann mal die SAM7-Internen Pullups für die unbenutzten Pins aktivieren und schauen, ob sich dann dadurch was ändert ... Hmm ... offener Pin mit Interrupt aktiviert? Zu 95% nicht, das werde ich aber prüfen ... Aber ich seh auch nicht, wie das das SPI stören würde ... Der µC hängt sich auch nicht auf oder sowas, sobald ich den LED-Treiber ausschalte, fängt sich auch das LCD wieder ... Grüße, Thomas
Wenn's ein Hardwareproblem ist, dann könnten Schaltung und Aufbau in Bildform mehr bringen als reine Prosa.
A. K. schrieb: > Wenn's ein Hardwareproblem ist, dann könnten Schaltung und Aufbau in > Bildform mehr bringen als reine Prosa. µC und LCD-Platine: http://home.in.tum.de/~pototsch/webcam/1.jpg http://home.in.tum.de/~pototsch/webcam/2.jpg LED-Treiber: http://home.in.tum.de/~pototsch/webcam/7.jpg http://home.in.tum.de/~pototsch/webcam/8.jpg Zusammengebaut: http://home.in.tum.de/~pototsch/webcam/11.jpg
Btw ... beim 10pol Flachbandkabel zum LCD ist jeder 2te Pin GND. Vlt fängt das ja irgendwelche Störungen ein, weil die beiden Potentiale für µC+LCD und LED-Treiber getrennt sind ...
Was mir an der Platine als Erstes auffällt ist das was mir dort nicht auffällt: Kondensatoren zwischen VDD/GND dicht an den entsprechenden Pins. http://www.atmel.com/dyn/resources/prod_documents/doc6258.pdf
A. K. schrieb: > Was mir an der Platine als Erstes auffällt ist das was mir dort nicht > auffällt: Kondensatoren zwischen VDD/GND dicht an den entsprechenden > Pins. Bei welcher Platine? Auf der LED-Platine gibs die 100nF direkt an der Versorgungsspannung und einen 10uF Tantal, auf der ARM7-Platine gibts 5*100nF und 2*4,7uF auf der Unterseite des Moduls, direkt an den Spannungspins. 100nF-Cs hab ich mir beim LED-Treiber gespart, wobei sie wohl nicht falsch wären ...
Thomas schrieb: > Bei welcher Platine? Der Controller-Platine. Wenn die hinten sind, dann ok, aber vor vorne sind die eben nicht zu erkennen. Ein Schaltbild funktioniert in Bildform viel viel besser als in Textform.
Ich hab das Problem gefunden ... War software ... Vlt interessiert es jemanden: Es gibt 2 Funktionen, die Daten oder Kommandos an das LCD schicken:
1 | void lcd_command(char c) |
2 | {
|
3 | AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, SPI_CD); |
4 | spi_SendData(0,c); |
5 | }
|
6 | |
7 | void lcd_data(char c) |
8 | {
|
9 | AT91F_PIO_SetOutput(AT91C_BASE_PIOA, SPI_CD); |
10 | spi_SendData(0,c); |
11 | }
|
und die spi_SendData-Funktion:
1 | void spi_SendData(u8 adr, u16 data) |
2 | {
|
3 | volatile unsigned int sr; |
4 | |
5 | do
|
6 | {
|
7 | sr = AT91C_BASE_SPI->SPI_SR; |
8 | } while (!(sr & AT91C_SPI_TXEMPTY)); |
9 | |
10 | unsigned int tdr = 0; |
11 | tdr |= AT91C_SPI_LASTXFER; |
12 | tdr |= (adr & 0x0000000f) << 16; |
13 | tdr |= (data & 0x0000ffff); |
14 | AT91C_BASE_SPI->SPI_TDR = tdr; |
15 | }
|
Das Problem war, dass nach dem Transfer eines Datums/Kommandos gleich neue Daten verschickt wurden. Es wird davon ausgegangen, dass die spi_SendData-Funktion so lange wartet, bis der TX-Buffer leer ist. Das, was aber passieren kann - und das war anscheinend haarscharf an der Grenze - war, dass das Bit SPI_CD (Selektion Datum/Kommando) gesetzt/gelöscht wurde, wenn der SPI-Transfer noch nicht beendet war, weil an der Stelle nicht gewartet wurde, dass der TX-Buffer leer ist. Erstaunlicherweise hat es immer funktioniert, wenn die 5W-LED und der Treiber aus waren, aber nur selten, wenn sie an waren. Lustig sowas ;-) Erst durch Messung der Signale im Zeitbezug zueinander bin ich dem auf die Spur gekommen ... Ich dachte wirklich, irgendwas wäre weich oder falsch konfiguriert oder fehlerhafte Hardware ... Vielen Dank an alle, die versucht haben mir zu helfen, auch wenns zum Schluss garnicht die Hardware war ... Grüße, Thomas
Finde ich ne lustige Idee übrigens, sieht ziemlich "low cost" aus. Das Objektiv vorne kriegt man ja auch günstig von Pollin o.ä. wenn ich nicht irre.
Simon K. schrieb: > Finde ich ne lustige Idee übrigens, sieht ziemlich "low cost" aus. Das > Objektiv vorne kriegt man ja auch günstig von Pollin o.ä. wenn ich nicht > irre. Ich hab das Objektiv für 6EUR bei Eb*y ersteigert :) Glaub, das teuerste ist da nur das selbstgebastelte µC-Board und da kann man ja eigentlich alles hernehmen, was man möchte. Ansonsten hab ich die LED vom Reichelt (7EUR), Kleinkram für den LED-Treiber (5EUR), einen alten CPU-Kühler, ein paar Linsen von Astromedia (1,50EUR pp), ein polnisches 128x64px LCD für 8,50EUR ... Für vieles reicht so ein monochromer LowRes-Beamer aus :) Grüße, Thomas
Thomas schrieb: > Ich hab das Problem gefunden ... War software ... ... Das ist sehr schön, daß auch mal jemand etwas Feedback gibt. Man sollte meinen, sowas wäre selbstverständlich, wenn man andere um Rat fragt. Aber leider herrscht heutzutage fast nur Schweigen im Walde. Man sollte in der Schule ein Fach Höflichkeit und Freundlichkeit in den Lehrplan aufnehmen, es täte Not. Hast jetzt nen dicken Pluspunkt bei mir. Peter
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.