LTC1257 Ansteuern D/A Wandler ?

#5747651
Lesenswert?

Guten Abend,

Ich versuche für den Anfang mit unten aufgeführten Code ein D/A Wandler 
(LTC1257 12 bit) anzusteuern (0-10V ausgeben), allerdings funktioniert 
das nicht zu 100% so richtig.


ich habe
1
uint16_t data = 0x0fff;
 als variable mit der ich bis zu 12bit an den Wandler senden will.


Jetzt ist es so, wenn ich 0x0fff sende gibt er mir 10V aus und bei 
0x0000 natürlich 0V, will ich aber jetzt irgendeinen belibigen Wert 
dazwischen annehmen zb. die Hälfte von (12bit 4095) 0x0800 fällt er mir 
nicht wie gewüscht auf 5V sondern auf 0V

Was kann ich denn da machen das er es richtig ausgibt ?

1
/*
2
 * LTC1257_2.c
3
 *
4
 * Created: 23.02.2019 17:06:43
5
 * Author : USER
6
 */ 
7

8
/* soft_serial_01.c ATmega88 @ 16MHz */
9

10
#define F_CPU 16000000UL
11
#include <avr/io.h>
12

13
void soft_serial (uint16_t data)         // Funktion soft_serial
14
{
15
  for (uint8_t i=0; i<=11; i++)     // for-Schleife 8 mal ausführen
16
  {
17
    if (data & 1)                   // Wenn data an Stelle 0 = 1
18
    PORTD |= (1<<PD0);            // Data serial = 1
19
    else
20
    PORTD &= ~(1<<PD0);           // Data serial = 0
21
    
22
    PORTD |= (1<<PD1);                // PD1 = 1 (CLK = low)
23
    PORTD &= ~(1<<PD1);               // PD1 = 0 (CLK = high)
24
    
25
    data = data >> 1;             // data um 1 Stelle nach rechts schieben
26
  }
27
}
28

29
int main(void)
30
{
31
  uint16_t data = 0x0800;              // data = Variable für Register 0x0FF1
32
  DDRD = 0xFF;                        // Richtungsregister PORTD = Ausgang
33
  PORTD = 0x04;                       // PD2 (RCK) = HIGH, 0x04 = 0000 0100
34
  
35
  while(1)
36
  {
37
    soft_serial(data);              // Funktionsaufruf und Übergabe von data
38
    PORTD &= ~(1<<PD2);               // PD2 = 0 (Takt = LOW für RCK)
39
    PORTD |= (1<<PD2);                // PD2 = 1 (Takt = HIGH für RCK -> Ausgabe Schieberegister)
40
  }
41
}

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