Hallo, ich habe folgendes Problem: Ich verwende ein Display (EA DIP203G-4NLED) mit einem Atmega328, die Routine aus dem "AVR Hardware und C-Programmierung in der Praxis" Buch von Elektor und steuere das Display im 4-bit Modus ohne R/W an. Die Anzeige funktioniert wunderbar aber in unregelmäßigen Zeitabständen tauchen an verschiedenen Stellen unerklärbare Zeichen auf (Manchmal nur 1-2, manchmal im ganzen Bild).Diese verschwinden nach einem Reset oder das Bild regeneriert sich nach einigen Minuten von selbst. Die Ursache konnte ich noch nicht feststellen, hatte schon das Ganze in ein Gehäuse mit Netzfilter und Linearnetzteil verbaut und das Display-Gehäuse von der Frontplatte isoliert, es hat aber wenig oder Nichts gebracht. Hat vielleicht jemand einen ähnlichen Problem gehabt? Ich würde mich über eure Tipps freuen. Die LCD-Routine könnte ich auch hochladen falls jemand Interesse hat.
Alex Stein schrieb: > Hallo, > ich habe folgendes Problem: Ich verwende ein Display (EA DIP203G-4NLED) > mit einem Atmega328, die Routine aus dem "AVR Hardware und > C-Programmierung in der Praxis" Buch von Elektor und steuere das Display > im 4-bit Modus ohne R/W an. > Die Anzeige funktioniert wunderbar aber in unregelmäßigen Zeitabständen > tauchen an verschiedenen Stellen unerklärbare Zeichen auf (Manchmal nur > 1-2, manchmal im ganzen Bild).Diese verschwinden nach einem Reset oder > das Bild regeneriert sich nach einigen Minuten von selbst. > Die Ursache konnte ich noch nicht feststellen, hatte schon das Ganze in > ein Gehäuse mit Netzfilter und Linearnetzteil verbaut und das > Display-Gehäuse von der Frontplatte isoliert, es hat aber wenig oder > Nichts gebracht. > > Hat vielleicht jemand einen ähnlichen Problem gehabt? > > Ich würde mich über eure Tipps freuen. > > Die LCD-Routine könnte ich auch hochladen falls jemand Interesse hat. Jumper am Display offen? Jumper am 245 offen? Das mit SOD/SID und der Direction des 245 ist auch so'ne Sache. Reset am Display abgeschlossen? rgds
Deine Routine wird wohl das vom Display benötigte Timing meistens, aber nicht immer korrekt umsetzen. Übrigens sind 7 MByte Bilder schon beeindruckend. http://www.mikrocontroller.net/articles/Bildformate !
6A66 schrieb: > Das mit SOD/SID und der Direction des 245 ist auch so'ne Sache. Wenn Du den 245 auf B->A umschaltest ist der EN des Displays offen! rgds
Die Die Richtung ist Festgelegt auf 5V und R/W auf GND, Habe mir die Möglichkeit für die Zukunft offen gelassen SPI zu benutzen, momentan wird nur über 4+2 Leiter geschrieben. Reset ist laut Datenblatt mit 10K abgebunden habe es auch schon extern versucht... Resultat = 0. Die Timing habe ich schon angeschaut, waren eigentlich alle sogar viel länger als im Datenblatt, aber danken ist ein guter Vorschlag... schau ich mal ob sich da was machen lässt. Fasst vergessen: die Leitungen an X1 (die rechte Spalte) 2-16 sind alle mit 2K2 nachträglich abgebunden. (bei den Bildern haben ich echt nicht auf die Größe geachtet, versuche momentan dies zu ändern)
:
Bearbeitet durch User
Ich werde in den nächsten Tagen versuchen die LCD-Routine von mikrocontroller.net ausprobieren und schauen, ob der Fehler weg ist. rgds.
:
Bearbeitet durch User
Alex S. schrieb: > Die Timing habe ich schon angeschaut, waren eigentlich alle sogar viel > länger als im Datenblatt, aber danken ist ein guter Vorschlag... schau > ich mal ob sich da was machen lässt. Dann hilft nur, sich D0...4 und RS auf das Scope zu legen, auf EN zu triggern und das System einfach mal ein paar Stunden laufen lassen. Am besten Persistence/Nachlecuhtdauer auf unendlich stellen und mal ansehen. Entweder Du findest da was (Glitch Setup/Hold Verletzung, ...) oder du musst woandest suchen. rgds
Hallo ich hab die gleichen probleme mit einem EA DIP203-6 und einem ATmega64. Ich benütze die LCD-Routine von mikrocontroller.net im 4-bit mode aber die Fehler kommen immer noch vor. Falls eine Lösung des Problems gefunden wird wäre ich froh wenn sie hier gepostet wird. MFG smij
:
Bearbeitet durch User
Ich/wir haben mit dem neuen DIP203-4 (3.3V-Nachfolger des 204) auch schon experimentiert und nach 2 Wochen entnervt aufgegeben. Steuer das Teil per SPI an und alles ist gut. Gruss Harry
Hi Harry Vielen Dank für deine Antwort. Könntest du vlt. die beschaltung und den C code dafür posten falls du es gerade irgendwie zur hand hast? Weil mit SPI habe ich bis jetzt noch keine erfahrungen gemacht... und dass projekt ist sehr dringend deshalb glaube ich dass die zeit nicht reicht um mich selber ins SPI einzuarbeiten... MFG smij
Es fällt auf, dass bestimmte ungewollte Zeichen gehäuft auftreten. Ich würde den Code für eines dieser Zeichen (vertikale Striche, Pos 2-3-4 deines Bildes) aus dem Datenblatt heraussuchen und dann den Logikanalysator auf dieses Muster triggern lassen. Dann kann man in Ruhe analysieren, was da passiert ist. Die Displays brauchen teilweise sehr lange für die Ausführung eines Befehls. Andererseits reagieren sie aber auch auf extrem kurze Glitches sehr unschön. Der Rekordhalter wollte eine Flankensteilheit von <25ns, sonst machte er Müll. Das stand etwas versteckt auch so im Datenblatt. Notfalls einfach mal den Hersteller wechseln (wenn die Zeit oder die Messtechnik nicht für eine gute Fehleranalyse reichen).
Hi smij,
1 | Procedure Start; // Initialisierung LCD |
2 | Begin |
3 | LCDCTRL($34); // 8 Bit, Extension Bit RE=1 |
4 | mDelay(2); |
5 | LCDCTRL($09); // 4 Zeilen-Modus |
6 | mDelay(2); |
7 | LCDCTRL($30); // 8 Bit, Extension Bit RE=0 |
8 | mDelay(2); |
9 | LCDCTRL($0C); // Display ein, Cursor off, Blinken off |
10 | mDelay(2); |
11 | LCDCTRL($01); // Display clear, Cursor 0,0 |
12 | mDelay(2); |
13 | LCDCTRL($06); // Cursor Auto-Increment |
14 | mDelay(2); |
15 | End Start; |
leider programmiere ich nicht in C ..... ich bevorzuge Pascal (AVRCo). Die Beschaltung findest du im Datenblatt, Brücke auf der Rückseite des Displays schliessen. Es gibt sicher C-Bibliotheken bei denen du dich mit SPI nicht befassen mußt ;) Gruss Harry
Hi Harry trozdem vielen Dank du hast mir sehr geholfen :) MFG smij
Hi Alex ! In einem Post vom 31.3. schreibst du, dass du den Direction-Pin auf 5V gelegt hast. Betreibst du das Display auch mit 5V oder mit 3,3V? Das neue EA DIP203 läuft nämlich offiziell nur noch mit 3,3V Noch eine Idee: auf welchem Pegel liegt der Enable bei dir im Ruhezustand ? Laut Datenblatt soll er low sein und erst wenn die Daten- und Steuerleitungen korrekt angelegt sind, soll der Enable kurz auf high gehen. Dies wurde auch in einigen Libraries falsch gemacht. Viel Erfolg ! Ralph
Noch eine Idee: Kann es sein, dass dein Controller zwischendrin einen Reset macht (Brown-out etc) und das Display nicht ? Dann startet nämlich dein Ciontroller mit einer 8-Bit Initialisierung und der Displaykopntroller ist noch auf 4-Bit initialisiert. Ralph.
Das Display wird auch mit 3.3V betrieben und der DIR Pin gehört zum Pegelwandler und liegt auf 5V. (Siehe Schaltplan)
Die Enable Leitung habe ich auch gemessen, geht kurz von low auf high wenn etwas gesendet wird. Wenn ich dich mit dem Reset richtig verstanden haben, beudetet es ja aber ,dass das Display vom Controller neu initialisiert und gelöscht wird. Mit einem "Brown-out" rechne ich auch nicht, da die Schaltung schon mit verschiedensten Netzteilen betriebn wurde und der Port vom AVR wird auch für nichts anderes benutzt.
Ich hab mal eine kurze Sequenz der falschen Anzeige nach der Zeichentabelle im Datenblatt decodiert: 1. 0011 0011 2. 0001 0010 3. 1111 0011 4. 0011 0010 5. 1111 0011 6. 0001 0011 7. 0100 0010 Wenn man jetzt das low-Nibble eine Bytes mit dem high-Nibble des nächsten Bytes kombiniert kommt das raus: 1/3/14 Entweder ist ein Enable verloren gegangen, oder durch eine Störung wurde ein zusätzliches Enable erkannt.
Sind Abblockkondensatoren an allen ICs vorhanden? In dem Schaltbildauszug sind keine zu sehen.
Ja, auf der kleinen Platine ist ein 3.3V Regler, welcher nur für das Display (+Pegelwadler) verwendet wird und der hat 6,8µF Elko und 100nF Keramik am Ausgang. Wenn ich jetzt so sehe, könnten die natürlich etwas näher am Display sein. Kann das mit dem Enable leider nicht mehr überprüfen, habe die Tage meine Kontroller und Display Platine auf SPI "um verdrahtet". Da es wohl in diesem Fall, wie einige Leute schrieben keine Probleme gibt und der Hauptgrund ist die ich bereit SPI verwende spare ich 6(5) Port-Pins. Habe das Programm Gestern zum laufen bekommen. Bis jetzt konnte ich keine Zeichen-Fehler feststellen. Der Code ist auch nicht viel komplizierter, das einzige ist das Umschalten der SPI-Modis, da das Display im Mod 3 läuft, anders als alles was ich bis jetzt verwendet habe(ADC, DAC, Keypad).
Thema ist schon alt. Aber ich kämpfe z.Z. auch mit EA DIP203G... Hat wirklich niemand in 5 Jahren eine andere Lösung gefunden, als LCD nur per SPI anzusteuern? Leider ist Dokumentation für SSD1803 lückenhaft: oft wird Bit RE erwähnt, aber nirgendwo steht genau, wie man das setzt oder löscht. DIP203G verhält sich so, als ob drin etwas gibt, was zufällige Zustand nach dem Einschalten nimmt: manchmal arbeitet LCD wie erwartet, manchmal aber ganz daneben. Das ist bei üblichen für HD44780 Init so und auch wenn ich nach (3x 0x30 + 0x20) zusätzlich 0x2c und 0x09 schreibe, um zu versuchen, Bit RE zu setzen und zu löschen... Ich denke, wenn in Datenblatt steht "(NAHEZU 100% HD44780 KOMPATIBEL", sollte das doch bedeuten, daß Code von HD44780 direkt verwendbar sei und nur noch zusätzliche Extras vorhanden sind?
:
Bearbeitet durch User
Hallo Maxim kenne das auch von einigen Displays von EA. Nach meiner Erfahrung kommt es auf die Zeit nach löschen an. Das Display braucht ein paar Millisekunden. Das steht aber auch etwas versteckt in dem Datenblatt drin. Ansonsten funktionieren alle Displays von EA auch ohne Problem mit dem I2C Bus.
Auf meiner Platte steht DIP203G-4 über 74VHC595, da IC mit Eingangpegel über Vcc arbeiten kann und somit wird auch von 5V zu 3V3 konvertiert... Aber das ist nicht prinzipiell: Algorythmus bleibt gleich: zuerst D4-D7 mit RS, dann D4-D7 mit RS und mit EN, dann wieder ohne EN. danach noch einmal für D0-D3. Ich habe wenig Lust, auf Seriell zu wechseln: ich muß dann 74VHC595 entfernen und als Pegelwandler 74VHC573 oder 74LCV14A einsetzen, alles mit Draht, unschön...
Maxim B. schrieb: > DIP203G verhält sich so, als ob drin etwas gibt, was zufällige Zustand > nach dem Einschalten nimmt: manchmal arbeitet LCD wie erwartet, manchmal > aber ganz daneben. Das kommt beim echten HD77480 vor, wenn das nicht richtig initialisiert wird. Das Instructions-Set vom DIP203G weicht deutlich vom HD77480 ab. Bei der Init dürfte also so einigen nicht kompatibel sein.
Hier gibst Infos u. SW zum Vorgänger: Beitrag "LCD EA DIP204-4 Initialisieren"
:
Bearbeitet durch User
Danke! Ich weiß zwar nicht, ob das paßt: doer steht KS0073 und bei DIP203 ist das SSD1803 Schade: geht leider nichts. Die Befehlsfolge aus dem Beitrag arbeitet leider nicht.
:
Bearbeitet durch User
Hi, welche Taktfrequenz benutzt Du? Bei 4MHz klappen bei mir (fast) alle Inits. Die Waitschleifen sind taktfrequenzabhängig. Dann sind die Schleifen selbst oft fehlerhaft, wenn sie dieselben arithmetischen Temporärregister verwenden, die vorher nicht auf Stapel gepusht wurden. Den Fehler hatte ich dann auch. Je nachdem was gerade berechnet wurde, wurde von "temps" überschrieben, die ich für LCD Routinen brauchte. Dann beim Auslesen wenn möglich, Interrupts sperren. Wenn ISRs zu lang werden, kollidiert das sonst leicht mit "langsamer" LCD-Ausgaberoutine. Wo es sonst noch Probs. gibt, wäre Bitzuordnung beim Swappen. Das kommt dann auf die konkret verwendete Portbitzuordnung an. Dann die tatsächliche Minimalimpulsdauer des Enable-Impulses. Das ist wiederum bei den meisten Routinen taktfrequenzabhängig. Ein paar "nops" mehr spendiert, löst dieses Prob. ciao gustav
:
Bearbeitet durch User
Karl B. schrieb: > welche Taktfrequenz benutzt Du? > Bei 4MHz klappen bei mir (fast) alle Inits. > Die Waitschleifen sind taktfrequenzabhängig. Ich habe verschiedenes versucht. Bei 8 und 4 MHz, Mode 0 und Mode 3... Ich habe noch gedacht: irgendwelche Störungen. Deshalb habe ich nun zwischen Ausgängen von 74VHC595 und Gnd noch Widerstände 2k4 gelötet. Aber es ist nur schlechter geworden. Ich habe dann auch Reset-Eingang von ~Reset-Systen getrennt und auch an 74VHC595 gehängt, somit kann ich längere Reset machen als in System. Hilft auch nicht... Hier ist 4bit-Funktion. Aber ich denke, Problem liegt nicht hier. Trotzdem:
1 | void sendnibble(u8 data){ |
2 | spi_master_transmit(data); |
3 | spi_intern_start(); |
4 | asm volatile("lpm"); |
5 | asm volatile("lpm"); |
6 | spi_intern_stop(); |
7 | }
|
8 | // Sendet eine 4-bit Ausgabeoperation an das LCD
|
9 | // rs = 1: data, rs = 0: command
|
10 | void lcd_intern_out( u8 data, lcdmode_t rs ) |
11 | {
|
12 | u8 a; |
13 | lcd_adrmode(); |
14 | |
15 | a = ((data & 0xf0) | (1<<BIT_RESET)); |
16 | if(rs == LCD_DATA) a |= (1<<BIT_RS); |
17 | sendnibble(a); |
18 | sendnibble(a | (1<<BIT_E)); |
19 | sendnibble(a); |
20 | }
|
Grafische LCD ist auch über SPI und alles funktioniert einwandfrei. Aber diese... Oszilloskop zeigt: alle Singale wie gewollt. Es sollte also etwas mit Init nicht stimmen... Karl B. schrieb: > Wenn ISRs zu lang werden, kollidiert das sonst leicht mit "langsamer" > LCD-Ausgaberoutine. Ich mache keine solche Sachen direkt aus ISR. Entweder in ISR Bits gesetzt (z.B. in GPIOR0, am schnellsten erreichbar) und in Hauptschleife geprüft, oder mit Planer. So kann man ISR sehr schnell machen, sogar ohne push-pop (ISR_NAKED), da alles sich nur auf "sbi GPIOR0, bit" beschränkt.
:
Bearbeitet durch User
Ich habe auch nach SPI-Mode gewechselt! Trotz meiner Befürchtung reichte es mit Spannungsteiler zu machen, 3k3 und 1k8. Wie auch in Datenblatt versprochen, funktioniert das mit 2 MHz. Gut zu wissen: EA DIP-203 paßt für SPI Mode am besten.
:
Bearbeitet durch User
Hi, wenn es bei HD44780-Ansteuerung Probleme gibt, hätte ich noch einen Harware-Lösungsansatz dazu. Bei einem Display mit dem HD44780 kompatiblen Controller fehlte ein SMD-Bauteil. Ein Bauteil, das offensichtlich für die eigene Prozessortakterzeugung des Displays wichtig ist. So betrug die laut Spec. angegebene Taktfrequenz nicht ca. 230 kHz sondern nur etwa die Hälfte. Und somit verlängerte sich auch die Befehlsverarbeitungszeit des Display-Controllers entsprechend. Und die vom µP kommenden Routinen mussten "verlangsamt" werden. Oder das fehlende Bauteil reinlöten. ciao gustav
SPI-Mode ist gerade für EA DIP203 am besten. Am Anfang fürchtete ich Problem, da LSB zuerst und langsam, aber das löst sich am Ende einfacher, als störungsfreie Arbeit in Parallel-4bit zu schaffen. Bei diesem LCD darf man über HD44780-Kompatibilität nicht reden: ein Befehl aus typischer Init-Routine für HD44780 wird dank Befehlserweiterung ganz anders interpretiert, dadurch geht ganze Init woanders. Auch Unterschiede zwischen 2-Zeilien- und 4-Zeilen-Modi sind zu beachten. Code für HD44780 wird mit EA DIP203 erst nach Anpassung tauglich. Das ist ein LCD mit etwas anderem Befehlssatz, man sollte das offen in Datenblatt schreiben. EA schreibt aber "NAHEZU 100% HD44780 KOMPATIBEL" :)
:
Bearbeitet durch User
Maxim B. schrieb: > Init-Routine für HD44780 wird dank > Befehlserweiterung ganz anders interpretiert, dadurch geht ganze Init > woanders. Auch Unterschiede zwischen 2-Zeilien- und 4-Zeilen-Modi sind > zu beachten. Code für HD44780 wird mit EA DIP203 erst nach Anpassung > tauglich. Hi, und wo kann man nun die korrekte Initialisierungsroutine im Netz finden? ciao gustav
Bei mir läuft so gut:
1 | //lcd_intern.h
|
2 | // EA DIP203
|
3 | #define LCD_DDADR_LINE1 0x00
|
4 | #define LCD_DDADR_LINE2 0x20
|
5 | #define LCD_DDADR_LINE3 0x40
|
6 | #define LCD_DDADR_LINE4 0x60
|
7 | |
8 | static inline void lcd_adrmode(void){ |
9 | spi_master_setmode(DIV_16,MOD_3,LSB_FIRST); |
10 | spi_intern_outadr(LCD_ADR); |
11 | }
|
12 | |
13 | #define LCD_BOOTUP_MS 10
|
14 | #define LCD_WRITEDATA_US 43
|
15 | #define LCD_COMMAND_US 39
|
16 | |
17 | #define LCD_CLEAR_DISPLAY_MS 2
|
18 | #define LCD_CURSOR_HOME_MS 2
|
19 | |
20 | // Clear Display -------------- 0b00000001
|
21 | #define LCD_CLEAR_DISPLAY 0x01
|
22 | |
23 | // Cursor Home ---------------- 0b0000001x
|
24 | #define LCD_CURSOR_HOME 0x02
|
25 | |
26 | // Set Entry Mode ------------- 0b000001xx
|
27 | #define LCD_SET_ENTRY 0x04
|
28 | |
29 | #define LCD_ENTRY_DECREASE 0x00
|
30 | #define LCD_ENTRY_INCREASE 0x02
|
31 | #define LCD_ENTRY_NOSHIFT 0x00
|
32 | #define LCD_ENTRY_SHIFT 0x01
|
33 | |
34 | // Set Display ---------------- 0b00001xxx
|
35 | #define LCD_SET_DISPLAY 0x08
|
36 | |
37 | #define LCD_DISPLAY_OFF 0x00
|
38 | #define LCD_DISPLAY_ON 0x04
|
39 | #define LCD_CURSOR_OFF 0x00
|
40 | #define LCD_CURSOR_ON 0x02
|
41 | #define LCD_BLINKING_OFF 0x00
|
42 | #define LCD_BLINKING_ON 0x01
|
43 | |
44 | // Set Shift ------------------ 0b0001xxxx
|
45 | #define LCD_SET_SHIFT 0x10
|
46 | |
47 | #define LCD_CURSOR_MOVE 0x00
|
48 | #define LCD_DISPLAY_SHIFT 0x08
|
49 | #define LCD_SHIFT_LEFT 0x00
|
50 | #define LCD_SHIFT_RIGHT 0x04
|
51 | |
52 | // Set Function --------------- 0b001xxxxx
|
53 | #define LCD_SET_FUNCTION 0x20
|
54 | |
55 | #define LCD_FUNCTION_4BIT 0x00
|
56 | #define LCD_FUNCTION_8BIT 0x10
|
57 | #define LCD_FUNCTION_1LINE 0x00
|
58 | #define LCD_FUNCTION_2LINE 0x08
|
59 | //#define LCD_FUNCTION_5X7 0x00
|
60 | //#define LCD_FUNCTION_5X10 0x04
|
61 | #define LCD_FUNCTION_RE 0x04 // Extra von SSD1803
|
62 | #define LCD_FUNCTION_NORE 0x00
|
63 | #define LCD_FUNCTION_BE 0x02 // mit RE=1
|
64 | |
65 | //#define LCD_SOFT_RESET 0x30
|
66 | |
67 | //***** Befehle mit RE=1 (nach dem LCD_SET_FUNCTION | LCD_FUNCTION_RE) */
|
68 | // Power Down Mode
|
69 | #define LCD_POWERDOWN 0x02
|
70 | #define LCD_FUNCTION_PDEN 0x01
|
71 | #define LCD_FUNCTION_PDDIS 0x00
|
72 | |
73 | // Entry Mode Set
|
74 | #define LCD_EXTLCD_SET 0x06
|
75 | #define LCD_FUNCTION_RUECKWAERTS 0x01
|
76 | |
77 | // extended Function Set
|
78 | #define LCD_EXTSET 0x08
|
79 | #define LCD_FUNCTION_INVCUR 0x02
|
80 | #define LCD_FUNCTION_4LINE 0x01
|
81 | /*** usw */
|
1 | // lcd_intern.c
|
2 | // EA DIP203
|
3 | #include <avr/io.h> // Muss immer sein |
4 | #include <inttypes.h> // Fuer Datentyp |
5 | #include <avr/pgmspace.h> // Fuer Flash |
6 | #include <util/delay.h> // Fuer Verzoegerungen |
7 | |
8 | #include "lcd_intern.h" |
9 | |
10 | void lcd_intern_init(void){ |
11 | |
12 | _delay_ms(LCD_BOOTUP_MS); |
13 | |
14 | // Function Set
|
15 | lcd_intern_command(LCD_SET_FUNCTION | LCD_FUNCTION_8BIT | LCD_FUNCTION_RE); |
16 | // Extended Function Set
|
17 | lcd_intern_command(LCD_EXTSET | LCD_FUNCTION_4LINE); |
18 | // Function Set
|
19 | lcd_intern_command(LCD_SET_FUNCTION | LCD_FUNCTION_8BIT); |
20 | // Set Display
|
21 | lcd_intern_command(LCD_SET_DISPLAY | LCD_DISPLAY_ON); |
22 | |
23 | lcd_intern_clear(); // Clear Display |
24 | |
25 | lcd_intern_command(LCD_SET_ENTRY | LCD_ENTRY_INCREASE); // Entry Mode Set |
26 | |
27 | }
|
28 | |
29 | // Ausgabe eines Kommandos an das LCD. Ohne Verzoegerung
|
30 | void lcd_intern_command_k( uint8_t data ){ |
31 | |
32 | SPI_NEHMEN; |
33 | lcd_adrmode(); |
34 | spi_intern_start(); |
35 | |
36 | spi_master_transmit(0x1f); |
37 | spi_master_transmit(data & 0x0f); |
38 | spi_master_transmit(data >> 4); |
39 | |
40 | spi_intern_stop(); |
41 | SPI_FREIGEBEN; |
42 | }
|
43 | |
44 | // Ausgabe eines Kommandos an das LCD.
|
45 | void lcd_intern_command( uint8_t data ){ |
46 | lcd_intern_command_k(data); |
47 | _delay_us(LCD_COMMAND_US ); |
48 | }
|
49 | |
50 | // Ausgabe eines einzelnen Zeichens an der aktuellen Cursorposition
|
51 | // ohne Verzoegerung
|
52 | void lcd_intern_data_k( uint8_t data ){ |
53 | |
54 | SPI_NEHMEN; |
55 | lcd_adrmode(); |
56 | spi_intern_start(); |
57 | |
58 | spi_master_transmit(0x5f); |
59 | spi_master_transmit(data & 0x0f); |
60 | spi_master_transmit(data >> 4); |
61 | |
62 | spi_intern_stop(); |
63 | SPI_FREIGEBEN; |
64 | }
|
65 | |
66 | // Ausgabe eines einzelnen Zeichens an der aktuellen Cursorposition
|
67 | void lcd_intern_data( uint8_t data ){ |
68 | lcd_intern_data_k(data); |
69 | _delay_us( LCD_WRITEDATA_US ); |
70 | }
|
71 | |
72 | // LCD loeschen
|
73 | void lcd_intern_clear( void ){ |
74 | lcd_intern_command( LCD_CLEAR_DISPLAY ); |
75 | _delay_ms( LCD_CLEAR_DISPLAY_MS ); |
76 | }
|
77 | |
78 | // Cursor in die 1. Zeile, 0-te Spalte
|
79 | void lcd_intern_home( void ){ |
80 | lcd_intern_command( LCD_CURSOR_HOME ); |
81 | _delay_ms( LCD_CURSOR_HOME_MS ); |
82 | }
|
:
Bearbeitet durch User
Hallo Maxim, ich habe ein Projekt MIT Dem Dip 203G-4 und ich verwende den STM32F103: ich habe mir dein Code eingeschaut und im Vrgleich zu meienem gibt es nicht viel Unterschied. Aber ich bekomme nichts am Display. Überhaupt nicht. Eine Frage zu der Beschaltung: muss man was spezielles bei der beschaltung vom Display mit dem microcontroller? im Anhang findest du meine Beschaltung. Hast du den reset pin vom Display benutzt? ich habe nur Vdd, Gnd, CS; SID UND SCLK Pins benutzt. Und ich habe keinen Pegelwandler benuzt da ich am Microcontroller ein 3V3 Pin habe.
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.