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!
Aus diesem Thread bist du nicht schlau geworden? Beitrag "Initialisierungsfolge fuer EA DOGM 163 SPI 3.3V"
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?
Hi
>Hat einer eine Idee?
Wo stammen die Initialisierungswerte her?
MfG Spess
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.
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).
> 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>
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?
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.