Forum: Projekte & Code LCD STN 320x240 große Schrift 16x24 / 20x10 ATmega8 Assembler TWI USART inkl. Fontgenerator VBA


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

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
von Bernhard S. (bernhard)



Lesenswert?

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
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?

Du hast Recht, es ist VB, hab's soeben nachgelesen, danke für die 
Korrektur.

Bernhard

von Thomas K. (tommesy)


Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?

@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

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

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

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

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
von Thomas K. (tommesy)


Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?

@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

von Thomas K. (tommesy)


Lesenswert?

Hallo Bernhard
Hab Dir ne Mail mit Foto geschickt.

Thomas

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

Das Bild
Thomas

von Bernhard S. (bernhard)


Lesenswert?

@Thomas

Das Display ist ja riesig... gefällt mir.

Was ist das für ein STN-Typ, wo kann man dises Display beziehen ?

Bernhard

von Thomas (Gast)


Lesenswert?

@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

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

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.

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

LCD Bild

Thomas

von Bernhard S. (bernhard)


Lesenswert?

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

von Thomas K. (tommesy)


Lesenswert?

Hi
meinst Du die Datei LCD_BEISPIELE.asm?
Was genau muß ich den in die Firmware vom Drucker schreiben?
Thomas

von Bernhard S. (bernhard)


Lesenswert?

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

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

Hallo
Okey, danke für die Antwort. Dann versuch ich mal mein Glück.

Thomas

von Bernhard S. (bernhard)


Lesenswert?

Was sind das für Dateien? :

#include <inttypes.h>
#include "Print.h"
#include <Wire.h>

Bernhard

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?

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

von Thomas K. (tommesy)


Angehängte Dateien:

Lesenswert?

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