Werte vom TSIC306 mittels UART-Polling ausgeben

Gast #1830580
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
Gast #1831096
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.

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.