Hallo,
Möchte gerne eine MCP42010 Digital-Poti per SPI mit einem Atmega32
steuern.
Das Poti will: SPI™ serial interface (mode 0,0 and 1,1)
Zuerst ein Commando-Byte und danach ein Daten-Byte
Zuerst möchte ich einmal beide Potis gleich ansteuern was folgendes
Commando-Byte sein müsste: 0b00010011;
Der IC wurde folgendermaßen beschaltet:
Der SHND-Pin (Shutdown): dauerhaft low
CS: PB3 ATmega
SCK: an SCK Atmega mit ca. 1k Widerstand dazwischen
Serial Data Input (SI): an MOSI Atmega mit ca. 1k Widerstand dazwischen
Reset: auf Reset-Leitung Atmega
Das Angelegte Signal an den Poti (1V Sinus) erscheint am Schleifer-Pin
genau halbiert. (Standarteinstellung des Potis).
Ich sehe im Oszi beim Flashen schön die SCK,MOSI,etc. Signale aber
punkto Poti tut sich absolut nichts :/
Hier meine Routinen:
1 | void SPI_INIT (void)
|
2 | {
|
3 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
4 | }
|
5 |
|
6 | void SPI_WORD (char data1, char data2)
|
7 | {
|
8 | PORTB|=(1<<PB7); //SCK
|
9 | PORTB|=(1<<PB5); //MOSI
|
10 | PORTA &=~(1<<PB3); //CS
|
11 | SPDR = data1;
|
12 | while(!(SPSR & (1<<SPIF)));
|
13 | SPDR = data2;
|
14 | while(!(SPSR & (1<<SPIF)));
|
15 |
|
16 | PORTB|=(1<<PB3); //CS
|
17 | PORTB&=~(1<<PB7); //SCK
|
18 | PORTB&=~(1<<PB5); //MOSI
|
19 | }
|
20 |
|
21 |
|
22 | int main (void)
|
23 | {
|
24 | SPI_INIT();
|
25 | SPI_WORD(0b00010011,0b11111111);
|
26 | }
|
Vielen Dank für die Hilfe!