Hallo zusammen,
ich bin gerade dabei mit einem Mega8 den MAX5354 (DA-Wandler) über SPI
(habe noch keine Erfahrungen mit dem Bus) anzusteuern. Doch das
funktioniert nicht so wie es sollte.
Hier erstmal der Code:
1 | #include <stdlib.h>
|
2 | #include <avr/io.h>
|
3 |
|
4 | #define MOSI PB3
|
5 | #define SCK PB5
|
6 | #define MISO PB4
|
7 | #define SS PB2
|
8 |
|
9 | void SPI_Master_TransmitInit(void)
|
10 | {
|
11 | /* Set MOSI, SS and SCK output, all others input */
|
12 | DDRB |= (1<<MOSI) | (1<<SCK) | (1<<SS);
|
13 | DDRB &= ~(1<<MISO);
|
14 | PORTB |= (1<<SS);
|
15 | /* Enable SPI, Master, f = FCPU/16 */
|
16 | SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
|
17 | }
|
18 |
|
19 | void SPI_MasterTransmit(unsigned long daten, unsigned long daten1)
|
20 | {
|
21 | PORTB &= ~(1<<SS);
|
22 | SPDR = daten;
|
23 | while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet
|
24 | SPDR = daten1;
|
25 | while(!(SPSR & (1<<SPIF))); // warte bis Byte gesendet
|
26 | PORTB |=(1<<SS);
|
27 | }
|
28 |
|
29 | int main (void)
|
30 | {
|
31 | SPI_Master_TransmitInit();
|
32 | SPI_MasterTransmit(00010000, 00001000);
|
33 |
|
34 | return 0;
|
35 | }
|
Der binär Code von SPI_Transmit sollte (wenn ich das laut Datenblatt
richtig verstehe) heißen, dass am Ausgang 1/2*Vref anliegen sollten, bei
5V wären das dann 2.5V. Doch es liegen immer (egal was für einen Wert
ich da übergebe) ca. 1.0-1.2 V an.
Woran liegt das?
Hardwaremäßig sollte alles passen.
Ich wäre für Hilfen sehr dankbar.
Gruß Stefan