Initialisation + Zeichenausgabe ks0073

Gast #2672118
Lesenswert?
• ▲
▼
Moin,

ich versuche grade ein LCD mit dem ks0073 im 4 Bit Modus zu 
initialisieren und ein zeichen auszugeben. Mit einem anderen LCD, 
welches den anderen Standartchip benutzt habe ichs schon hinbekommen - 
mir fällt der Name grade nicht ein. Es wird sich hier wieder um einen 
grundsätzlichen kleinen Fehler handeln, auf dem ich nicht komme.

Bei diesem sehe ich nun allerdings nur schwarze große Zeichen und kein 
'a' wie gewünscht. Die ganze Routine hängt in der lcd_busy funktion in 
der Schleife fest.

Die pinbelegung am Atmega16 ist:
Portc->
7: RS
6: RW
5: D7
..
2: D4
1: E

Resetleitung des Displays ist auf 0V gezogen.

Ich habe folgende Funktionen gebastelt.
1
#define LCD_PORT PORTC
2
#define LCD_INPUT PINC
3
#define LCD_DIRECTION_CONTROL DDRC
4
#define LCD_READWRITE 6
5
#define LCD_DATACOMMAND 7
6
#define LCD_ENABLE 1
7

8
  inline void lcd_execute(){
9
    LCD_PORT |= 1<<LCD_ENABLE;
10
    _delay_ms(1);
11
    LCD_PORT &= ~(1<<LCD_ENABLE);
12
  }
13

14
  inline void lcd_init(){
15
  
16
    _delay_ms(50);
17

18
    LCD_PORT = 0b00001000;
19
    lcd_execute();
20

21
    _delay_ms(1);
22
    LCD_PORT = 0b00001000;
23
    lcd_execute();
24
    LCD_PORT = 0b00100000;
25
    lcd_execute();
26

27
    _delay_ms(1);
28
    LCD_PORT = 0b00000000;
29
    lcd_execute();
30
    LCD_PORT = 0b00110000;
31
    lcd_execute();
32

33
    _delay_ms(1);
34
    LCD_PORT = 0b00000000;
35
    lcd_execute();
36
    LCD_PORT = 0b00000100;
37
    lcd_execute();
38
    
39
    _delay_ms(4);
40
    LCD_PORT = 0b00000000;
41
    lcd_execute();
42
    LCD_PORT = 0b00011000;
43
    lcd_execute();
44
  }
45

46
  inline void lcd_busy(){
47
    unsigned char x;
48

49
    LCD_DIRECTION_CONTROL = 0b11000011; //Daten aufnEingang
50
    LCD_PORT |= (1<<LCD_READWRITE);    //1 = Read
51
    LCD_PORT &= ~(1<<LCD_DATACOMMAND); //0 = Command
52
    
53
    do{
54
      LCD_PORT |= 1<<LCD_ENABLE;
55
      x = LCD_INPUT<<2;
56
      LCD_PORT &= ~(1<<LCD_ENABLE);
57
      lcd_execute();
58
    }while(x >= 0x80);
59
    
60
    LCD_DIRECTION_CONTROL = 0xFF;PORTB = 1;
61
  }
62
  
63
  inline void lcd_command(unsigned char command){
64
    lcd_busy();
65
  
66
    LCD_PORT = (command>>2)&0b00111100;
67
    lcd_execute();
68
    LCD_PORT = (command<<2)&0b00111100;
69
    lcd_execute();
70
  }
71
  
72
  inline void lcd_send_character(unsigned char character){
73
    lcd_busy();
74
  
75
    LCD_PORT = ((character>>2)&0b00111100) | 0b10000000;
76
    lcd_execute();
77
    LCD_PORT = ((character<<2)&0b00111100) | 0b10000000;
78
    lcd_execute();
79
  }

In der main Funktion steht nur folgendes:
1
  lcd_init();
2
  lcd_send_character('a');

mfg

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.