Forum: Mikrocontroller und Digitale Elektronik Konstansstromquelle stört µC/LCD


von Thomas (Gast)


Lesenswert?

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

von Andreas K. (derandi)


Lesenswert?

Ist die Konstantstromquelle für die Hintergrundbeleuchtung gedacht?

von Thomas (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Wenn's ein Hardwareproblem ist, dann könnten Schaltung und Aufbau in 
Bildform mehr bringen als reine Prosa.

von Thomas (Gast)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.