Hallo,
Ich versuche vergeblichst ein LCD mithilfe eines ATMega32 anzusteuern.
Ich habe bereits verschiedene Code-Beispiele aus dem Forum/Wiki versucht
jedoch vergeblich.
Das Display verwendet einen angeblich zum HD44780 kompatiblen
Controller, im Forum wird jedoch öfters erwähnt, das dieser eine etwas
andere Initialsierung benötigt. Deswegen habe ich mir das Datenblatt
geholt, und die Initialisierungsroutine aus dem Codebeispiel aus dem
Mikrocontroller.net-Wiki umgeschrieben. (Siehe weiter unten oder den
Gesamten Source im Anhang)
Angesteuert wird das Display wie in dem angehängten Schaltplan.
Verwendetes LCD: Anag Vision AV2020 (Datenblatt:
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/183350-da-01-ml-LCD_Modul_20x2_Zeichen_de_en.pdf)
LCD-Controller: KS0066 (Datenblatt:
http://pdf1.alldatasheet.com/datasheet-pdf/view/37318/SAMSUNG/KS0066.html)
Die veränderte Init-Funktion:
1 | void lcd_init( void )
|
2 | {
|
3 | // verwendete Pins auf Ausgang schalten
|
4 | uint8_t pins = (0x0F << LCD_DB) | // 4 Datenleitungen
|
5 | (1<<LCD_RS) | // R/S Leitung
|
6 | (1<<LCD_EN); // Enable Leitung
|
7 | LCD_DDR |= pins;
|
8 |
|
9 | LCD_PORT &= ~(1<<LCD_RS); // RS auf 0, "Befehl"
|
10 |
|
11 | // Function set
|
12 | LCD_PORT |= (0x03 << LCD_DB);
|
13 | lcd_enable();
|
14 | LCD_PORT |= (0x03 << LCD_DB);
|
15 | lcd_enable();
|
16 | LCD_PORT |= (0x03 << LCD_DB);
|
17 | lcd_enable();
|
18 | _delay_ms(1);
|
19 |
|
20 | // Display on/off control
|
21 | LCD_PORT = (0x00 << LCD_DB);
|
22 | lcd_enable();
|
23 | LCD_PORT |= (0x0F << LCD_DB);
|
24 | lcd_enable();
|
25 | _delay_ms(1);
|
26 |
|
27 | // entry mode
|
28 | LCD_PORT = (0x00 << LCD_DB);
|
29 | lcd_enable();
|
30 | LCD_PORT |= (0x01 << LCD_DB);
|
31 | lcd_enable();
|
32 | _delay_ms(1);
|
33 |
|
34 | // entry mode
|
35 | LCD_PORT = (0x00 << LCD_DB);
|
36 | lcd_enable();
|
37 | LCD_PORT |= (0x07 << LCD_DB);
|
38 | lcd_enable();
|
39 | _delay_ms(1);
|
40 |
|
41 |
|
42 | lcd_clear();
|
43 | lcd_home();
|
44 | }
|
Die veränderten Einstellungen in der Header-Datei:
1 | /*
|
2 | * Pinbelegung
|
3 | *
|
4 | */
|
5 |
|
6 | // LCD DB4-DB7 <--> PORTD Bit PD0-PD3
|
7 | #define LCD_PORT PORTC
|
8 | #define LCD_DDR DDRC
|
9 | #define LCD_DB PC0
|
10 |
|
11 | // LCD RS <--> PORTD Bit PD4 (RS: 0=Data, 1=Command)
|
12 | #define LCD_RS PC4
|
13 |
|
14 | // LCD EN <--> PORTD Bit PD5 (EN: 1-Impuls für Daten)
|
15 | #define LCD_EN PC5
|
Der gesamte Source befindet sich im Anhang...
Ich hoffe ihr könnt mir helfen und danke schon im voraus,
Michael