Forum: Mikrocontroller und Digitale Elektronik DOG Display mit SPI


von Felix T. (mcbain)


Lesenswert?

Guten Tag zusammen

Zuerst, ich habe mich hier durch das Forum gewühlt und nach meinem 
Problem gesucht und auch einiges dazu gefunden, aber ich habe 
offensichtilich nicht verstanden, da mein Display immer noch dunkel ist.

Ich möchte gerne das Display über die SPI Schnittstelle ansteuern und
bekomme es nicht zum laufen. Ich habe es schonmal mit 8Bit betrieben und
da hat es auch hingehauen.
Vielleicht sieht ja Einer was ich falsch mache.

Auszüge:

PORTB = 0xFF;
DDRB = 0xFF;

SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

void out (u08 d)
{
  PORTB &= ~0x02;
  SPDR = d;
  // Wait for transmission complete
  while(!(SPSR & (1<<SPIF)));
  _delay_us(30);
  PORTB |= 0x02;
}

void homer()
{
  out('H');    // 1 H
  out('o');    // 2 O
  out('m');    // 3 M
  out('e');    // 4 E
  out('r');    // 5 R

void init()  //Display init
{
  out(0x38);
  _delay_ms(30);
  out(0x39);
  _delay_ms(30);
  out(0x1D);
  _delay_ms(30);
  out(0x50);
  _delay_ms(30);
  out(0x6C);
  _delay_ms(30);
  out(0x7C);
  _delay_ms(30);
  out(0x0F);
  _delay_ms(30);
  out(0x01);
  _delay_ms(30);
  out(0x06);
}

main()
{
init();
homer();
}
Angeschlossen:
PB0  = RS
PB1  = CSB
MOSI = SI
SCK  = CLK

Ich danke schonmal im Vorraus für Eure Mühen.

von Erwin R. (er-tronik)


Lesenswert?

Ich kann nirgendwo erkennen, wo Du das RS-Bit an PB0 veränderst.
Das steht bei der Initialisierung PORTB = 0xFF auf HIGH und bleibt auch 
so. Damit kann man aber keine Control-Befehle ans Display schicken, 
sondern nur Daten zur Zeichenausgabe.

Also vor dem Init zunächst mal
1
PORTB &= ~0x01;
dann die Init-Sequenz
und zum Schluß wieder
1
PORTB |= 0x01;
Dann kannst Du die Zeichen ausgeben.

Zwischen den einzelnen Init-Befehlen muss keine 30ms gewartet werden, 
1ms reicht vollkommen aus.

Den Befehl am Anfang:
1
out(0x38);   // 8-Bit, 2 Zeilen, Instr. Table 0
kannst Du Dir sparen, da dieser sofort durch den 2. Befehl
1
out(0x39);   // 8-Bit, 2 Zeilen, Instr. Table 1
aufgehoben wird.

Stattdessen sollte am Ende der Initialisierungssequenz wieder auf Table 
1 zurückgeschaltet werden, also den
1
out(0x38);
ganz ans Ende der Tabelle.

Danach sollte das Display eigentlich funktionieren.


Falls Du noch Probleme hast, frag nur...
Ich hab schon etliche DOG-Displays verbaut, klappen alle super am SPI.

Erwin

von Felix T. (mcbain)


Lesenswert?

Danke für die schnelle Antwort

Das Initialisieren haut jetzt hin, damit bin ich schon ein ganzes Stück 
weiter nur Schreiben tut er leider nix. Muss ich zum Schreiben noch 
irgendetwas an der out ändern?

Ich danke schonmal im Vorraus für die Mühen.

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.