Geschätztes Forum, ein kleines Beispiel, wie ein Atmega8 ein 320x240 STN LCD per TWI oder USART / RS232 ansteuern kann. Benedikt lieferte eine sehr schöne Vorlage für dieses Projekt. Besonderheiten: - Display: 320x240 - Spalten/Zeilen:20x10 - Schriftgröße 16x24 - ASCII 0...127 darstellbar - TWI/I2C + USART - 256 Byte FIFO Puffer - Der Ausgang BUF signalisiert "Daten noch im Puffer", kann bei Bedarf abgefragt werden, um einen Überlauf zu verhindern. - Cursor blinkend, frei wählbar und abschaltbar - BEEP nutzbar - LCD-Helligkeit per PWM einstellbar - Inverse einzelne ASCII-Zeichen möglich - Invertierung ganzer Zeilen - Invertierung gesamtes Display (z.B. für Nachtmodus) Ansteuerung: ASCII(0)+(Parameter): Command-Modus, Parameter s. Assembler-Code (z.B. alles Clear, Zeile markieren, Cursor positionieren, Reset, BEEP, INVERS) ASCII (1...127): Zeichen wird an aktueller Cursorposition ausgegeben ASCII (129...255): Inverse Darstellung Einen einfachen Fontgenerator / Schriftgenerator stelle ich Euch später noch zur Verfügung, somit kann jeder seinen persönlichen Schriftfont bei Bedarf zusammenbasteln. Bernhard
:
Bearbeitet durch User
Der 16x24 Fontgenerator: Hab versucht ihn in der Bedienung einfach zu halten, er ist speziell für dieses Projekt konzipiert 16x24 PIXEL und wurde in VBA - Visual Basic programmiert. Kann bei Bedarf verändert und verbessert werden Bedienung: 1. Programm starten "ZEICHENGENERATOR.exe" und eine Projektdatei (sft) öffnen. 2. ASCII-Zeichen editieren und speichern, ein Bemerkungsfeld lässt Eintragungen zu. 3. Font exportieren. Sollte der externe Editor nicht öffnen, bitte separat die "OUT_16x24.asm" (Textdatei) öffnen. 4. Den Inhalt der "OUT_16x24.asm" in das Assembler-File "LCD_ini.asm" kopieren, also die vorhandene Tabelle ersetzen. 5. Sich am eigenen erstellten Zeichensatz erfreuen :-) Bernhard
:
Bearbeitet durch User
Löblich, der Download scheint auch den Sourcecode zu enthalten. VBA allerdings dürfte das nicht sein, sondern VB. (VBA ist die Macrosprache, die in Office-Anwendungen wie Word, Excel oder Visio eingesetzt wird).
Du hast Recht, es ist VB, hab's soeben nachgelesen, danke für die Korrektur. Bernhard
Hallo sehr interessant. Gibt es eine Adresse wie bei den I2C Expander IC´s? Ich würde das gerne für meinen 3D-Drucker verwenden. Thomas
@Thomas
>Gibt es eine Adresse wie bei den I2C Expander IC´s?
ja, sie lautet 0xE0 (224)
Lässt sich in der "LCD_ini.asm" umstellen, GENERAL_CALL kann bei Bedarf
auch aktiviert werden, wenn mehrere Displays am Bus den gleichen Inhalt
anzeigen sollen
.equ TWI_SLAVE_ADRESSE = 112 ; SLAVE-ADRESSE (1...127)
.equ TWI_GENERAL_CALL_ENABLE= 0 ; GENERAL CALL
Bernhard
Hi hab das jetzt soweit fertig, aber mit nem 640 x 240 (also doppelt so breit). Meine Frage ist, kann man das irgendwo in der Größe verändern? Thomas
Hallo Thomas, eigentlich müsstest Du nur den Wert für XSize von 20 auf 40 ändern in der "LCD_ini.asm" (momentan: .equ XSize = 20) Ich hab mal schnell den Wert geändert, teste es einfach mal. Kann sein, dass noch ein paar andere Parameter geändert werden müssen, damit die Formatierung wieder stimmt, hoffentlich flimmert das LCD nicht. Bernhard
:
Bearbeitet durch User
Hallo Bernhard cool das Du so schnell Antwortest. Ich hab das getestet, und es flimmert wirklich ein bischen...is aber nicht schlimm. Das einzige ist, es zeigt jetzt immer den Zeichensatz an und nicht mehr Deine Begrüßung. Aber was viel schlimmer ist, ich habe das über I2C an meinen 3D-Drucker angeschlossen und es zeigt nichts an. Ich hab die internen Pull up Widerstände in der LCD_TWI abgeschaltet bzw. ein ";" davor geschrieben, und zwei externe Widerst. mit 2,2k Ohm eingebaut. Ich hab das mal irgendwo gelesen das die Widerstände für SDA und SCL zwischen 2,2k und 4,7k sein sollten. Über RxD und TxD weiß ich nicht wie man das in der Firmware von dem Drucker Programmiert, I2C/TWI würde gehen. Gibt es eigentlich eine Library für Deine Schaltung bzw. Programm? Oder geht da auch ne Standard Lib? Ich hab das mit dem I2C mit beiden Firmware Versionen probiert. Viele Fragen....aber ich hoffe das nervt nicht so sehr. Erstmal vielen Dank is ne total coole Sache Deine Schaltung, weil es da nicht viel von im Internet gibt und ich war echt Froh wie ich das gesehen hab. Thomas
@Thomas >und es flimmert wirklich ein bischen... Könnte man bestimmt noch verbessern, doch dazu sind ein paar Programmeingriffe nötig, schreib mir bitte mal eine e-mail, dann kümmere ich mich um diesen speziellen Fall, kann sein, dass der ATmega mit seinen 16MHz doch an seine Grenzen stößt. >Aber was >viel schlimmer ist, ich habe das über I2C an meinen 3D-Drucker >angeschlossen und es zeigt nichts an. Ich setze voraus, dass der 3D-Drucker auch Daten als MASTER senden kann. Die internen Pull-Ups hatte ich aktiviert, der Widerstandswert beträgt ca. 30kOhm für SDA und SCL PIN gegen +5V, die kannste aktiviert lassen, reicht zumindest bei relativ langsamen Übertragungsraten aus. Bei schnellen Übertragungsraten und längeren Übertragungswegen (Kapazitäten) müssen diese Widerstände verringert werden, beim ATmega8 (als SLAVE) ist ein Wert von bis ca. 300 Ohm noch möglich (muss aber der Master auch treiben können, notfalls Oszi anschließen und Pegel prüfen). Aktivierte Pull-Upps: sbi PORTC,4 ; PULL-UP ein sbi PORTC,5 ; PULL-UP ein Es könnte auch sein, dass die SLAVE-Adresse nicht korrekt ist. Einfach mal einen I2C-Scanner anschließen oder per Hand die einzelnen Adressen durchtesten im Drucker oder im Assembler-Programm (sind ja nur 127+1). >Das einzige ist, es zeigt >jetzt immer den Zeichensatz an und nicht mehr Deine Begrüßung. Kannst Du mal bitte ein Foto zur Verfügug stellen. Bernhard
Hallo Bernhard Hab Dir ne Mail mit Foto geschickt. Thomas
Das Bild Thomas
@Thomas Das Display ist ja riesig... gefällt mir. Was ist das für ein STN-Typ, wo kann man dises Display beziehen ? Bernhard
@Bernhard Das Display hab ich aus einem Develop Kopierer (Ineo+ 250), kann man aber nicht in Deutschland kaufen, aber Check mal Deine E-Mail´s........... Thomas
Hallo Bernhard Ich hab mich jetzt mit dem i2C beschäftigt.... Deine Firmware hat die i2C Adresse 0x70 .equ TWI_SLAVE_ADRESSE = 112 Dann habe ich die Firmware von meinem 3D-Drucker auf 0x70 eingestellt, und damit blieb es bei der Begrüßung des Display. Deine Firmware auf 0x20 .equ TWI_SLAVE_ADRESSE = 32 3d-Drucker auch auf 0x20 Nach der Begrüßung kommen nur wilde Zeichen siehe Bild. In der Firmware von dem Drucker braucht man eine Library Datei von dem Display. Evtl. muß ich da eine andere nehmen. Hab mit zweien getestet aber immer die wilden Zeichen. Librariys: LiquidTWI2.h LiquidCrystal_I2C.h Den Zeichengenerator hab ich auch getestet ,mit Fehlermeldung ,siehe Bild.
LCD Bild Thomas
Hallo Thomas, na das schaut doch schon mal ganz gut aus. Die i2c Kommunikation scheint zu funktionieren :-) Im Assembler Programm findest Du Beispiele, wie das Display angesteuert werden kann. Diese Kommandos müssen dann nur vom Drucker generiert werden. Warum die Fehlermeldung beim Fondgenerator auftritt, das scheint ein VB Problem zu sein. Vielleicht fehlt eine Bibliotek. Darum kümmern wir uns später. Bernhard
Hi meinst Du die Datei LCD_BEISPIELE.asm? Was genau muß ich den in die Firmware vom Drucker schreiben? Thomas
Hallo Thomas,
>meinst Du die Datei LCD_BEISPIELE.asm?
Genau, dort findest Du die Beispiele, in der LCD_ini.asm sind die
Commands definiert.
Könntest Du uns mal bitte die beiden Dateien zur Verfügung stellen:
LiquidTWI2.h
LiquidCrystal_I2C.h
Bernhard
Hallo Okey, danke für die Antwort. Dann versuch ich mal mein Glück. Thomas
Was sind das für Dateien? : #include <inttypes.h> #include "Print.h" #include <Wire.h> Bernhard
Hallo ich hab die Dateien mal angehängt. Wire ist wohl für I2C/TWI. Das sind alles Arduino Dateien. Sind unter c:\Programme\Arduino.... usw. Thomas
Hallo Thomas, so richtig blicke ich bei den Dateien noch nicht durch :-( An welcher Stelle findet man die Routine(n), die die Daten per I2C an das Display senden und welche Daten werden wo und wie gesendet? Mein LCD-STN-Assembler-Programm versteht z.B. folgende I2C-Datenübertragung: 1. I2C-Master-Transmitter + Start 2. I2C-Master-Transmitter + Adresse + WRITE-BIT 3. I2C-Master-Transmitter + DATA-BYTE (z.B. "A") 4. I2C-Master-Transmitter + STOPP Und schon erscheint ein "A" auf dem Display. Bernhard
Hi Ich hab jetzt mal die komplette Firmware hochgeladen. In der Configuration.h habe ich das "Panelolu" LCD aktiviert Zeile 622. Es gibt auch Dateien für das LCD, aber ich weiß nicht welche wir benötigen. Die Library "LiquidTWI2" habe ich in der Configuration.h includet. Das ganze läuft mit Arduino 1.0.5-r2. Ich blicke da nicht wirklich durch. Da ich keinen Karton hatte, werde ich das Display diese Woche verschicken. Thomas
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.