Forum: Mikrocontroller und Digitale Elektronik Steuerwort des DA-Wandlers (LTC1456)


von Maurice T. (gebbert)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.