mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HDQ Bus am AVR ?


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte einen IC von TI mit einem AVR ansprechen. Bei HDQ handelt es 
sich um einen vereinfachten 1wire Bus: Die Datenleitung wird über einen 
Pullup Widerstand auf Vcc gezogen und jeweils vom Host und Client über 
einen NPN Transistor auf GND gezogen. Eine logische 1 wird übertragen, 
indem die Leitung für 50 µS auf low gezogen wird, eine logische 0 indem 
die Leitung für 150 µS auf low gezogen wird. Danach wird gewartet, bis 
seit Bitanfang 200 µS vergangen sind. Wenn man so will eigentlich eine 
Pulsbreitenmodulation. Die angegebenen Werte sind nur qualitativ, aber 
in dieser Größenordnung. Nun suche ich nach Ansätzen, wie man ein 
solches Signal mit einem AVR senden und empfangen könnte.

Zum Empfangen habe ich die Idee den ICP (Interrupt Capture) zu 
verwenden: Bei fallender Flanke wird der Zählerstand gesichert, bei 
steigender Flanke wird der Zählerwert vom gesicherten Wert abgezogen und 
ausgewertet. Ist das Ergebnis < 100 µS wird ein high bit, andernfalls 
ein low bit registriert. Ist das so praktikabel oder gibt's da was von 
Ratiofarm ?

Zum Senden ist mir nichts schönes eingefallen. Vielleicht einen PWM 
Generator mit einer Periodendauer von 200 µS laufen lassen und im OCR 
Interrupt immer den Wert des auszugebenden Bits entsprechend setzten ?

Was habt Ihr dazu so für Ideen ?

Schöne Grüße

Stefan

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Vielleicht einen PWM Generator mit einer Periodendauer von 200 µS laufen >lassen 
und im OCR Interrupt immer den Wert des auszugebenden Bits >entsprechend setzten ?

Ja, warum denn nicht? Besser wäre es, den Wert im Overflow-Interrupt zu 
setzen. Das wird je nach PWM-Modus beim TOP angesprungen.
Es gibt auch PWM-Modi, die das OC-Register puffern...

>Zum Empfangen habe ich die Idee den ICP (Interrupt Capture) zu
>verwenden:

Spricht auch nichts dagegen.
Höchstens, dass bei ICR als TOP-Register bei bestimmten PWM-Modi benutzt 
wird.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort!

>Ja, warum denn nicht? Besser wäre es, den Wert im Overflow-Interrupt zu

Hm, bekomme ich dann nicht Probleme beim letzten Bit ? Ich muss ja den 
PWM Ausgang deaktivieren, wenn die Flanke zum letzten mal fällt, und die 
fallende Flanke liegt ja auf dem OC-Match Interrupt.

Gut, aber wenn das ganze so prinzipiell praktikabel ist, werde ich 
einfach mal das STK500 anwerfen und austesten. Hatte nur "befürchtet" 
dass es eine wesentlich einfachere Lösung gibt. Der ein oder andere 
kennt das bestimmt: Man denkt stundenlang an einer Lösung herum, und 
schließlich findet man per Google etwas, das halb so groß und doppelt so 
schnell ist ;-)

Ok, weitermachen,

Gruß
Stefan

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>schließlich findet man per Google etwas, das halb so groß und doppelt so
>schnell ist ;-)

Wenn du der Meinung bist, dass es bei deinem Programm noch 
Optimierungsbedarf gibt, kannst du es ja hier zur Diskussion 
reinstellen.

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.