Im WWW Suchen

Benutzerdefinierte Suche
   

USB-LCD

Vorgeschichte:

 

Ich habe die Schaltung Hauptsächlich entwickelt um ein LCD, das damals (12/2003) am Parralellport lief, über USB mit dem sehr guten Programm JALCDs zu betreiben. Außerdem wolle ich die Assemblersprache der Atmel AVR Reihe erlernen. Ich habe früher schon auf anderen 8 und 16Bit Systeme Assembler (6502 und MC68000 ) programmiert weshalb mir der Umstieg nicht all zu schwer fiel. Das Projekt ist ständig gewachsen, so kam mit der Zeit die PWM-Steuerung der Hintergrundbeleuchtung und Kontrast hinzu, sowie der Bootscreen im EEprom und nicht zuletzt die geätzte Platine, für die ich mich extra in das Elektronik CAD Programm EAGLE eingearbeitet habe und das obwohl ich eingefleischter Lochraster-Freak bin, oder besser gesagt war.


usblcdDas USB-LCD hat die gleiche Funktion wie das USB-LCD2, ist aber Hauptsächlich mit DIL ICs aufgebaut und kommt mit einer Einseitigen Platine aus. Der einzige SMD IC ist der FT232BM, der auf der Lötseite montiert wird. Der FT232BM ist mittlerweile nicht mehr lieferbar und wurde durch den FT232BL (Bleifrei) ersetzt, der kompatibel mit der BM Version ist. Oben im Bild ist ein (nachträglich eingelöteten) Max809 Resetbaustein zu sehen, der nur benötigt wird wenn ein alter AT90S2313 benutzt wird. Dieser soll einem Bug im AT90S2313 entgegenwirken, der bei abfallen der Betriebsspannung (ausschalten) noch Datenmüll ins Eprom schreibt. usblcdDie Schaltung wurde ursprünglich mit dem  Mikrocontroller AT90S2313 entwickelt der mittlerweile ausläuft. Der Nachfolger vom AT90S2313 ist der ATiny2313 der abwärtskompatibel zum AT90S2313 ist. Dazu müssen jedoch ein paar Fusebits verändert werden.Da dies schon kompetente Leute  sehr gut erklärt haben, mach ich es mir einfach und verlinke hier zu Mikrocontroller-Projekte.de. Einen sehr einfachen und tauglichen Programmer gibt es bei Elektronik-Projekte von Scott-Falk Hühn.

 

 

Technische Daten:

  • Läuft mit jaLCDs und LCD-Smartie ohne irgendwelche Plugins.
  • Kontrast und Backlight über Software einstellbar.
  • Bootscreen in EEprom speicherbar (mit Terminalprg. Hyperterm o.Ä.)
  • 19200 Baud (8N1) Handshake off
  • Unterstützt werden alle gängigen Text-LCDs mit einem(!) HD44780Controller
  • Das wären 1x16,1x20,2x16,2x20,4x16 und 4x20
  • Stromversorgung bis fast 500mA direkt an USB

Für Programmierer:

  • Einfache Ansteuerung über Virtuellen Comport z.B. COM3: ,im Terminalprogramm sieht man die Zeichen die man eintippt
  • Alle möglichen Funktionen zur Cusorsteuerung
  • Benutzerdefinierte Zeichen.
  • Der Bargraph (im Design von jaLCD) ist in der Firmware und auch außerhalb von jaLCDs nutzbar.
 

Funktion:

Der AVR emuliert ein serielles LCD Display von Cristallfontz, (aber nur soweit das es mit JaLCDs läuft). Um Portleitungen zu sparen habe ich mich entschieden das LCD im 4-Bit Modus zu Betreiben, so brauche ich  nur 6 Portleitungen um das LCD zu steuern und 2 für den UART (serielle Schnittstelle).
Da der AVR 15 Portleitungen hat sind also noch 7 Portbits frei, von denen ich aber noch 2 Reserviere um die Hintergrundbeleuchtung und den Kontrast (über PWM- Pulsweitenmodulation) zu Steuern.
Grob gesagt wird z.B. die Beleuchtung andauernd ein und ausgeschaltet und zwar so schnell, dass das Auge das nicht mehr mitbekommt.
5 Portleitungen sind also noch frei, die der Anwender nach Lust und Laune mit Relais, LEDs oder Transistoren beschalten kann.  Die 5 Ports sind in der Firmware als Ausgang programmiert und können vom Anwender über JaLCDs angesteuert werden (dazu später mehr).
Die komplette Firmware ist in Assembler geschrieben und der UART besitzt eine eigene Interruptroutine sodass die Kommunikation über 19200Baud  laufen kann.

Die Schaltung

Hier die Teilschaltung des AVR:

An TxD und RxD kommt der FT232BM, für einen Anschluss an Com1: z.B. währe auch ein Max232  möglich.avrschIch weiss nicht mehr mit welchen Programm ich damals die Schaltpläne gezeichnet habe, Eagle war es jedenfalls nicht.

Links im Schaltplan ist der übliche 4 MHz Quarz mit den 27pF Kondensatoren und die Power-on-Reset Schaltung mit R1 und C1 zu sehen. An PD0..4 kommen die Datenleitungen des LCDs D4..7 (4-Bit Modus), an PD5 und 6, 2 weitere Steuerleitungen des LCDs.

Kontrast:

Wird Pin 18 des AVR an das 10k Poti angeschlossen (Jumper wie gezeichnet) liegt der Kontrast-Eingang des LCDs am PWM-Signal. Ist der Jumper in Stellung +5 Volt hat man eine herkömmliche Kontrastreglung die nur über den 10k Poti (Trimmmer) eingestellt werden kann.
Da ich unterschiedliche LCDs ausprobiert habe und jedes seine eigene optimale Kontrastspannung hat, hab ich mich entschlossen den herkömmlichen 10k Trimmer einzubauen, da man so optimal den Kontrast auf das jeweilige LCD einstellen kann.

Abgleich:

Man stellt den Kontrast in der Software auf 0, und dreht das Poti so, dass man die Schrift auf dem LCD gerade noch sehen kann. Danach stellt man den Kontrast auf 50 - 70 und das Bild ist ok. Der 10 uF Elko ist zum Glätten der PWM Spannung und bildet zusammen mit dem 10k Poti einen Tiefpass-Filter. Sollten noch Streifen auf dem LCD zu sehen sein kann man den Wert auf 47 µf erhöhen.

Nun kommt der FT232BM ins Spiel.

Dieser Chip bringt wie gesagt alle Treiber mit und legt bei der Installation des VCP-Treiber einen virtuellen Com Port an (bei mir COM3). Der AVR kriegt also gar nicht mit ob er nun am USB oder an einem normalen Com Port hängt. Würde man an Txd und Rxd des FT einen Max232 anschließen könnte man eigentlich jedes Gerät mit serieller Schnittstelle an USB betreiben. Der FT232BM ist (fast) nach dem Designers Guide Page 6 angeschlossen, wobei Pin14 (PWRCTRL) mit Masse verbunden ist. Das SAGT dem Chip, dass er von der USB-Schnittstelle mit Spannung versorgt wird. Der 6 MHz Quarz mit den beiden 27 pF Kondensatoren kann natürlich (wie im Datenblatt des FT angegeben) durch einen 6 MHz Resonator ersetzt werden. 

Die Ferrit Perle (die hohe Frequenzen ausfiltern soll) hab ich mir von einem alten Mainboard ausgelötet. Ist nichts anderes zur Hand genügen auch ein paar Windungen Kupferlackdraht (Luftspule) oder eine Drahtbrücke

Die LEDs Tx und Rx Blinken lustig bei Betrieb und signalisieren, dass der FT232  Daten empfängt oder sendet. Will man nur eine LED anschließen (siehe ?Die Platine?) kann Pin 11 und 12 gebrückt werden und nur eine LED (natürlich mit dem 220 Ohm Vorwiderstand) eingebaut werden. Siehe Datenblatt Seite 20.
Pin 15  (PWREN#) geht auf Low sobald der FT initialisiert ist und schaltet die Hintergrundbeleuchtung ein (dazu später mehr).

ft232

Der 93C46 ist ein sogenanntes EEprom (nicht zu verwechseln mit dem EEprom der im AVR enthalten ist) und braucht nur in besonderen Fällen bestückt zu werden:

  1. Es werden mehr als ein FTDI Chip am USB betrieben. Dann braucht die jede Schaltung eine Eindeutige ID-Nummer.
  2. Man möchte mehr als 100 mA am USB-Port ziehen.

Also Datenblatt vom LCD lesen und schauen was die Hintergrund Beleuchtung zieht. In diesem Fall muss noch ein Leistungstransistor an Pin 15 des FT angeschlossen werden, der dann die Hintergrundbeleuchtung schaltet. Das EEprom wird in der Schaltung (direkt über USB) programmiert und zwar mit MProg.
Dazu müssen aber die Direkttreiber von Ftdi Installiert werden, da das Tool sonst das EEprom nicht findet. Man lädt einfach die Beispielkonfig in MProg und ändert den Wert auf (max.) 490 mA, (laut FTDI kann es bei 500 mA zu Problemen kommen) außerdem ist ein Helpfile dabei (leider englisch), dass die anderen Parameter gut erklärt. Nach der Programmierung des EEprom wird der Direkttreiber wieder deinstalliert und der VCP-Treiber installiert. Das geht recht problemlos, da ein Deinstallationstool mitgeliefert wird.

Die Schaltung für die Hintergrundbeleuchtung:

backlightBei dieser Schaltung muss das EEprom bestückt sein und mit Mprog auf 490mA max. programmiert werden. Beim anschließen der Schaltung an den USB sind nämlich nur 100 mA zulässig und der FT muss die 490 mA erst vom PC anfordern. Ist dies geschehen und die Initialisierung des FT hat geklappt, zieht der Chip Pin 15 auf Masse. Das hat zur folge das Q1 sperrt und die Basis des BD135 über R2 angesteuert wird. Das dauert einen kleinen Moment da C1 erst noch geladen sein will (Softstart).
Q3 wird benutzt um die Hintergrundbeleuchtung per PWM anzusteuern. Bei einem High-Impuls an der Basis von Q3 wird die Basis vom BD auf Masse gezogen so das dieser sperrt und die Hintergrundbeleuchtung (kurzzeitig) abschaltet. Kommen die Impulse schnell genug ist kein flackern der Beleuchtung sichtbar und das Backlight wird "gedimmt"

R3 berechnet sich wie folgt: Braucht die Hintergrundbeleuchtung (Datenblatt lesen) 4,2 Volt bei einem Strom von 270 mA rechnet man nach dem Ohmschen Gesetz R=U/I  (5Volt ? 4,2Volt) / 0,27Ampere  = 2,96 Ohm.

Dieser krumme Wert gibt es natürlich nicht zu kaufen und man nimmt den nächstmöglichen aus der Normreihe, in diesem Fall 2,7 Ohm oder 3,3 Ohm. Dieser Widerstand muss belastbar sein mit P=U*I  (5 - 4,2) * 0,27 = 0,216 Watt. 0,5 Watt reicht also Dicke. Braucht die Hintergrundbeleuchtung weniger als 100 mA, bleibt Pin 15 des FT232BM unbeschaltet d.h. R1 und Q1 können weggelassen werden. Auch das EEprom kann man sich sparen.
Die genaue Typenbezeichnung der Transistoren ist nicht kritisch, man kann statt des BC547 auch einen BC107, 237 o.Ä nehmen (TUN) bei Q2 muss man nur schauen (Datenblatt), dass er den maximalen Strom der LCD-Hintergrundbeleuchtung treiben kann.

Hier der komplette Schaltplan:

komplettschaltung

Karsten Barth hat sich die Arbeit gemacht und die komplette Schaltung mit Eagle neu zu Zeichnen, und zur Verfügung zu stellen. (THX)


Hat der Aufbau geklappt meldet sich beim anschließen der Schaltung Windows mit "Neues Gerät blah bla ".
Nun werden die USB und Serial Treiber installiert.
Der Treiber legt eine neue (Virtuelle) Serielle Schnittstelle an mit der nächstmöglichen freien Portnummer.
Hat man also schon 2 Serielle am Rechner wird Automatisch eine neue com3 Schnittstelle angelegt.
Jetzt im Gerätemanager (USB-Serial-Port) 19200 Baud einstellen.
Das LCD ist nur soweit kompatibel mit den Cristallfonts_LCDs, dass es mit jaLCDs läuft. Und das OHNE zusätzlichen Treiber und dll.
Außerdem hab ich Testweise den (bei Cristall) unbenutzten Befehl "16" benutzt um die 5 freien PortB (PB2-PB6)Leitungen des AVR als Ausgang zu nutzen.
Ich nenne mal PB2 User0, PB3 User1 usw.
Wenn ich also in eine Zeile in der jaLCDs (configtool) z.B. $ascii:16§$ascii:3§ eingebe werden User0  und User1 Eingeschaltet User 2,3 und 4 werden ausgeschaltet.
Da PB0 und 1 am FT angeschlossen sind,  wird der wert 2 mal nach links geschoben.

Noch ein paar Beispiele:

Es wird also der binäre Wert des entsprechenden Portbits (ab PB2) als Parameter des Befehl 16 gesendet.

Damit ergeben sich völlig neue Möglichkeiten.

Man kann z.B. eine Lüftersteuerung realisieren in dem man mit ?If? Befehlen MBM nach der Temperatur fragt und abhängig davon mit jaLCDs den Lüfter schaltet.

Die Platine

pcbZwecks einfacherem Aufbau, hab ich mich entschlossen eine einseitige Platine zu entwerfen, bei dem sich nur der FT232BM (als einziges SMD-Bauteil) auf der Unterseite befinde.
Die Maße der Leiterplatte sind ca. 3,2 x 10 cm. Die Lochrasterfläche rechts ist für Erweiterungen des Userports gedacht.
Da die Platine einseitig ausgeführt ist war es nötig 2 Drahtbrücken und 3 Verbindungen auf der Lötseite der Platine anzubringen (im Foto oben mit Fädeldraht hergestellt), dafür spart man sich aber die aufwendigere Herstellung einer Doppelseitigen Platine und das Durchkontaktieren.

Stückliste:

Halbleiter:

1          FT232BM
1          AT90S2313
1          93c46(56,66)
1          BD135 (BD137, BD139)
2          BC547 (BC237, BC107)
1          LED 3mm

Widerstände:

2          27 Ohm          (alle Widerstände ausser RX)
1          220 Ohm        1/6 oder 1/8 Watt RM5.08)
1          470 Ohm
1          1 KOhm
bestückung1          1,5 KOhm
1          2,2KOhm
3          10 KOhm
1          15 KOhm
1          10 KOhm Trimmer

Kondensatoren:

1          10 nF
1          33 nF
5          100 nF
2          10 uF              Elko

..und dann noch:

1       6MHz    Resonator
1       4MHz    Resonator
Anstatt der Resonatoren kann auch ein Quarz benutzt werden, die 27 pF Cs (siehe Schaltplan) werden dann auf der Lötseite Bestückt.
1          IC-Fassung 8pol
1          IC-Fassung 20pol
1          Wannenstecker 10pol + Passendes Flachbandkabel mit Stecker
1          USB-B Buchse
1          Stiftleiste mit Jumper 3pol
1          IC-Leiste (ISP) 6pol

Beim Bestücken sollte man sich an die üblichen Regeln halten. Also zu erst die niedrigen Bauteile wie Drahtbrücken, Widerstände und sich zu den größeren Bauteilen vorarbeiten. Zum Schluss wird die USB-B Buchse eingelötet.
Beim verlöten vom FT232BM sollte man Entlötlitze bereithalten, da es fast unmöglich ist das Teil zu löten ohne das sich ab und zu Brücken bilden.

Tipp: Aufbau auf Lochraster

rasterDer FT232BM Chip hat einen Pinabstand von 0,8 mm (ein drittel des normalen Lochrasters).
Dass es (gerade) noch möglich ist diese Chips auf Lochraster zu löten zeigt folgendes  Bild  von meinem 1. Prototyp.

Ich habe es so gemacht:

Zuerst habe ich den Chip auf die Lochrasterplatine geklebt. Dann habe ich Silberdraht 0,3mm verwendet, den ich immer zuerst von unten auf das Lötpad gelötet habe (wichtig, das fixiert den Draht), danach lässt sich der Silberdraht wunderbar (unter der Lupe) biegen und abschneiden. Da man beim abschneiden des Drahts diesen etwas anheben muss, hab ich ihn vorher mit einem Skalpell etwas angeritzt um die genaue Stelle anzuzeichnen. Durch stärkres anritzen ist es sogar möglich den Draht exakt an der Stelle zu brechen (mehrmals hin und her bewegen). Bei diesem dünnen Silberdraht dauert der Lötvorgang höchstens eine halbe Sekunde. Ich habe in Foren gelesen, das anstatt Silberdraht, auch Kupferlackdraht (Fädeldraht) oder einzelne Litzen von Netzkabeln o.Ä. benutzt werden kann. Auch gibt es Adapterplatinen für den SMD-Chip (diese kosten allerdings ca.4-5 Euro ). Da hilft nur ausprobieren und das Beste für sich herausfinden.

Download

Alle Benötigten USB-LCD Dateien gezippt.