Interruptbasierende Taktsignal und Timingsteuerung

OP #1498012
Hallo,

ich möchte eine interruptbasierende Kommunikation mit dem SHT75 
Temperatur / Feuchtigkeitssensor auf einem ATMega32 (16 Mhz) entwickeln. 
Es werden pro Sensor neben der Spannungsversorgung ein Takt (der 
beliebig klein werden kann) und das Datensignal benötigt, dass zum 
Senden von Befehlen und zum Empfangen von Messwerten dient.

Dabei steht im Datenblatt, dass bestimmte Timings wie die Setupzeit 
(also wie lange im Voraus zum Takt das Datenpegel anliegen muss) und 
weitere Zeiten eingehalten müssen. Ich dachte mir daher, den Timer 32 so 
schnell auslösen zu lassen wie die benötigte Taktfrequenz der 
Clockleitung. Jedesmal lasse ich dann einen Interrupt auslösen. So kann 
ich dann 1/32 Tclk vor der nächsten Flanke schon das Datensignal 
hochziehen bzw. Pins auf Ausgang oder Eingang sezten usw.

Nur leider weiß ich nicht in wie weit das überhaupt realisiert werden 
kann. Zuerst wollte ich den Sensor mit 50 kHz takten. Ich denke, dass 
ist dann zu schnell, da dann der Timer mit 50kHz*32 = 1,6 Mhz takten 
müsste und so nur 10 Takte zum Durcharbeiten der ISR Zeit blieb. :) 
Daher möchte ich mit den Takt für den Sensor auf unter 10 kHz 
runtergehen.

Frage: Wer hat so etwas schon mal realisiert?
Wie geht man ohne großartig Timer zu verschenken und ohne dauernd 
irgendwelche Register zu pollen überhaupt an ein solches Thema ran?

Gruß

Bernhard N.
#1498049
@  Bernhard N. (bernieserver)


>weitere Zeiten eingehalten müssen. Ich dachte mir daher, den Timer 32 so
>schnell auslösen zu lassen wie die benötigte Taktfrequenz der
>Clockleitung. Jedesmal lasse ich dann einen Interrupt auslösen. So kann
>ich dann 1/32 Tclk vor der nächsten Flanke schon das Datensignal
>hochziehen bzw. Pins auf Ausgang oder Eingang sezten usw.

Kann man machen, erscheint aber nicht sinnvoll, weil dein uC in der 
Zwischenzeit wenig sinnvolles machen kann. Mach es einfach per Polling 
und mit "normalen" Warteschleifen, das ist hier voll OK.

MFG
Falk
#1498056
Bernhard N. schrieb:
> Dabei steht im Datenblatt, dass bestimmte Timings wie die Setupzeit
> (also wie lange im Voraus zum Takt das Datenpegel anliegen muss) und
> weitere Zeiten eingehalten müssen.

Das sind doch nur wenige 100ns.
Das ganze Getöse mit Interrupt eintreten und verlassen dauert erheblich 
länger.
Mach alles direkt hintereinander und 1-2 NOP zwischen den einzelnen 
Aktionen reicht dicke.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.