www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DOG Display mit SPI


Autor: Felix Thiemann (mcbain)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Erwin Reuss (er-tronik)
Datum:

Bewertung
0 lesenswert
nicht 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
PORTB &= ~0x01;
dann die Init-Sequenz
und zum Schluß wieder
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:
out(0x38);   // 8-Bit, 2 Zeilen, Instr. Table 0
kannst Du Dir sparen, da dieser sofort durch den 2. Befehl
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
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

Autor: Felix Thiemann (mcbain)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.