Hallo zusammen,
Kurz-Intro:
Im Rahmen meines aktuellen Projektes brauchte ich ein LCD Display.
Allerdings wurden trotz Wechsel auf den ATMega1284 die Beinchen etwas
knapp, da dieser jedoch mit einem zweiten UART aufwartet habe ich ein
kleines Zwischenprojekt eingeschoben, da...
nach Studium der gängigen Distributoren-Kataloge schnell klar war, ein
serielles Display ist fast überall verfügbar. Der Blick auf den Preis
ernüchterte, für das Geld? Wofür programmiert man denn gerade einen µC?
Selber machen, da hat man auch noch mehr Spielraum...
Vier Testbestellungen in China platziert, da kostet das HD44780
kompatible 16x2er gerade mal einen Euro, wenn drei verloren gehen, bin
ich immer noch billiger weggekommen...(aber es kamen alle an :-))
Da, wie ich meine, das Ergebnis ganz nett ist, will ich es mal nicht
vorenthalten und zum Allgemeingut machen:
Zum Thema:
Also wurde es was es ist, ein eigener Display-Treiber für die serielle
Schnittstelle auf Basis des ATTiny2313A, da es sich um ein Eval-Board
mit Jumpern und LED´s für RX und TX handelte, habe ich den Footprint des
20x4er Displays gewählt und alles in DIL/DIP ausgeführt. Auch der
Anschluss des Displays ist nicht Deckungsgleich zur LCD-Platine, sondern
erlaubt mittels Wannenstecker den schnellen Wechsel der Displays. Um in
der Entwicklungsphase mit dem PC zu kommunizieren wurde zusätzlich ein
Pegelwandler eingeplant, dessen 1. Treiber hängt via Jumper an den
RXD/TXD-Leitungen. Der 2. Treiber kann via Jumper an die am höchsten
priorisierten Interruptpins (INT0/INT1) angeschlossen werden, um
Flußkontrolle mit RTS/CTS zu realisieren, benötige ich zwar nicht, aber
da die PINS gerade günstig lagen ist es mit auf der Platine, ebenso der
6-pol ISP-Header. Trennt man den Wandler ab, kann man über die
Jumper-PINS auch gleich von µC zu µC kommunizieren. Die endgültige,
abgespeckte Version wird dann ein Backpack werden oder gleich mit auf
die Hauptplatine wandern.
Zusätzlich zu der Ausgabe der empfangenen Daten sind ein paar
Spielereien implementiert, so lässt sich der Kontrast via PWM regeln und
das Backlight via Mosfet an- und ausschalten. Ebenso ist ein
Piezo-Schallwandler auf der Platine, der an den PWM-Ausgang von Timer0
gekoppelt werden kann, das ermöglicht im Gegensatz zu einem reinen
An/Aus-Summer sogar verschiedene Tonhöhen (OK, ich vergas diesen bei
meiner letzten Bestellung, daher auf den Bildern eine altes, halbes
N***a-Headset ;-))
Angesprochen werden diese Bauteile im Moment mit den freien Zeichen im
Display-Zeichensatz (so wie vor Jahrzehnten schon die Steuerbefehle
übermittelt wurden), sofern der entsprechende Jumper gesetzt wird (PD4
gegen Masse). Sofern man Binärdateien "snifft" hat man sonst ein
Rockkonzert auf dem Schreibtisch (Licht&Ton). Da die Firmware im Moment
noch Q&D ist, behalte ich diese zunächst für mich, im Moment nutzt Sie
den Speicher des ATTiny um den Test zeilenweise zu scrollen, das passt
mit kleinem Empfangspuffer so gerade noch bei 20x4.
Die frei konfigurierbaren PINS des ATTiny2313 sind PD0 bis PD5, der Rest
ist fest verdrahtet, es sei denn, man nutzt den Display-Port gleich ganz
anderweitig und schließt noch was an den ISP-Header an.
Auf den Bildern im Anhang ist meine aktuelle Testconfig, sowie eine
nicht fertig bearbeitete Platine (belichtet, geätzt, aber nicht
zugeschnitten, gebohrt oder bestückt). Diese Platine ist "zu
verschenken". Wer Zeit und Lust hat, sowie verspricht sie zeitnah zu
bestücken und hier einen netten Beitrag dazu schreibt, kann diese haben.
Ich würde mich freuen wenn derjenige ein 20x4er Display sein eigen
nennt, da man sich dann über die Firmware austauschen könnte, alternativ
würde ich auch eine kreative Verwendung begrüßen, etwa etwas in der Art:
Die User-Defined-Characters per RS232 mit den Darstellungen der Noten c
d e f g a h füllen und dazu der Platine Töne beibringen. (Wäre was für
meine kleine Tochter).
Wer also Lust hat, bitte hier melden, an den User mit den besten
Argumenten schicke ich die Platine kostenfrei raus, Einsendeschluss ist
gleitend, jedoch spätestens kommenden Sonntag Abend.
Gruß Dominik
P.S.: Was noch benötigt wird:
ATTiny2313
MAX232
Baudratenquarz (ich nutze 9,216 MHz)
LM7805 (Kühlkörper unnötig)
2x6er PIN-Header
2x2x1er PIN-Header
Widerständer/Kondensatoren
(Die Bestückung kann auch vielfach mit Drahtbrücken vereinfacht werden)
3 LED´s (optional)
Hallo zusammen,
die Firmware ist jetzt soweit bereinigt, stelle ich mal hier zur
Verfügung.
Der LCD-Treiber unterstützt Lesen und Schreiben, das aktuelle
Testprogramm mit RX/TX-Funktion ist auch dabei. Passt so gerade zu 100%
in den 2313, werde wohl auf den 4313 ausweichen damit noch ein paar
Fukntionen Platz haben.
Der LCD-Treiber ist recht universell gehalten und kann sicher dem ein
oder anderen gute Dienste leisten.
Gruß Dominik
Mir ist der große Aufwand nicht ganz klar. Ein normales LCD kann man per
I2C-Portexpander (PCF...) zu einem seriellen machen. Natürlich dann I2C
und benötigt 2 Pins. Aber der Aufwand besteht praktisch nur im verbinden
des PCF mit dem LCD und dem Controller.
gruß cyblord
Hallo,
Dennis Kaufmann schrieb:> Nur damit ich es verstehe...>> Atmega1284 -> serielle Schnittstelle -> LCD> ?>> Warum nicht i2C? Dafür gibts doch schon etliche Libs...
im Moment PC->RS232->ATTiny2313->LCD, ich wollte eine eigene Lib, die
die normalen ASCII-Co-Steuerzeichen erkennt. So funktioniert das LCD wie
ein "Anno-Dazumal"-Terminal mit Beeper und Co. Funktionen für Backlight,
Baudrate, Progressbar und das Einspielen des User-Characters sind schon
vorhanden, weitere folgen sobald der 4313 ankommt, den musste ich
anderweitig beziehen weil bei meinem Standard-Distributor nicht auf
Lager und trotz recht sparsamer C-Programmierung ist der 2313 schon
randvoll.
cyblord ---- schrieb:> Mir ist der große Aufwand nicht ganz klar. Ein normales LCD kann man per> I2C-Portexpander (PCF...) zu einem seriellen machen. Natürlich dann I2C> und benötigt 2 Pins. Aber der Aufwand besteht praktisch nur im verbinden> des PCF mit dem LCD und dem Controller.>> gruß cyblord
Grundsätzlich ist das ganze ein Evalboard, soll aber der Entwicklung
einer Ein-Ausgabe-Schnittstelle für die vom ATMega gesteuerte Maschine
werden, dieser hat auch keine Zeit sich mit der LCD-Ansteuerung zu
beschäftigen, da harte Echtzeitbedingungen gegeben sind. I2C und SPI
wären möglich gewesen, aber dann hätte ich die Möglichkeit verloren das
Gerät auch an den Steuer-PC anzuschließen, auch sind die RS232-Pegel
etwas schöner um das Display etwas vom Steuer-µC zu entfernen,
wahrscheinlich wird das ganze eher eine Fernbedienung. Den regulären SPI
habe ich an die externe Speicherbank vergeben, diese ist auch im
permanenten Zugriff, der Bus ist also belegt. Den 2. USART im SPI oder
I2C-Modus zu betreiben wäre noch gegangen, aber mittels zweitem µC ist
zumindest die Ausgabe der Benutzernachrichten ein Shoot-and-Forget was
zum Großteil die Hardware des Atmega im Hintergrund erledigt während
dieser mit seiner Takt-Richtungs-Berechnung und Ausgabe beschäftigt ist.
Das ganze ist ja quasi ein zwei-Prozessor System. Die einzigen beiden
Interrupts auf dem ATMega sind COMPA und COMPB, und diese warten sogar
noch auf bestimmte Zählerstände damit Sie zeitgenau die Ausgaben machen
können und nicht vom ablegen auf dem Stapel versetzt wirken, der Rest
läuft über freie Timeslots.
Danke übrigens für den Tip mit dem PCF, ich habe mir den 8574 mal
angesehen, der steht beim nächsten Mal auf der Einkaufsliste, scheint
sehr brauchbar, wobei bei diesem Projekt der Tiny die Tastatureingaben
wohl über Schieberegister einlesen wird.
Gruß Dominik