Forum: Projekte & Code OLED128x128 SSD1351 RGB Initialisierung Color Farbe bunt SPI 3.3V AVR ATmega8 ATmega328p Assembler


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bernhard S. (bernhard)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Kleine Beispiele, einfach und unkompliziert, schnell zusammengefummelt 
zur Initialisierung eines

1.44 "zoll Serielle SPI 128x128 Farbe TFT LCD Display Moduls in
Assembler mit AVR Studio 4.

Vorsicht, das Display verträgt nur 3.3V und benötigt, wenn alle Pixel 
kräftig leuchten ca. 200mA. Gegebenefalls einen Level-Shifter oder 
gemeine Widerstände zur Pegelanpassung verwenden.

Version-1, mit einem 8MHz getakteten ATmega328p.

Das Display wird grundlegend initialisiert, kurz nach dem Anlegen der 
Betriesspannung sehen wir ein verrauschtes Bild, normalerweise ist das 
nicht so informativ, aber in diesem Fall schon, denn es funktioniert 
grundlegend.

Und nun wartet das Display geduldig auf Pixeldaten.

Zuerst ein Kommando 5Ch senden, DC ist dabei low, dann DC auf high und 
immer 2Bytes Farbwerte senden.

2Bytes Farbcodierung:
__high____|low______
0b00000|000000|00000
__rot__|grün__|blau_
0...31 |0..63 |0...31

Um das Display komplett zu beschreiben, das dauert...

128x128=16.384 Pixel x 2Bytes(Farbwert)=32.768 Bytes + diverse Kommandos

Das Nadelöhr ist die Hardware-SPI, warten, bis ein Byte nun endlich 
übertragen worden ist.

Nochmals ein ganz großes Dankeschön an Steffen, er spendierte mir eine 
herrliche Vorlage.

Siehe TWI/I2C OED128x64 Display:
Beitrag "DEBO OLED2 0.96 0,96" OLED-Display SSD1306 SSD1312 Initialisierung TWI I2C AVR ATmeg8 Assembler ASM"

Den Assembler-Code habe ich versucht gut zu kommentieren,
damit Ihr Ver- und Optimierungen vornehmen könnt.

Für Vorschläge, Tipps und konstruktive Kritik bin ich sehr dankbar.

Bernhard

: Bearbeitet durch User
von Steffen H. (avrsteffen)


Bewertung
1 lesenswert
nicht lesenswert
Bernhard S. schrieb:
> Um das Display komplett zu beschreiben, das dauert...

Wenn es optimal läuft sollte das bei 8Mhz Systemtakt und daraus 
resultierender maximalem SPI Takt von 2MHz ein Bild in ca. 17ms 
übertragen lassen. Das ist immerhin noch mehr als 50Hz 
Bildwiederholfrequenz wenn man daraus ein Loop macht.

Also bei 4MHz SPI Takt geht das noch flotter..

Gruß Steffen

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Steffen H. schrieb:
> Wenn es optimal läuft sollte das bei 8Mhz Systemtakt und daraus
> resultierender maximalem SPI Takt von 2MHz ein Bild in ca. 17ms
> übertragen lassen.

Sehr seltsam, real habe ich bei 8MHz µC Takt 101ms
und bei 16MHz 51ms gemessen, warum diese große Abweichung?

Ich erkenne kaum noch Optimierungspotential:
1
OLED_CLEAR:
2
  ldi ZL,low (128*32)
3
  ldi ZH,high(128*32)
4
OLED_CLEAR_s:
5
  SPI_TX_NULL
6
  SPI_TX_NULL
7
  SPI_TX_NULL
8
  SPI_TX_NULL
9
  SPI_TX_NULL
10
  SPI_TX_NULL
11
  SPI_TX_NULL
12
  SPI_TX_NULL
13
  sbiw ZL,1
14
  brne OLED_CLEAR_s  
15
ret
1
.macro SPI_TX_NULL
2
  out SPDR,NULL      ; Start transmission of data 
3
  in temp,SPSR
4
  sbrs temp,SPIF
5
  rjmp PC-2          ; Wait for transmission complete
6
.endm

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Version-2

ASCII mit vier Fonts durch Bitstretching Bitverdopplung aus einem 8x8 
Zeichensatz, ADC und Timer.

Font-0  8x8
Font-1  8x16
Font-2 16x16
Font-3 32x32

Bild "B3" Zeit für OLED.clear 103ms bei MHz µC Takt,
viel schneller geht vermutlich nicht :(


Im Bild "B4" wird die Zeit für den Bildaufbau angezeigt, ca. 70ms

die Zeit seit Programmstart und die Betriebsspannung.

14% Flash, da passt noch viel rein^^

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Version-2 mit ATmega8

Zusätzlich wird der Registerinhalt von MCUCSR ausgewertet, um den Grund 
des letzten Resets zu erfahren, z.B. wurde die Resettaste betätigt, so 
als Spielerei^^

Momentan ist der ATmega8 schon zu 50% gefüllt, werden diverse 
Testprogramme entfernt, dann sieht's diesbezüglich freundlicher aus.

Strombedarf im Haupmenue: ca.50mA

Display komplett weiß gefüllt: ca.200mA

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.