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
ein kleine Korrektur: Das Autoradio hat NUR EINEN AUX Eingang für Audio, also iPod und CD-Wechsler müssen entsprechend umgeschaltet werden
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.
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.