Forum: Mikrocontroller und Digitale Elektronik Interrupterzeugung bei Flanke auf RX pin am AVR?


von Christian (Gast)


Lesenswert?

Hallo Leute,

ich bin neu in diesem Forum und leider ziemlich unbewandert in Sachen 
AVR Software etc.

Ich hätte eine grundsätzliche Frage zum RX/TX Pin. Ich habe hier einen 
3V3 UART angeschlossen.

Im ersten Schritt möchte ich eigentlich nur auf toggelnde Zustände am RX 
pin reagieren (Frei übersetzt: Wenn Traffic an RX pin, dann tue dies - 
wenn kein Traffic (sprich Leitung konstant auf 3V3) - tue jenes).

Da der RX pin über einen Interrupt verfügt (Receive Complete Interrupt), 
könnte ich diesen ja eigentlich nutzen, aber dann muss ich auch die 
Daten aus dem Receive-Buffer abholen und diesen flushen, richtig?

Einfach nur auf einen Flankenwechsel an diesem Pin reagieren geht nicht 
mit diesem Interrupt, oder?

ich hoffe ich stelle eine allzu blöden Fragen. Übrigens ein gutes Forum 
hier!
Die Suche spuckt leider meist "Anschliessen auf Interrupt pin" oder 
generelle UART Problemlösungen aus....

Gruss,

Christian

von STK500-Besitzer (Gast)


Lesenswert?

>Wenn Traffic an RX pin, dann tue dies -
>wenn kein Traffic (sprich Leitung konstant auf 3V3) - tue jenes).

Das läuft eher auf Polling hinaus. Man fragt das entsprechende 
Interrupt-Flag  regelmäßig ab und liest dann nur das UDR in ein 
Dummybyte ein.

Es ist bei Interrupts immer so: Tue dies, aber sobald ein Interrupt 
auftritt, unterbricht deine aktuelle Tätigkeit und kümmere dich um das 
andere. Sobald du damit fertig bist, mach mit dem anderen weiter.

Die Frage ist wie immer: Was hast du vor?

von Christian (Gast)


Lesenswert?

Hallo,

dann hol ich mal weiter aus. Ich habe eine kleine Hardware gebaut, in 
der ein AVR vorauss. ATMEGA48) eine kleine Audioumschaltung für einen 
iPod und einen CD Wechsler an einem Autoradio sorgen soll.

Defaultmässig steht der Audio schalter auf CD-Wechsler, sobald ich 
meinen iPod anschliesse, soll das Autoradio diesen über dessen serielle 
schnittstelle erkennen und steuern (was auch funktioniert - also iPod 
ins Handschuhfach und gut is).
Die iPoderkennung am Autoradio funktioniert wohl per Polling der 
seriellen Schnittstelle. Sobald ein iPod an der seriellen gepollt wurde 
(also sobald dort Verkehr ist), soll der AVR die Audiorelais auf die 
iPod Quelle umschalten, denn das Autoradio hat einen LineIn für AUX und 
CD-Wechsler.

Zu diesem Zweck habe ich die serielle Schnittstelle vom iPod mit am AVR 
angeschlossen, damit dieser mithören kann (3V3 Pegelseitig, Richtung 
Autoradio ist ein RS232 Pegelwandler drin).
Die iPod Erkennung kann ich zusätzlich noch über dessen AUX3V3 Ausgang 
machen (hier speisst der iPod 3,3V@max 100mA an externe Geräte). Wenn 
der iPod jedoch tiefentladen bzw. aus ist, speisst er diese wohl nicht. 
Ausserdem möchte ich nciht umschalten, wenn ich den iPod ausschalte und 
nur auflade. Dann ist kein Traffic auf der seriellen und die Musik kann 
aus dem CD-Wechsler kommen.

Jetzt würde mir also eigentlich eine Flankenerkennung auf der  AVR RX 
Leitung (vom iPod) reichen um zu erkennen ob der iPod mit dem Autoradio 
redet oder nicht. und ich habe mir gedacht, das das auch über eine 
popelige fallende Flanke geschehen kann.

Wie seht Ihr das? Da der AVR sonst nicht viel macht, wäre polling 
eigentlich kein problem. Ich dachte bloss, das man vielleicht ähnlich 
einem FPGA irgendeine Flanke als Interruptquelle nehmen kann.
Kann man den RX pin sonst noch irgendwie als Interruptquelle 
"vergewaltigen", ausser dem RX Receive Interrupt?


Gruss,

Christian

von Christian (Gast)


Lesenswert?

ein kleine Korrektur:

 Das Autoradio hat NUR EINEN AUX Eingang für Audio, also iPod und 
CD-Wechsler müssen entsprechend umgeschaltet werden

von Ulrich P. (uprinz)


Lesenswert?

Das wird aber so einfach nicht werden. Bist Du sicher, dass 
kontinuierlich Daten auf dem RS232 gesendet werden, wenn der IPod in 
Betrieb ist? Du musst wahrscheinlich eine zeit von mehreren Sekunden 
einplanen, bis sicher ist, dass keine weitere Musik kommen wird und das 
Relais abfallen kann.
Es kommt auch auf das Radio an. Deines scheint irgendwie auch einen IPod 
fernsteuern zu können, aber auch einen CD-Wechsler. Ich kenne nur 
Radios, die das eine oder das andere können. In diesem Fall müsste das 
Gerät beim Umschalten neu gestartet werden. Anders macht auch die 
Unterbringung vom IPod im Handschuhfach keinen Sinn, da man wärend der 
Fahrt nur auf unverantwortliche Weise das Gerät bedienen könnte.
Eine saubere Lösung wäre sicherlich die Kommunikation des IPod zu 
belauschen und sinnvolle Umschaltpunkte zu erkennen. Also wenn der IPod 
irgendwas wie PLAY "Trackname" ausgibt, dann umschalten. Eventuell kennt 
er auch STOP oder POWER-OFF. Solche Kommandos sollten implementiert 
sein, da es z.B. für Becker Unilink an IPod Beispiele im Netz gibt.

Es gibt demnöchst neue ATmegas, die auf fast allen Pins auch einen INT 
haben. Über diese ließe sich eine solche Konstruktion bewerkstelligen, 
wie Du sie Dir vorstellst. Aber es spricht auch nichts dagegen, den 
RX-Pin parallel auf den INT0 Deines ATmegas48 zu schalten, also auf 
beide Pinne zu führen um einen Interrupt fürs Aufwachen zu haben und die 
Daten ggf. auch mitlesen zu können.

Aus persönlicher Erfahrung kann ich aber nur anmerken, dass man sehr 
schnell keine Verwendung für den Wechsler mehr hat, wenn man erst einmal 
einen MP3-Player nutzt. Ich schlage deswegen vor, den Wechsler zu 
eliminieren und stattdessen den IPod dem Radio als Wechsler 
vorzugaukeln. Damit kann man ihn über das Radio bedienen und kann den 
IPod ohne Komfortverlust im Handschuhfach installieren.

Überlege selbst: Lohnt es sich teure CDs im Auto leiden zu lassen, oder 
Kopien CD->CD anzufertigen. Der Aufwand für letzteres ist höher als das 
Konvertieren und Kopieren auf den IPod. Hat man seine CDs erst einmal 
digital abgelegt, warum dann noch den Wechsler?
Und ein spannendes Projekt "Wechsler Ersatz durch IPod" mit 
Mikrocontroller ist es immer noch.

Gruß, Ulrich

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Der ATMega48 hat auf dem RXD zusätzlich einen Pin Change Interrupt, 
den man nutzen könnte. Zum realen Empfang von Daten muß dieser dann 
deaktiviert werden.

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.