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


von Tino K. (blumengiesser)


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!

von Tino K. (blumengiesser)


Lesenswert?

hat keiner eine Idee?

von Karl H. (kbuchegg)


Lesenswert?

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

von Tino K. (blumengiesser)


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?

von Spess53 (Gast)


Lesenswert?

Hi

>Hat einer eine Idee?

Wo stammen die Initialisierungswerte her?

MfG Spess

von Ronald R. (Gast)


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.
1
   #define EADOGM_INIT_BIAS_SET 0x15
2
   #define EADOGM_INIT_POWER_CONTROL 0x55
3
   #define EADOGM_INIT_FOLLOWER_CONTROL 0x6E
4
   #define EADOGM_INIT_CONTRAST_SET 0x72 
5
   #define EADOGM_INIT_FS1 0x39
6
   #define EADOGM_INIT_FS2 0x38
7
   #define EADOGM_INIT_CLEAR_DISPLAY 0x01
8
   #define EADOGM_INIT_ENTRY_MODE 0x06
9
10
   eaDogM_WriteCommand(EADOGM_INIT_FS1);
11
   eaDogM_WriteCommand(EADOGM_INIT_BIAS_SET);
12
   eaDogM_WriteCommand(EADOGM_INIT_POWER_CONTROL);
13
   eaDogM_WriteCommand(EADOGM_INIT_FOLLOWER_CONTROL);
14
   Delay10KTCYx(200);  
15
   eaDogM_WriteCommand(EADOGM_INIT_CONTRAST_SET);
16
   eaDogM_WriteCommand(EADOGM_INIT_FS2);
17
   eaDogM_WriteCommand(EADOGM_INIT_CLEAR_DISPLAY);
18
   Delay1KTCYx(20);
19
   eaDogM_WriteCommand(EADOGM_INIT_ENTRY_MODE);

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

von Nippey (Gast)


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).

von Matthias N. (nippey)


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>

von Tino K. (blumengiesser)


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?

von Karl H. (kbuchegg)


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.

von Tino K. (blumengiesser)


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?

von Tino K. (blumengiesser)


Lesenswert?

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

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.