Hallo an die Forumsgemeinde. Ich will die Steuerung eines Hubtischsystems über ein AVR NET IO mit dem ATMega32 automatisieren. Die Steuerung des Hubtischsystems kommuniziert hier über RECS80 mit einem Handbedienteil, über das man den Tisch hoch und runter fahren kann. Ich will hierbei mit meinem MCB das Handbedienteil ersetzen. Ich bin schon soweit, dass ich über das MCB durch IRSND das Hubmodul hoch und herunterfahren kann. Außerdem kann ich über einen weiteren Pin und IRMP das Höhensignal auslesen, welches auch im RECS80 Format von der Steuerung ausgegeben wird. Ich sende also für den Befehl Hochfahren sowie Herunterfahren ein bestimmtes Muster und lese dann die vom Steuergerät auf einer weiteren Leitung ausgegebene Höhe über einen weiteren Pin am MCB ein. Nun zu meiner Frage: Ist es möglich, IRSND und IRMP gleichzeitig laufen zu lassen? Für mein Vorhaben wäre es nötig, immer die aktuelle Höhe einlesen zu können, aktuell geht das aber nur, wenn IRSND keinen Befehl sendet. Im IRSND Forumseintrag wird nur gezeigt, wie man zwar beide parallel, aber zeitversetzt verwenden kann. Ich möchte also zur selben Zeit einen Befehl senden können über IRSND an OC0 und über IRMP an PC2 einen Datenstrom einlesen. Erst Senden und dann Einlesen geht hier leider nicht, da das Stg nur dann einen Höhenwert als Datenstrom zurücksendet wenn er sich verändert. Das zwingt mich also dazu, die Höhe dann auslesen zu müssen, wenn IRSND noch am senden ist und der Höhenwert sich deshalb verändert. mfg Marius
Siehe dazu das Kapitel "Paralleles Betreiben von IRMP und IRSND": https://www.mikrocontroller.net/articles/IRSND#Paralleles_Betreiben_von_IRMP_und_IRSND Wenn Du - wie im Artikel angegeben - folgende ISR benutzt:
1 | ISR(TIMER1_COMPA_vect) |
2 | {
|
3 | if (! irsnd_ISR()) // call irsnd ISR |
4 | { // if not busy... |
5 | irmp_ISR(); // call irmp ISR |
6 | }
|
7 | }
|
... dann hält sich IRMP zurück, solange IRSND sendet, d.h. es kann nichts empfangen werden. Wenn Du jedoch schreibst:
1 | ISR(TIMER1_COMPA_vect) |
2 | {
|
3 | irsnd_ISR(); // call irsnd ISR |
4 | irmp_ISR(); // call irmp ISR |
5 | }
|
... kann gleichzeitig empfangen und gesendet werden. Allerdings solltest Du dann Sender und Empfänger voneinander optisch isolieren, sonst fängst Du Dir beim Empfänger das wieder ein, was Du gerade sendest.
Ich glaube, man kann generell nicht mehrere IR-Sendungen gleichzeitig übertragen, die sich mit ähnlicher Trägerfrequenz überlagern. Dafür ist diese Technik nicht gemacht.
batman schrieb: > Ich glaube, man kann generell nicht mehrere IR-Sendungen gleichzeitig > übertragen, die sich mit ähnlicher Trägerfrequenz überlagern. Solange das optisch isoliert wird - und davon gehe ich aus - sollte das gleichzeitige Senden und Empfangen an/von einem anderen Controller durchaus gehen.
Joa, kann ich mir nur schwer vorstellen, wie das umzusetzen wäre. Klar, man könnte die FB per Glasfaser mit dem Empfänger verkabeln. :)
Danke für die schnelle Rückmeldung. Die Übertragung der Signale erfolgt nicht optisch, sondern über Kabel, da sollten Überlagerungen jeglicher Art also keine Rolle spielen. Meine ISR sieht seit ca. einer Woche so aus wie du es geschrieben hast, ich dachte mir auch dass der Parallelaufruf so funktionieren müsste. Aber wenn der Fehler nicht hier liegt, liegt er wohl woanders in meinem Programm. Kann mir vorstellen, dass ich das eingelesene Signal falsch verarbeite und deshalb verschiedene Bedingungen in meinem Programm nicht dann eintreten wenn Sie das sollen. Ich mach mich mal weiter auf die Suche und berichte dann. mfg Marius
Marius M. schrieb: > Meine ISR sieht seit ca. einer Woche so aus wie du es geschrieben hast, > ich dachte mir auch dass der Parallelaufruf so funktionieren müsste. Ich weiß auch von anderen Leuten, die das schon getestet haben, dass der Parallelbetrieb tatsächlich funktioniert. Was natürlich sein kann, dass die ISR nun insgesamt ziemlich viel Zeit verbrät. Daher wäre noch die Angabe des verwendeten µCs nebst Takt noch sinnvoll. Warum benutzt Du nicht einfach eine UART-Verbindung, wenn Du Kabel nimmst?
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.