Hey
ich habe mal wieder ein Problem mit SPI bzw. einem Baustein daran.
Es handelt sich um einen Atmega16 und dem DAC LTC2602.
das SPI läuft auch mit einem ebenfalls daran angeschlossenen ADC.
Doch eben nicht mit dem DAC.
warum gibt mir der DAC keine Spannung aus?
hier der Code dazu:
1 | #define DAC0 0
|
2 | #define DAC1 1
|
3 | void set_CS_DAC(void) { PORTB = PORTB & 0b11111011; }
|
4 | void cls_CS_DAC(void) { PORTB = PORTB | 0b00000100; }
|
5 | void DAC_set(int DAC_CH, int dac_datah, int dac_datal)
|
6 | {
|
7 | switch(DAC_CH)
|
8 | {
|
9 | case DAC0:
|
10 | {
|
11 | SPDR= 0x30; //Daten für Command und Channel anlegen
|
12 | break;
|
13 | }
|
14 | case DAC1:
|
15 | {
|
16 | SPDR = 0x31;
|
17 | break;
|
18 | }
|
19 | }
|
20 | set_CS_DAC(); //CS low
|
21 | while(!(SPSR & (1<<SPIF))); //Commands übertragen
|
22 |
|
23 | SPDR = dac_datah; //DATA_High übertragen
|
24 | while(!(SPSR & (1<<SPIF)));
|
25 |
|
26 | SPDR = dac_datal; //DATA_Low übertragen
|
27 | while(!(SPSR & (1<<SPIF)));
|
28 | cls_CS_DAC();
|
29 | _delay_us(10);
|
30 | }
|
der Aufruf dafür erfolgt per
1 | DAC_set(DAC0,125,25); //125 sind die oberen 8Bit und 25 die untern 8Bit
|
im switch case übergebe ich die Parameter für den Channel sowie die
Commands
als command nutze ich
C3 C2 C1 C0
0 0 1 1 Write to and Update (Power Up) n \\wobei n der Channel ist -
dies ist die 3 und danach der Channel des Bausteins [ 0 oder 1]
sieht jemand den Fehler in meinem Code, weshalb es nicht klappt
ich konnte per Logicanalyzer auch schon herausfinden, dass CS klappt und
der SCK taktet, allerdings gibt der DAC eben keine spannung aus.