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
>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?
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
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
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.
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.