PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit TLC549



enoritz
15.07.2006, 19:56
Hallo,

ich habe momentan folgendes Problem:
Ich habe an P1H die Leitungen für die serielle Datenübertragung zwischen C-Control und TLC549 angeschlossen. Die Übertragung der Werte des A/D-Wandlers scheint soweit auch schonmal zu klappen: Ich stelle am 549 über ein Poti Werte zwischen 0 und 5V ein und bekomme sie über HWCOM am PC im Hyperterminal angezeigt.
Allerdings gehen die Messwerte in regelmäßigen Abständen (ca. alle 5 Sekunden) auf 0V zurück, ohne das ich am Spannungswert etwas verändert hab. Nach ein par weiteren Sekunden erhöht sich der Wert dann wieder auf die vorher eingestellte Spannung.

Hätte vlt. jemand eine Idee, wie dieses Verhalten zu erklären sein könnte?
Ich hab nämlich keine...

Falls es hilft hab ich hier mal meinen Quelltext:

Modul TLC549 zum Initialisieren und Auslesen des A/D-Wandlers.


const CLK = 13; //P1H.5 - Busy
const DATA = 14; //P1H.6 - Acknowledge
const CS = 15; //P1H.7 - Strobe

function init()
{
ports.deact(DATA);
ports.get(DATA); //Von DATA/P1H.6 wird gelesen

ports.deact(CS);
ports.set(CS,0b1); //CS/P1H.7 wird gesetzt

ports.deact(CLK);
ports.set(CLK,0b0); //CLK/P1H.5 wird gepulst
}

function read() returns int
{
int cnt, val;
cnt = 0; val=0;
ports.set(CLK,0b0);
ports.set(CS,0b0); //CS auf 0 setzten und übertragung initialisieren
val = -ports.get(DATA); //MSB auslesen
for cnt = 1...7 //die restlichen 7 Bit abfragen
{
ports.pulse(CLK); //einen Takt geben
val = (val shl 1) - ports.get(DATA); //nächtes Bit
}
ports.toggle(CLK); //Clock auf high setzten
ports.set(CS,0b1); //ChipSelect zurück auf High-Pegel ziehen
ports.toggle(CLK); //dem TLC549 Bescheit geben, für die nächste Wandlung
return val; //Wert zurückgeben
}

function delay_17ms()
{
sleep 17;
}

Und das Hauptmodul:

thread main{
string str_val;
hwcom.init(); //rs232 initialisieren
hwcom.setspeed(hwcom.SPEED_9600); //Baudrate setzen
tlc549.init(); //P1H für die Datenübertragung einstellen
loop{
str_val = ""; //String zurücksetzen
str.putfloatf(str_val,0.0196 * (tlc549.read() and 0b11111111),3);
//Wert umrechnen: 0-5V
hwcom.print("Value:");
hwcom.print(str_val); hwcom.put(13); //Wert über rs232 ausgeben
tlc549.delay_17ms(); //17ms warten und von vorn anfangen
}
}

Wäre über jeglichen Vorschlag erfreut :) :)