shedepe
13.04.2013, 19:24
Hallo zusammen,
ich will ein MCP4141 Digitalpoti über SPI an einem Atmega 32 ansteuern.
Mein Problem im Moment ist, manchmal passiert etwas (Der Widerstand ändert sich schlagartig), doch meistens passiert gar nichts.
Im Moment will ich nur,den Widerstand langsam größer bzw. kleiner machen.
Mein Code:
Init Code:
DDRB |= (1<<PB5) | (1<<PB7) | (1<<PB4); //SCK, SS und MOSI als Ausgang setzen
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //SPI aktivieren
Daten Senden:
PORTB &= ~(1<<PB4); //SS auf LOW - Übertragung aktivieren
_delay_us(100); //Kurz warten
SPDR = data; // Daten schicken
while(!(SPSR & (1<<SPIF)));
_delay_us(100); //Kurz warten
PORTB |= (1<<PB4); //SS auf High - Wert übernehmen
Und die Daten die ich sende:
data = 0b00000111 //Drecrement of Wiper 0
und
data = 0b00010111 //Decrement of Wiper 1
Da ich noch nie davor etwas mit SPI gemacht habe, hoffe ich darauf dass jemand von euch den Fehler in meinem Code findet.
Viele Grüße
Shedepe
ich will ein MCP4141 Digitalpoti über SPI an einem Atmega 32 ansteuern.
Mein Problem im Moment ist, manchmal passiert etwas (Der Widerstand ändert sich schlagartig), doch meistens passiert gar nichts.
Im Moment will ich nur,den Widerstand langsam größer bzw. kleiner machen.
Mein Code:
Init Code:
DDRB |= (1<<PB5) | (1<<PB7) | (1<<PB4); //SCK, SS und MOSI als Ausgang setzen
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //SPI aktivieren
Daten Senden:
PORTB &= ~(1<<PB4); //SS auf LOW - Übertragung aktivieren
_delay_us(100); //Kurz warten
SPDR = data; // Daten schicken
while(!(SPSR & (1<<SPIF)));
_delay_us(100); //Kurz warten
PORTB |= (1<<PB4); //SS auf High - Wert übernehmen
Und die Daten die ich sende:
data = 0b00000111 //Drecrement of Wiper 0
und
data = 0b00010111 //Decrement of Wiper 1
Da ich noch nie davor etwas mit SPI gemacht habe, hoffe ich darauf dass jemand von euch den Fehler in meinem Code findet.
Viele Grüße
Shedepe