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.
|