Digitales Poti AD5293 und ATmega8

Gast #4278354
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?
Angehängte Dateien:
Gast #4295852
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
Gast #4296101
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren