www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interruptbasierende Taktsignal und Timingsteuerung


Autor: Bernhard N. (bernieserver)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.