www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DOG M 163 Display an Atemega8


Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verzweifele. Ich versuche ein DOG M 163 Display per SPI Mode a den 
Atmega8 anzuschließen. Es rührt sich seite zwei Tagen nichts. Ich 
vermute ich habe ein generelles Problem. Zum Anschluss: Ich wollte den 
PORTB verwenden. Ich habe jetzt die Anschluesse SI, CLK, RS, CSB mit dem 
Atmege zu verdrahten. Ich habe angeschlossen: RS-PB3, CSB-PB2, CLK-PB1, 
SI-PB0. Ist das schon mal richtig?
Dann gibt es ja eine ganze Menge softwarelinks auch hier im Forum aber 
ich bekomme das leider nicht so recht zum laufen. Kann mir da jemand 
auch mit der Software hilfreich zur Seite stehen? Oder einen Tip geben?
Danke!

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keiner eine Idee?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus diesem Thread bist du nicht schlau geworden?
Beitrag "Initialisierungsfolge fuer EA DOGM 163 SPI 3.3V"

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja hilft weiter, hat aber leider nicht die Lösung gebracht. Ich habe 
jetzt gelernt, daß man das SPI ja erst mal initialisieren muss. So 
gemacht wie in dem Datenblatt vom Atmega8 (kopiert) und für MOSI PB3 und 
für SCK PB5 eingetragen. RS und CS liegen an PB1 und PB0. Also Takt 
verwende ich 8Mhz, und der SPI Takt wird mit 16 auf 500kHz 
heruntergesetzt. Ist das richtig?

void spi_init(void)
{
  /* Set MOSI and SCK output, all others input */
  DDRB = (1<<PB3)|(1<<PB5);
  /* Enable SPI, Master, set clock rate fck/16 */
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
  }


void spi_transmit(char cData)
  {
  /* Start transmission */
  SPDR = cData;
  /* Wait for transmission complete */
  while(!(SPSR & (1<<SPIF)));
}



Dann kommt die Displayinitialisierung (also Kopie vom Link zuvor):

void lcd_init(void) {
//diese Funktion setzt ein initialisieres SPI vorraus.
        _delay_ms(200);
        LCD_PORT &= ~(1<<LCD_RS);
        LCD_PORT &= ~(1<<LCD_CS);
        spi_transmit(0x38);
        _delay_ms(2);
        spi_transmit(0x39); //FUNCTION Set
        _delay_ms(2);
        spi_transmit(0x1D); //BIAS
        _delay_ms(2);
        spi_transmit(0x78); //CONTRAST
        _delay_ms(2);
        spi_transmit(0x55); //Booster+Contrast
        _delay_ms(2);
        spi_transmit(0x6D); //Spannungsfolger
        _delay_ms(200);
        spi_transmit(0x38); //FUNCTION Set
        _delay_ms(1);
        spi_transmit(0x0F); //DISPLAY ON Cursor blink
        _delay_ms(1);
        LCD_PORT |= (1<<LCD_CS); //CS auf high -> momentan aus
}

Hier leider das Phänomen, daß der controler scheinbar bei der 
initialisierung steckenbleibt. Also es hängt sich irgendwie auf.

Hat einer eine Idee?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Hat einer eine Idee?

Wo stammen die Initialisierungswerte her?

MfG Spess

Autor: Ronald R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tino,

ich habe einfach mal Deine Init-Sequenz auf meinem PIC18 Board 
ausprobiert und sie funktioniert NICHT!

Für meine DOG M163 verwende ich folgende Init-Sequenz. Der Code ist vom 
PIC-C18 Compiler, für das Prinzip ist das aber egal.
   #define EADOGM_INIT_BIAS_SET 0x15
   #define EADOGM_INIT_POWER_CONTROL 0x55
   #define EADOGM_INIT_FOLLOWER_CONTROL 0x6E
   #define EADOGM_INIT_CONTRAST_SET 0x72 
   #define EADOGM_INIT_FS1 0x39
   #define EADOGM_INIT_FS2 0x38
   #define EADOGM_INIT_CLEAR_DISPLAY 0x01
   #define EADOGM_INIT_ENTRY_MODE 0x06

   eaDogM_WriteCommand(EADOGM_INIT_FS1);
   eaDogM_WriteCommand(EADOGM_INIT_BIAS_SET);
   eaDogM_WriteCommand(EADOGM_INIT_POWER_CONTROL);
   eaDogM_WriteCommand(EADOGM_INIT_FOLLOWER_CONTROL);
   Delay10KTCYx(200);  
   eaDogM_WriteCommand(EADOGM_INIT_CONTRAST_SET);
   eaDogM_WriteCommand(EADOGM_INIT_FS2);
   eaDogM_WriteCommand(EADOGM_INIT_CLEAR_DISPLAY);
   Delay1KTCYx(20);
   eaDogM_WriteCommand(EADOGM_INIT_ENTRY_MODE);

Deine 2 ms Delays zwischen den SPI-Kommandos sind hierbei im 
WriteCommand() enthalten.

Autor: Nippey (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Initialisierungssequenz für SPI abe ich mit dem DOGM 163 auf 5V 
erfolgreich getestet:
0x39, 0x1D, 0x6C, 0x50, 0x75, 0x38, 0x0F, 0x06, 0x01

Die Initialisierung hat über einen FTDI im BitBang Modus + Soft SPI 
stattgefunden, also relativ langsam (~10kHz).

Autor: Matthias N. (nippey)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Also es hängt sich irgendwie auf.

Hast du deinem Programm/Compiler deine Quarz-Frequenz bekanntgegeben? 
Sonst braucht _delay_ms eventuell einfach nur extrem lange...

<ot: Hmm edit ist nur eingeloggt möglich, sorry>

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke fuer die Antworten.

Erstmal wollte ich klären ob Verdrahtung überhaupt richtig ist. Kann 
dies jemand kurz bestätigen?

> Hast du deinem Programm/Compiler deine Quarz-Frequenz bekanntgegeben?
> Sonst braucht _delay_ms eventuell einfach nur extrem lange...

Klaro. Der Controller hat schon ein Programm drauf laufen, daß ein 
grosses Display per Seriell ansteuert. Und hier stimmt die Zeit.

Eigentlich läuft das SPI doch ohne zu wissen ob die andere Seite 
überhaupt empfangen hat. Ich wundere mich warum, mein Programm dann 
einfach hängt. Stimmt meine SPI initialisierung?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich recht erinnere, gibt es bei SPI eine Falle. Der Pin SS 
muss auf Ausgang gesetzt werden, sonst arbeitet die SPI nicht als 
Master.

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Wenn ich mich recht erinnere, gibt es bei SPI eine Falle. Der Pin SS
> muss auf Ausgang gesetzt werden, sonst arbeitet die SPI nicht als
> Master.

In der Tat, jetzt hängt bei mir die Initialisierung nicht mehr. Was das 
Display aber nicht davon abhält, nichts anzuzeigen. Initalisierung nach 
Ronald R. Der SS Pin wird nicht verwendet, oder? Stimmt bei mir dann 
grundsätzlich die Verdrahtung?

Autor: Tino Kühn (blumengiesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler ist gefunden. Ich trau mich den garnicht zu dokumentieren: Der 
CSB & RS Pin waren nicht als Ausgang konfiguriert... Aber jetzt...!

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.