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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.