Forum: Mikrocontroller und Digitale Elektronik HDQ Bus am AVR ?


von Stefan (Gast)


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

von Rahul, der Trollige (Gast)


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.

von Stefan (Gast)


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

von Rahul, der Trollige (Gast)


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.

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