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

OP #3774823
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
Angehängte Dateien:
OP #3774864
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
OP #3836297
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
OP #3840306
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
Angehängte Dateien:
#3841344
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
OP #3841418
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
#3846915
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.
Angehängte Dateien:
OP #3848634
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
OP #3859477
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
#3859573
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren