Hallo liebes Forum,
ich bin neu im Forum und habe folgendes Problem:
Mein Ziel ist es mit einem Atmega 16 einen Seriellen DA-Wandler über SPI
anzusteuern.
Der DA Wandler ist der AD5304.
Die Funktionen hab ich analog zu beiden Datenblätter erstellt.
Jedoch bekomme ich am Ausgang vom uC keine Signale (gemessen mit Oszi)
Hier der Code:
1 | void spi_init(void) //SPI Schnittstelle aktivieren für DA-Wandlung
|
2 | {
|
3 | DDRB=(1<<PB4) | (1<<PB5) | (1<<PB7); //DD_MOSI, DD_SCK als Ausgänge setzten PB4 für CS als Ausgang setzten
|
4 | SPCR= 0x5B; //SPI Enable; Master; Prescaler 128
|
5 | PORTB |=(1<<PB4); //PB4 auf 1 Setzten - DA Wandler Low Aktiv
|
6 | }
|
7 |
|
8 | void geschw(char Data1, char Data2)//Daten zu DA-Wandler schicken
|
9 | {
|
10 | PORTB &= ~(1 << PB4); //PIN PB4 auf 0 (DA-Wandler emfangsbereit)
|
11 | SPDR=Data1; //ersten 8 Bit schicken
|
12 | while (!(SPSR & (1<<SPIF))) {}; //warten bis Daten versendet
|
13 | SPDR=Data2; //2. Byte schicken
|
14 | while (!(SPSR & (1<<SPIF))) {}; //warten bis Daten versendet
|
15 | PORTB |=(1<<PB4); //DA Wandler Empfang ausschalten
|
16 | }
|
Simuliert habe ich das ganze im AVR Studio auch schon, dort liegen die
passenden Signale am PINB Register an und nicht am PORTB Register.
Habe ich jetzt irgendwo einen Denkfehler ?!
Danke im voraus
Grüße
Rob