www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD mit Atmega8 in C initialisieren


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
ich verzweifel! Bin Neuling im Umgang mit Microcontrollern. Will über 
einen Atmega8 in C ein LCD im 4-Bit-Modus ansteuern und krigs einfach 
nicht hin. LCD zeigt nur die erste Zeile mit schwarzen Feldern an und 
die zweite ist komplet leer. Hab folgenden Code zusammengebastelt:

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 8000000

//Displayinitialisierung
void lcd_init(void)
{
  //PORT D als Ausgang definieren
  DDRD = 0xff;

  //Power on
  _delay_ms(40);

  //Interface auf 8 Bit setzen
  PORTD = 0b00110000;

  _delay_ms(5);
  //Interface auf 8 Bit setzen
  PORTD = 0b00110000;

  _delay_ms(0.1);
  //Interface auf 8 Bit setzen
  PORTD = 0b00110000;

  //Interface auf 4 Bit setzen
  PORTD = 0b00100000;

  //2-zeilig, 5x8-Punkt-Matrix
  PORTD = 0b00100000;
  PORTD = 0b01000000;

  //Display aus
  PORTD = 0x00;
  PORTD = 0b10000000;

  //Display loeschen
  PORTD = 0x00;
  PORTD = 0b00010000;

  //Kursor nach rechts wandernd, kein shift
  PORTD = 0x00;
  PORTD = 0b01100000;

  //Display ein
  PORTD = 0x00;
  PORTD = 0b11000000;
}

//erzeugt den Enable-Puls
void lcd_enable(void)
{
    // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers 
einfügen
    // Beitrag "Re: Bitte helft mir. Schon wieder AtMega16"
  PORTD |= (1<<PD3);
  _delay_us(1);                   // kurze Pause
    // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers 
verlängern
    // Beitrag "LCD -> Probleme mit Optimierungsgrad"
    PORTD &= ~(1<<PD3);
}

//Ausgabe eines Zeichens auf dem Display
void lcd_data (unsigned char temp1)
{
  unsigned char temp2 = temp1;

  PORTD |= (1<<PD2);        // RS auf 1 setzen

  temp1 = temp1 >> 4;
  temp1 = temp1 & 0x0F;
  PORTD &= 0xF0;
  PORTD |= temp1;               // setzen
  lcd_enable();

  temp2 = temp2 & 0x0F;
  PORTD &= 0xF0;
  PORTD |= temp2;               // setzen
  lcd_enable();

  _delay_us(42);
}

int main (void)
{

  lcd_init();
  lcd_data('T');

  while(1)
  {
  }

  return 0;
}

Kann mir jemand sagen, was ich tun muss, damit das T auf meinem Display 
angezeigt wird? Vielen Dank schon mal im Vorraus!
Hans

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  //Interface auf 8 Bit setzen
>  PORTD = 0b00110000;

Wo wird hier die Enable Leitung benutzt?

>  _delay_ms(5);
>  //Interface auf 8 Bit setzen
>  PORTD = 0b00110000;

Einfach nur Bytes auf PORTD schreiben geht eben nicht.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans schrieb:
> void lcd_init(void)
> {
>   //PORT D als Ausgang definieren
>   DDRD = 0xff;
>
>   //Power on
>   _delay_ms(40);
>
>   //Interface auf 8 Bit setzen
>   PORTD = 0b00110000;
>
>   _delay_ms(5);
>   //Interface auf 8 Bit setzen
>   PORTD = 0b00110000;
>
>   _delay_ms(0.1);
>   //Interface auf 8 Bit setzen
>   PORTD = 0b00110000;
[..]

..fehlt da nicht was?.. sowas wie RS? R/W? E? Und wo sind die 
angeschlossen und wer toggelt die passend? Abgesehen davon: Was für ein 
Display(controller) ist das überhaupt? HD44780? Das Datenblatt ist - was 
die Initialisierung des HD44780 angeht - übrigens ★ziemlich★ 
aufschlussreich. Die Datenblätter anderer Controllertypen i.d.R. ebenso 
:-)

HTH </winkmitdemganzenzaun>

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
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.

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