Moin!
Ich hoff das ist das richtige Unterforum, hab leider kein passenderes gefunden.
Ich versuche gerade einen DA-Wandler über SPI anzusprechen. Bis jetzt
leider ohne Erfol.
Der DA-Wandler erwartet ein 14-bit Wort nach dem Schema:
1 Startbit, 2 Controlbits, 3 Adressbits und 8-Datenbits.
folgendes möchte ich Übertragen:
1 0 1 0 0 0 1 1 , 1 1 1 1 1 1
Das wäre meine 14-bit Information, um das zweite Byte vollzubekommen
häng ich noch 2 0er an. Die letzten zwei Stellen sind ja eh don`t care
für den DA-Wandler(?).
Also übertrage ich 0xA3 und 0xFC mit folgendem Program:
Nicht wundern wegen SS und CS, CS geht an den DA-Wandler, SS ist überCode:#include <stdlib.h> #include <avr/io.h> #include <avr/signal.h> #define SS PB0 #define MOSI PB2 #define SCK PB1 #define CS PE6 SIGNAL (SIG_SPI) { return; } void SPI_Master_TransmitInit(void) { /* Set MOSI, SS und SCK als Ausgang */ DDRB |= (1<<MOSI) | (1<<SCK) | (1<<SS); DDRE |= (1<<CS); //Chip select als Ausgang PORTB |=(1<<SS); //Slave select High PORTE |= (1<<CS); //Chip select High /* Enable SPI Interrupt, Enable SPI, Master, f = FCPU/16 */ SPCR = (1<<SPIE) | (1<<SPE) | (1<<MSTR) | (1<<SPR0); } void SPI_MasterTransmit(void) { PORTE &= ~(1<<CS); //Chip select Low PORTB &= ~(1<<SS); //Slave select Low SPDR = 0xA3; //Erstes Byte senden while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet SPDR = 0xFC; //Zweites Byte senden while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet PORTE |=(1<<CS); //Chip select High PORTB |=(1<<SS); //Slave select High } int main (void) { sei(); SPI_Master_TransmitInit(); SPI_MasterTransmit(); while(1) return 0; }
Widerstand auf Masse, ist Hardwaremäßig so vorgegeben.
Weiß vielleciht jemand einen Rat was faul sein könnte?







Zitieren
Lesezeichen