Forum: Mikrocontroller und Digitale Elektronik Problem mit Display


von Martin (Gast)


Lesenswert?

hallo,

ich möchte mein Display initialisieren und ein Byte darauf ausgeben.
Halte mich bei der Initialisierung wie im Datenblatt angegeben. Trotzdem 
zeigt es nichts an. Kann mir da jemand evt. weiterhelfen, ob doch was 
falsch mache? Display ist korrekt an den Pins abgeschlossen, das habe 
ich schon überprüft.
Benutze dazu einen atmega48.

habe folgendes Display:
http://display-elektronik.de/DEM24251SYH-PY.pdf



#define F_CPU 8000000L

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

/*
PORTB:
PB0..PB7 -> DB0..DB7

PORTC:
PC0 - RS (Register Select)
PC1 - R/W
PC2 - Enable R/W
*/



int main(void)
{
  tUI8 zaehler;

  /* PORTB alles Ausgänge */
  DDRB = 0xFF;

  /* PORTC alles Ausgänge */
  DDRC = 0xFF;

  PORTC = 0x00;
  PORTB = 0x00;



  /*warte 30ms */
  for(zaehler=0;zaehler < 30; zaehler++) {
    _delay_ms(1);
  }

  /* Enable */
  PORTC |= (TRUE << PC2);

  _delay_ms(1);

  /* Funktion Set */
  /* 2 Linien, Display On */
  PORTB = (TRUE<<PB5) | (TRUE<<PB4) | (TRUE<<PB3) | (TRUE<<PB2);

  /*warten */
  _delay_us(100);


  /*Display On, Cursor On, Blinking On */
  PORTB = (TRUE<<PB3) | (TRUE<<PB2) | (TRUE<<PB1) | (TRUE<<PB0);

  /*warten */
  _delay_us(100);

  /* Display Clear */
  PORTB = (TRUE << PB0);

  _delay_ms(2);


  /* Entry mode */
  PORTB = (TRUE<<PB2) | (TRUE<<PB1);

  /* warten */
  _delay_us(100);


  PORTB = 0x00;
  _delay_ms(1);

  /* Datenregister auswählen */
  PORTC |= (TRUE << PC0);



  /* Datenbyte schreiben */
  PORTB = 0b00000011;

  _delay_us(100);

  /* Übertrag aus */
  PORTC = 0x00;
  PORTB = 0x00;

  return 0;
}

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
Noch kein Account? Hier anmelden.