HDQ Bus am AVR ?

Gast #482581
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
Gast #482653
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.
Gast #482819
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
Gast #482821
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

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.