Forum: Mikrocontroller und Digitale Elektronik Probleme mit Atmega32 SPI (MCP42010)


von Christian (Gast)


Lesenswert?

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!

: Bearbeitet durch User
von Christian (Gast)


Lesenswert?

* Der SHND-Pin (Shutdown):  dauerhaft high

Sorry

von holger (Gast)


Lesenswert?

PORTA &=~(1<<PB3);  //CS

Hmmmm;)

von Karl H. (kbuchegg)


Lesenswert?

Du solltest den SS Pin vom Mega (Port B, Pin PB4) noch auf Ausgang 
schalten. Siehe den Abschnitt über SPI im Datenblatt.
Tust du es nicht, dann steuert der SS Pin, ob sich der Mega als Master 
oder als Slave am SPI Bus verhält. Auf Ausgang schalten vermeidet 
diesbezüglich Probleme und der Mega fungiert definitiv als Master.

von holger (Gast)


Lesenswert?

Nimm PB4 als CS. Auf jeden Fall muss PB4 ein Ausgang sein.
Dann klappts auch mit Master SPI.

von Karl H. (kbuchegg)


Lesenswert?

Christian schrieb:


> CS: PB3 ATmega

> PORTA &=~(1<<PB3);  //CS


Was jetzt?
Port A oder Port B?

Die entsprechenden Umschaltungen auf Ausgang über das DDRx Register 
fehlen auch.

von Christian (Gast)


Lesenswert?

holger schrieb:
> PORTA &=~(1<<PB3);  //CS
>
> Hmmmm;)

ohh..

Vielen Dank! Werde mal versuchen PB4 zu verwenden

von Christian (Gast)


Lesenswert?

Läuft!
Vielen lieben Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.