Hallo zusammen. Ich bin Anfänger in Programmieren und hab auch schon Paar Dinge mit I2C gemeistert. Jezt bin ich mit SPI dran. Ich habe einen DAC8552 der mit SPI angesteuert wird von einem ATmega2560. Dazwischen ist ein LSF0204 Pegelwandler. Ich versuche momentan lediglich auf einem der zwei kanäle ein Analog Signal heraus zu geben. Dafür habe ich mal den Standart SPI Code für dieses Projekt gewählt. Jetzt bin ich im Datenblatt die genaue Ansteuerung zu ermittteln. Irgendwie fällt mir das unheimlich schwer. Als ich mal was mit I2C gemacht habe war dies ein wenig organisiert mit Adressen und Kommandos. Hier blicke ich leider nicht ganz durch was ich falsch mache. Sieht jemand ev. was ich falsch mache oder ich da einen kompletten falschen Ansatz habe im Programm. Danke im Voraus!
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #pragma GCC optimize 2 //Optimierung
|
4 | |
5 | #define F_CPU 16000000UL
|
6 | |
7 | |
8 | #define DD_MISO PB3
|
9 | #define DD_MOSI PB2
|
10 | #define DD_SCK PB1
|
11 | #define DD_SS PB0
|
12 | #define DDR_SPI DDRB
|
13 | |
14 | void SPI_MasterInit(void) |
15 | {
|
16 | // Set MOSI and SCK output, all others input
|
17 | DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK) |(1<<DD_SS); |
18 | // Enable SPI, Master, set clock rate fck/16
|
19 | SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPR0); |
20 | }
|
21 | uint8_t SPI_MasterTransmit(char Data) |
22 | {
|
23 | SPDR = Data; |
24 | while(!(SPSR & (1<<SPIF))); |
25 | return(SPDR); |
26 | }
|
27 | //****************************************************************************
|
28 | //Hauptprogramm
|
29 | //****************************************************************************
|
30 | int main(void) |
31 | {
|
32 | InitDriverColor(); //Einstellungen initialisieren |
33 | SPI_MasterInit(); //SPI |
34 | wait_5ms(350); //Warten bis start Programm LCD Profil |
35 | clear_lcd_f(); |
36 | |
37 | while(1) |
38 | {
|
39 | write_text(0,3,"AO-Output Test"); |
40 | SPI_MasterTransmit(0x00); //Standard Modus |
41 | SPI_MasterTransmit(0x10); //Kanal 1 |
42 | SPI_MasterTransmit(0x33); //MSB |
43 | SPI_MasterTransmit(0x00); //LSB |
44 | _delay_ms(100); |
45 | }
|
46 | }
|