Steuerwort des DA-Wandlers (LTC1456)

OP #2928038
Lesenswert?
• ▲
▼
Hi,

ihr Mitboardler, ich habe momentan das Problem das ich den oben 
genannten DA Wandler nicht korrekt ansteuern kann. Hintergrund, ich 
möchte mittels des ATmega32 den LTC1456 ansteuern. Dieser befindet sich 
an PortC(PC0 - Din / PC1 - CS/LD / PC2 - Clock)
http://www.datasheetcatalog.org/datasheet/lineartechnology/1456fs.pdf

Nachdem der DAC das Wort entgegen genommen hat, gibt er dies auf einen 
PWM-Modulator(TL494) aus. Dieser funktioniert definitiv, da man hier die 
analoge Messspannung(KTY81/210 PTC) ebenfalls drüber wandeln kann. 
Jedoch möchte ich es so nutzen, das man Profile "bestimmen" kann. So 
soll er z.B. bei 50°C sich mit 50% Leistung drehen, dies entspricht z.B. 
der Spannung 2000mV. Dies würde dem Bitmuster 0111 1101 0000 
entsprechen. Jedoch habe wenn ich das Profil auswähle und der dort 
eigentlich 2V ausgeben soll ca. 3,3V ausgibt.

Ich weiß einfach nicht mehr weiter, und bitte euch daher um Hilfe.

Die binären Leistungswerte gebe ich in einem Array an, die dann mittels 
einer IF Abfrage, abfrage und dann ausgebe.
1
  char  leistung40[]   =   {0,1,1,1,1,1,0,1,0,0,0,0};      
2
  char  leistung60[]   =   {1,0,0,1,1,1,0,0,0,1,0,0};
3
  char  leistung80[]   =   {1,0,1,1,1,0,1,1,1,0,0,0};
4
  char  leistung100[]  =   {1,1,1,0,0,0,0,1,0,0,0,0};
5
  /**
6
  40%    2000    0111  1101  0000  
7
  60%    2500    1001  1100  0100
8
  80%    3000    1011  1011  1000
9
  100%   3600    1110  0001  0000
10
  **/

Das ist die Funktion die das erste "Steuerwortteil" ausgeben soll
1
//---------------------------------------------------------------
2
//- Start des Steuerwortes --------------------------------------
3
//---------------------------------------------------------------
4
PORTC |= (1<<PC2);  // Clock
5
_delay_us(wait);    // Ti #1.1
6
PORTC |= (1<<PC1);  // Load
7
_delay_us(3);       // Ti #1.2
8
PORTC |= (0<<PC2);  // !Clock
9
_delay_us(6);       // Tp
10
PORTC |= (0<<PC1);  // Chip Select

Danach wird die jeweilige Lüfterfunktion aufgerufen z.B. 40% Leistung
1
void luefter40(void)
2
{
3
  for(int i = 0; i<=11; i++)    // Zählerschleife
4
  {
5
    if (leistung40[i] == 1)
6
    {
7
      PORTC |= (1<<PC0);        // Port setzen
8
    }
9
    else
10
    {
11
      PORTC |= (0<<PC0);        // Port setzen
12
    }
13
    _delay_us(3);               // Tp
14
    PORTC = (1<<PC2);           // Takt, Daten "einlesen"
15
    _delay_us(3);               // Ti #2.1
16
    if(i == 11)
17
    {
18
      PORTC |= (1<<PC1);        // Load
19
    }
20
    _delay_us(3);               // Ti #2.2
21
    PORTC = (0<<PC2);           // !Takt
22
    _delay_us(3);               // Tp
23
  }  
24
}

Die ganze Ablauf sieht dann so aus.
1
//---------------------------------------------------------------
2
      //- Start des Steuerwortes --------------------------------------
3
      //---------------------------------------------------------------
4
      PORTC |= (1<<PC2);                // Clock
5
      _delay_us(wait);                // Ti #1.1
6
      PORTC |= (1<<PC1);                // Load
7
      _delay_us(3);                  // Ti #1.2
8
      PORTC |= (0<<PC2);                // !Clock
9
      _delay_us(6);                  // Tp
10
      PORTC |= (0<<PC1);                // Chip Select
11
      
12
      uart_string("\33[6;21H");            // Cursor Movement
13
      switch(p_abfrage)
14
      {
15
      //-----------------------------------------------------
16
        case 49:                  // Profil 1
17
          if(ADC <= 99)              // LED Blau
18
          {
19
            uart_string(" 40 %");
20
            luefter40();            // Lüfterprofil
21
          }
22
          else if(ADC>= 100 & ADC<=299)
23
          {
24
            uart_string(" 40 %");
25
            luefter40();
26
          }
27
          else//(ADC>=300)
28
          {
29
            uart_string(" 60 %");
30
            luefter60();
31
          }
32
          break;


Solltet ihr weitere Fragen oder weiteren Code benötigten schreibt es 
einfach.

Mit freundlichen Grüßen
M.T.

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.