Forum: Mikrocontroller und Digitale Elektronik Digitales Poti AD5293 und ATmega8


von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte ein AD5293 mit einem ATmega8 per SPI ansteuern. Der ATmega 
ist folgendermaßen mit dem AD5293 verbunden:
MOSI(PB3) - DIN
SCLK(PB5) - SCLK
/SS(PB2) - /SYNC

Mit dem Code im Anhang bekomme ich auf der Clock und Daten-Leitung das 
entsprechende Bitmuster.
Der Slave-Select verhält sich jedoch seltsam. Sobald ich mit dem 
Oszilloskop am PIN messe, stürzt scheinbar das Programm ab und 
funktionert erst wieder nach einem Reset des ATmega.

Der Slave-Select wird doch ganz normal als Ausgang konfiguriert oder 
übersehe ich da was?

von Tom (Gast)


Lesenswert?

Hat mir niemand einen Tipp, wo der Fehler sein könnte? Das scheint ja 
irgendwie ein Problem mit dem SPI des ATmega zu sein und weniger des 
Slaves.

von CB (Gast)


Lesenswert?

Hallo Tom,

bin auch grad am AD5293 dran.

Init musst du so machen.

SPI_DDR &= ~(1<<SDO);
SPI_DDR |= (1<<SDI)|(1<<SCK)|(1<<CS);
SPI_PORT |= (1<<CS)|(1<<SCK)|(1<<SDI);

SPCR =0x00;
SPCR |= (1<<SPE)|(1<<MSTR)|(1<<CPHA);

Sowas wie
SPCR = (0<<SPIE))
wird dir so nie funktionieren.

Bits löscht man durch
SPCR &= ~(1<<SPIE)

Hoffe das hilft dir schon mal.

Gruß CB

von spess53 (Gast)


Lesenswert?

Hi

>Init musst du so machen.

Nein, muss er nicht.

>uint8_t byte1 = (val>>8 & 0xFF) | (1<<3);

Welches Bit willst du mit 1<<3 wirklich setzen?

MfG Spess

von Tom (Gast)


Lesenswert?

Hallo CB und Spess,

danke für eure Tipps.

Die Initialisierung ist ja nur anders geschrieben.

CB schrieb:
> SPCR = (0<<SPIE))

Da hast du Recht, das hat keine Auswirkung auf das Programm. Das ist nur 
der Übersicht halber mit drin. Die Initialwerte des Ports habe ich von 
dir übernommen.

spess53 schrieb:
> Welches Bit willst du mit 1<<3 wirklich setzen?

Bit10 (C0), da habe ich mich scheinbar verzählt. Richtig müsste es 
heißen:
uint8_t byte1 = (val>>8 & 0xFF) | (1<<2);


Jetzt funktioniert alles. Danke euch beiden.

Noch ein kurzer Nachtrag: Obiges Programm muss noch durch die 
Deaktivierung des Write Protect erweitert werden. Also zu Beginn Command 
4 aus Tab. 11 im Datenblatt schreiben.

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.