Guten Abend zusammen, ich habe eine Frage wegen der Initialisierung eines DOGM163S-A - Displays. Bei der Initialisierung muss man den Function Set - Befehl mehrmals senden. Nirgendwo im Datenblatt habe ich einen Hinweis gefunden, wieso dies so ist. Wird durch den späteren Befehl nicht der erste überschrieben? MfG Pat711
Hi
>Brauche dann wohl noch nen passenden Spannungswandler von 9V auf 5V
Ja. Aber, wenn ich mich richtig erinnere, wird damit zwischen den
Befehlssätzen umgeschaltet.
MfG Spess
spess53 schrieb: > Hi > >>Brauche dann wohl noch nen passenden Spannungswandler von 9V auf 5V > > Ja. Aber, wenn ich mich richtig erinnere, wird damit zwischen den > Befehlssätzen umgeschaltet. > > MfG Spess was ist das für ein Zitat? und welche befehlssätze? MfG Pat711
Hi
>was ist das für ein Zitat?
Bitte ignorieren. War was Falsches in der Zwischenablage.
und welche befehlssätze?
Mit den Bits 1 und 0 wird zwischen den Instruction Tables umgeschaltet.
MfG Spess
Was kann ich denn mit den Instruction Tables machen? MfG Pat711
Hi
>Was kann ich denn mit den Instruction Tables machen?
Die Befehle, die darin stehen benutzen. Lies das Datenblatt vom ST7036.
Wenn dann noch Fragen offen sind kannst du sie hier stellen.
MfG Spess
OK ich hab mir das Datenblatt nochmal angesehen. Das mit den Instruction Tables ist also so zu verstehen, dass ich alle Tables, deren befehle ich nutzen gedenke zu beginn Laden muss? Also eigentlich die ersten 3, da das 4. zum testen reserviert ist. Aber in dem function set - Befehl muss ja auch noch angegeben werden mit wie viel Bit das Display angesteuert werden soll und die anzahl der Spalten. Irgendwie steh ich grad bischen auf der Leitung und die Gestaltung des Datenblattes sagt mir auch nicht gerade zu. MfG Pat711
Hi Nein. Auf bestimmte Befehle, wie BIAS SET, CONTRAST SET, kannst du erst zugreifen, wenn du auf Instruction Table 1 umgeschaltet hast. MfG Spess
Servus, Patrick R. schrieb: > Was kann ich denn mit den Instruction Tables machen? z.B. instruction table 0 und 1 Function Set 0 0 0 0 1 1 1 0 0 0 $38 switch back to inst. table 0 Display ON/OFF 0 0 0 0 0 0 1 1 1 1 $0F disp. on, cursor on, cursor bl Clear Display 0 0 0 0 0 0 0 0 0 1 $01 delete display, cursor at home Function Set 0 0 0 0 1 1 1 0 0 1 $39 data length, 2 lines, table 1 Bias Set 0 0 0 0 0 1 0 1 0 1 $15 BS: 1/5, 3 line LCD usw Vermutlich werden die Daten nach den Functions Set's decodiert und einzeln abgearbeitet? Gruß XMEGA
Guten Tag zusammen, ich habe nun noch einmal das Datenblatt angeschaut. Im besonderen die Seite 41 auf welcher der unten stehende Aufbau zu sehen ist. Zu diesem habe ich ein paar weietere Fragen: Start (Power on) wait Time > 40ms after VDD stable 1) function Set 00 0011XXXX wait time > 1,6ms 2) function set 00 0011XXXX wait time > 26,3µs 3) function set 00 0011XXXX wait Time > 26,3µs 4) function set 00 0010XXXX wait Time > 26,3µs 5) function set 00 0010XXXX wait Time > 26,3µs 6) internal OSC frequency 00 0001XXXX 00 BS|F2|F1|F0|XXXX wait Time > 26,3µs 7) Contrast Set 00 0111XXXX 00 C3|C2|C1|C0|XXXX wait Time > 26,3µs 8) Power/ICON/Contrast Control 00 0101XXXX 00 Ion|Bon|C5|C4|XXXX wait Time > 26,3µs 9) Follower Control 00 0110XXXX 00 Fon|Rab2|Rab1|Rab0|XXXX wait Time > 26,3µs 10) Display On/Off control 00 0000XXXX 00 1|d|C|B|XXXX wait Time > 26,3µs Initialization end Zu Punkt 1) Bit4 = 1 = "high" = 8Bit??? Wenn dieses bit 1 ist bedeutet das doch dass der 8 Bit Modus gewält wird. Oder? Wo ist der redt des Functin set - Befehls abgeblieben? die letzten 4 Bit? Wieso wiederholt sich dieses halbe function Set 5 mal? Bräuchte man nicht nur das letzte? 4) Erst hier 4 Bit Modus gewählt? (Bit4 = 0 = "low" = 4Bit) 6) diesen Befehl habe ich nicht im Datenblatt gefunden 7/8) Befehle aus Instruction Table 1 -> der letze function set müsste also die se wählen Es werden immer nur die ersten 4 Bit verwendet, da es ja der 4-Bit Modus ist. Das high-Byte kommt kurz danach, Daher immer die X. MfG Pat711
Hi >1) Bit4 = 1 = "high" = 8Bit??? Das ist nicht nur bei diesem Controller so. Es werden 3x Function Set mit '8Bit-Mode-Bit gesendet. >Wo ist der redt des Functin set - Befehls abgeblieben? die letzten 4 Bit? Die sind nicht relevant. >4) Erst hier 4 Bit Modus gewählt? (Bit4 = 0 = "low" = 4Bit) Richtig. Aber auch hier sind nur die oberen 4 Bit relevant. Ab dem nächsten Function Set wird eine andere Ausgaberoutine verwendet, die beide Nibble berücksichtigt. Also ab 5. gibt es kein XXXX mehr. >6) diesen Befehl habe ich nicht im Datenblatt gefunden Bias Set >Es werden immer nur die ersten 4 Bit verwendet, da es ja der 4-Bit Modus >ist. Das high-Byte kommt kurz danach, Daher immer die X. Nein. Siehe oben MfG Spess
Diesen Code habe ich aus einem anderen Thread. Ich wollte ihn auf meine Bedürfnisse anpassen. Bisher ist mir das aber noch nicht gelungen.
1 | #define LCD_PORT PORTB //datapins are PB0 to PB4 (DB4 to DB7 on the DOG)
|
2 | #define PIN_ENABLE PB5
|
3 | #define PIN_RS PB4
|
4 | |
5 | #define CHARACTER_BUFFER_BASE_ADDRESS 0b10000000
|
6 | #define CHARACTERS_PER_ROW 16
|
7 | |
8 | //instructions (see the ST7036 instruction set for further information)
|
9 | #define INSTRUCTION_CLEAR_DISPLAY 0b00000001
|
10 | #define INSTRUCTION_FUNCTION_SET_INIT_0 0b00110011
|
11 | #define INSTRUCTION_FUNCTION_SET_INIT_1 0b00110010
|
12 | #define INSTRUCTION_FUNCTION_SET_INIT_2 0b00101001
|
13 | #define INSTRUCTION_INSTRUCTION_SET_0 0b00101000
|
14 | #define INSTRUCTION_INSTRUCTION_SET_1 0b00101001
|
15 | #define INSTRUCTION_BIAS_SET 0b00011100
|
16 | #define INSTRUCTION_POWER_CONTROL 0b01010101
|
17 | #define INSTRUCTION_FOLLOWER_CONTROL 0b01101110
|
18 | #define INSTRUCTION_CONTRAST_SET 0b01110010
|
19 | #define INSTRUCTION_DISPLAY_ON 0b00001111
|
20 | #define INSTRUCTION_ENTRY_MODE 0b00000110
|
21 | |
22 | #include <avr/io.h> |
23 | #include <util/delay.h> |
24 | |
25 | //writes 8 bit to the ST7036 in 2 nibbles (2 x 4bit)
|
26 | void write(char data) |
27 | {
|
28 | char port_buffer = LCD_PORT; |
29 | |
30 | //write the high nibble first...
|
31 | char nibble = (data & 0xF0) >> 4; |
32 | LCD_PORT |= nibble; |
33 | LCD_PORT |= (1 << PIN_ENABLE); |
34 | _delay_ms(1); |
35 | |
36 | LCD_PORT = port_buffer; |
37 | _delay_ms(1); |
38 | |
39 | //...then the low nibble
|
40 | nibble = data & 0x0F; |
41 | LCD_PORT |= nibble; |
42 | LCD_PORT |= (1 << PIN_ENABLE); |
43 | _delay_ms(1); |
44 | |
45 | LCD_PORT = port_buffer; |
46 | }
|
47 | |
48 | void write_instruction(char instruction) |
49 | {
|
50 | //RS low = instruction
|
51 | LCD_PORT &= ~(1 << PIN_RS); |
52 | write(instruction); |
53 | }
|
54 | |
55 | void write_data(char data) |
56 | {
|
57 | //RS high = data
|
58 | LCD_PORT |= (1 << PIN_RS); |
59 | write(data); |
60 | }
|
61 | |
62 | void set_cursor(char row, char column) |
63 | {
|
64 | write_instruction(CHARACTER_BUFFER_BASE_ADDRESS + row * CHARACTERS_PER_ROW + column); |
65 | }
|
66 | |
67 | void write_string(char* string) |
68 | {
|
69 | while (*string) |
70 | {
|
71 | write_data(*string); |
72 | *string++; |
73 | }
|
74 | }
|
75 | |
76 | void initialize_display(void) |
77 | {
|
78 | //wait for a short period, maybe the voltage needs to stabilize first
|
79 | _delay_ms(50); |
80 | |
81 | //initialize 4 bit mode
|
82 | write_instruction(INSTRUCTION_FUNCTION_SET_INIT_0); |
83 | write_instruction(INSTRUCTION_FUNCTION_SET_INIT_1); |
84 | write_instruction(INSTRUCTION_FUNCTION_SET_INIT_2); |
85 | |
86 | //initialize everything else
|
87 | //NOTE: In case you need an other initialization-routine (blinking cursor,
|
88 | //double line height etc.) choose the appropriate instructions from
|
89 | //the ST7036 datasheet and adjust the C-defines at the top of this file
|
90 | write_instruction(INSTRUCTION_BIAS_SET); |
91 | write_instruction(INSTRUCTION_POWER_CONTROL); |
92 | write_instruction(INSTRUCTION_FOLLOWER_CONTROL); |
93 | write_instruction(INSTRUCTION_CONTRAST_SET); |
94 | write_instruction(INSTRUCTION_INSTRUCTION_SET_0); |
95 | write_instruction(INSTRUCTION_DISPLAY_ON); |
96 | write_instruction(INSTRUCTION_CLEAR_DISPLAY); |
97 | write_instruction(INSTRUCTION_ENTRY_MODE); |
98 | }
|
99 | |
100 | int main(void) |
101 | {
|
102 | //set LCD_PORT to OUTPUT and then ...
|
103 | DDRB = 0xFF; |
104 | |
105 | //.. do fancy stuff with the lcd
|
106 | initialize_display(); |
107 | |
108 | set_cursor(0, 0); |
109 | write_string("Hello World!"); |
110 | |
111 | set_cursor(1,0); |
112 | write_string("Test"); |
113 | |
114 | set_cursor(2,0); |
115 | write_string("Test"); |
116 | |
117 | while(1) |
118 | {
|
119 | asm volatile ("nop"); //do nothing (in a very explicit way) |
120 | }
|
121 | |
122 | return 0; |
123 | }
|
Controller ist ein ATmega88 an 3,3V. Aufgebaut ist das Ganze auf einem STK500. Außerdem kommt ein Warning: main.c:72: warning: value computed is not used das ist diese Zeile:
1 | while (*string) |
2 | {
|
3 | write_data(*string); |
4 | *string++; |
5 | }
|
übersieht der Compiler hier die Klammer? Mfg Pat711
Guten Abend zusammen, ich habe nun den oben stehenden Code noch einmal genauer angesehen. allerdings konnte ich immer noch keine fehler ausmachen. Im anhang dehalb der Code mit makefile und sonstigen Dateien. Die Beschaltung ist im Bild festgehalten. Kann mir bitte jemand helfen? ich bin so langsam wirklich am verzweifeln. Ich vermute, dass ich in der Initialisierung etwas falsch gemacht habe. Ich werde diese morgen auch selbst noch einmal durchsehen. Aufbau: STK 500 mit ATmega 88 externe Platine mit im Bild ersichtlicher Beschaltung 12MHz Takt 3,3V-Versorgung durch das Board MfG Pat711
Ich vermute ich habe meinen Fehler endlich gefunden. An VIN sind keine 3,3V angeschlossen Kopf gegen Wand und ich hatte es auf die Software geschoben. Oh mann. ich werde das ändern und dann melde ich mich hier vll nochmal ^^
Ich habe die nötige Verbindung nun eingelötet, allerdings regt sich immer noch nichts. MfG Pat711
Abend zusammen, ich habe nun noch einen weiteren Hardwarefehler behoben, und zwar waren die Datenleitungen auch falsch herum. Keine Ahnung wa ich da gemacht hab als ich den chaltplan gezeichnet hab. Nun geht das LCD allerdings immer noch nicht. Nun habe ich mir mal die Library-version, die Tobias Tetzlaff aus der LCD-routine von Ulrich Radig gemacht hat genauer angesehen. Diese sieht mir vielversprechender aus, vor allem weil da auch das Busy-Flag abgerufen wird. Daher baue ich nun noch einmal ein neues Board mit der Hoffnung dass die sache dann läuft. :) MfG Pat711
Hat überhaupt jmd. das DOGM163S-A mit 3V zum Laufen gebracht?
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.