LTC1257 Ansteuern D/A Wandler ?

OP #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
}
OP #5747720
Lesenswert?
• ▲
▼
Ich muss jetzt einfach Fragen, wie löse ich das Timing Problem jetzt am 
einfachsten, mit einem delay?

ist das so gemeint
1
PORTD |= (1<<PD1);                // PD1 = 1 (CLK = low)
2
_delay_ms(15); 
3
PORTD &= ~(1<<PD1);               // PD1 = 0 (CLK = high)



denn, wenn ich das so mache ändert sich auch nichts

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.