Moin! Ich habe mir schon sehr viele und auch hilfreiche Beiträge zum Thema DOGM SPI Ansteuerung durchgelesen, blicke aber trotzdem nicht durch. Ich verwende die vom Hersteller empfohlene Ansteuerung mit jeweils 1 ms zwischen den Befehlen. Wenn ich das aus anderen Beiträgen richtig erfasst habe, dann muss der SPI Ruhepol High sein (CPOL setzen). Muss ich da auch CPHA setzen? Ich habe einmal im Wiki einen Beitrag über den Wellenwiderstand gelesen. Kann es vielleicht daran liegen, dass ich ein 20 cm langes Datenkabel (10pol. Wannenstecker) verwende und die Daten nicht richtig ankommen? Ich betreibe das Display an 3,3V. Boosterkondensatoren habe ich angeschlossen. Theoretisch müsste ich nach der Initialisierung ca. 12V an Pin 32 abtasten können. Ich kann aber nur 2,7 Volt messen. Also stimmt was mit der Übertragung nicht. Ich verwende einen ATmega644 @10 Mhz Die Hardware-SPI-Ansteuerung habe ich aus dem Datenblatt des ATMEGA64. Meine Verbindungen: Mosi -> Si SCK -> SCL PA0 (auf LOW gesetzt) -> CS PA1 (auf HIGH getzt) -> RESET PA2 (vorerst auf LOW gesetzt) -> A0 Display-Routine(n):
1 | #include "SPI.h" |
2 | #include <util/delay.h> |
3 | |
4 | #ifndef _Display
|
5 | #define _Display
|
6 | |
7 | void DisplayInit(void) |
8 | {
|
9 | SPI_MasterTransmit(0x40); //Display start line 0 |
10 | _delay_ms(1); |
11 | SPI_MasterTransmit(0xA1); //ADC Reverse |
12 | _delay_ms(1); |
13 | SPI_MasterTransmit(0xC0); //Normal COM0~COM63 |
14 | _delay_ms(1); |
15 | SPI_MasterTransmit(0xA2); //Set Bias 1/9 |
16 | _delay_ms(1); |
17 | SPI_MasterTransmit(0x2F); //Booster, Regulator and Follower on |
18 | _delay_ms(1); |
19 | SPI_MasterTransmit(0xF8); //Booster 4x |
20 | _delay_ms(1); |
21 | SPI_MasterTransmit(0x00); //Booster 4x |
22 | _delay_ms(1); |
23 | SPI_MasterTransmit(0x27); //Contrast set |
24 | _delay_ms(1); |
25 | SPI_MasterTransmit(0x81); //Contrast set |
26 | _delay_ms(1); |
27 | SPI_MasterTransmit(0x16); //Contrast set |
28 | _delay_ms(1); |
29 | SPI_MasterTransmit(0xAC); //No Indicator |
30 | _delay_ms(1); |
31 | SPI_MasterTransmit(0x00); //No Indicator |
32 | _delay_ms(1); |
33 | SPI_MasterTransmit(0xAF); //Display on |
34 | _delay_ms(1); |
35 | }
|
36 | |
37 | #endif
|
SPI-Routine (Aus dem 644-Datenblatt):
1 | #ifndef _SPI
|
2 | #define _SPI
|
3 | |
4 | void SPI_MasterInit(void) |
5 | {
|
6 | DDRB = (1<<PB5) | (1<<PB7); |
7 | SPCR = (1<<SPE) | (1<<MSTR); |
8 | SPCR = (1<<SPR0); //F_CPU / 16 |
9 | SPCR |= (1<<CPOL); //set CPOL |
10 | }
|
11 | |
12 | void SPI_MasterTransmit(char Data) |
13 | {
|
14 | SPDR = Data; |
15 | while( ! (SPSR & (1<<SPIF))); |
16 | }
|
17 | |
18 | #endif
|