Ich Programmiere in Assembler, und versuche gerade das Display mit SPI
zum Leben zu erwecken.
Erfolglos, vielleicht weis jemand weiter.
Ich habe es so mit dem Atmega32 angeschlossen:
CS...........PIND 0 ( mit Pull Up)
DC...........PIND 1
Reset........GND
D1...........MOSI
D0...........SCK
VCC, GND
und dann folgenden Code welchen ich aus einem Codebeispiel geschrumpft
habe:
1 | .include "m32def.inc"
|
2 |
|
3 | .def temp1 = r16
|
4 |
|
5 | ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
|
6 | out SPL, temp1
|
7 | ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
|
8 | out SPH, temp1
|
9 |
|
10 | //SPI Initialisieren
|
11 | ldi temp1,(0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(1<<SPR1)|(1<<SPR0)
|
12 | out SPCR,temp1
|
13 |
|
14 | ldi temp1,(0<<SPI2X)
|
15 | out SPSR,temp1
|
16 |
|
17 |
|
18 |
|
19 | ldi temp1, 0xFF ; Port D = Ausgang
|
20 | out DDRD, temp1
|
21 |
|
22 |
|
23 | sbi PORTD,0 //CS PIN auf HIGH
|
24 |
|
25 | //Übertragung starten
|
26 | cbi PORTD,0//CS PIN auf LOW
|
27 |
|
28 | ldi temp1, 0b10100111 //Display Inverse
|
29 | out SPDR,temp1
|
30 | SPI_SENDEN_w:
|
31 | sbis SPSR,SPIF
|
32 | rjmp SPI_SENDEN_w
|
33 |
|
34 | in temp1, SPDR ; einlesen
|
35 | sbi PORTD,0
|
Nun nach starten des Programms keine Reaktion des Displays.
Wie initialisiere ich es und ist mein Bus überhaupt richtig?
Ich habe alles aus folgendem Datenblatt:
http://www.adafruit.com/datasheets/SSD1306.pdf