Forum: Mikrocontroller und Digitale Elektronik Werte vom TSIC306 mittels UART-Polling ausgeben


von Philipp Neuhaus (Gast)


Lesenswert?

Hallo,

ich bin noch nicht der Freak in Sachen Mikrocontroller, möchte aber nun 
eine Temperatur mittels TSIC306 mit einem AVR (wird wohl ein ATTiny2313 
oder ATMega8 werden) auslesen, programmieren tue ich in C und verwende 
AVR-Studio mit WinAVR.
Jedoch soll der Temperaturwert per "Polling" (vom PC) an den PC 
zurückgegeben werden (RS232, ASCII, 8N1).
Also konkret: Ich sende mit einem Terminalprogramm eine Raute '#' an den 
Mikrocontroller. Nun soll der Temperaturwert, den der Mikrocontroller in 
einer Variable gespeichert hat, an den PC übermittelt werden.
Habe hier im Forum einige Sende-/Empfangsroutinen gefunden und mir die 
beste "für mich" ausgesucht.

Mir macht jetzt aber einiges Kopfschmerzen:
Die Werte vom TSIC306 werden per "Manchester Duty Cycle" an den 
Mikrocontroller gesendet. Nun habe ich gelesen, dass man nicht mit einer 
festen Frequenz den TSIC306 auslesen sollte, da bei steigender 
Temperatur die Bits langsamer an den Mikrocontroller gesendet werden, 
bei geringer Temperatur dagegen schneller.
Werden die Bits in einem festen Zeitfenster ausgelesen, könnten bei 
hoher und niedriger Temperatur Fehler entstehen.
Das will ich vermeiden und denke darüber nach den ICP-Pin zu verwenden.
Das setzt aber dann einen Timer voraus. Ich muss ja die Mitte des 
Zeitfensters berechnen, sprich: wenn die Startbedingung 1->0..0->1 120µs 
dauert, muss die mittlere Bitzeit (Verzugszeit) auf 60µs gesetzt werden.
Bei hoher Temperatur könnte die Startbedingung 150µs dauern, d.h. die 
mittlere Bitzeit muss auf 75µs gesetzt werden.

Zum Aufbau:
Ich will den TSIC306 auf "Dauerplus" legen. Dieser Temperatursensor 
sendet dann im 10Hz-Takt den Messwert. Einlesen möchte ich diesen per 
ICP.
Zeitgleich soll ein Interrupt erfolgen, wenn eine Raute vom PC empfangen 
wird, der die Ausgabe des Temperaturwertes an den PC "erzwingt".
Werden oder können sich der UART-Interrupt und die ICP-Routine 
gegenseitig behindern?

Vielleicht kennt sich jemand mit ICP aus, wenn man damit einen 
Temperaturwert vom TSIC306 auslesen will?!

Ich möchte gerne das Programm mit euch gemeinsam erstellen und erwarte 
keine komplette Lösung.
Achja, das technische Datenblatt: 
http://www.ist-ag.ch/eh/ist-ag/resource.nsf/imgref/Download_TSic_Zacwire_EN.pdf/$FILE/TSic_Zacwire_EN.pdf

Danke,
Philipp

von Lehrmann M. (ubimbo)


Lesenswert?

Hmm also an deiner Stelle würde ich folgendes machen.

Beides über Interrupt.

Normal: TSIC306 Interrupt via Timer / Pin

Wenn UART Interrupt Ereigniss -> verifizieren (=="#" ?) -> TSIC306 
Interrupt völlig aussperren -> letzten validen (vollständig übertragene 
Temperatur vom Sensor) via UART ausgeben -> TSIC306 Interrupt(s) wieder 
zulassen.

von Philipp Neuhaus (Gast)


Lesenswert?

Sagen wir mal, dass der TSIC alle 100ms einen neuen Messwert 
präsentiert. In diesen 100ms darf dann kein Interrupt vom UART kommen, 
richtig?
Wenn nun aber alle 5ms die Raute zum UART übertragen wird, werde ich 
doch wohl keine einzige Messung vom TSIC306 bekommen?!
Oder habe ich einen Denkfehler?

Am besten wäre es, wenn beides (UART und ZACwire) parallel laufen 
würden.

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.