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