PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Digitalpotio über SPI ansteuern



shedepe
13.04.2013, 18: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

robo_tom_24
13.04.2013, 19:24
Laut deinem KOmmentar im Init-Teil ist PB7 SS, beim Sende-Code ists aber PB4...

shedepe
13.04.2013, 19:32
Im Kommentar ist es nicht in der richtigen Reihenfolge, war nur kurz dran kommentiert um zu wissen welche Pins es überhaupt sind

shedepe
17.04.2013, 17:29
Ich habe den Fehler gefunden.
Man sollte den MOSI auf SDI legen und nicht MISO auf SDI wie im Wikipediartikel zu SPI erklärt.

Klebwax
17.04.2013, 18:53
Man sollte den MOSI auf SDI legen und nicht MISO auf SDI wie im Wikipediartikel zu SPI erklärt.

SDI ist nun mal zweideutig: der Master hat ein SDI und der Slave ebenfalls.
MISO passt schon zu SDI: MasterInSlaveOut ist SerialDataIn vom Master.

MfG Klebwax