Hallo Community, ich habe nach dem Wechsel von einem ATMega16 auf einen ATMega32 ein UART-Problem (Lib von Peter Fleury), daß sich wie folgt äußert: Datenempfang auch ohne angeschlossene Gegenseite (Datenmüll incl. Buffer overflows) kein gezielter Datenempfang möglich (naja, manchmal schon). kein Senden möglich. Hardware (funktionierte mit dem mega16): max232n mit AbblockC(schon ausgetauscht) ATMega32, RXT testweise nun mit externem Pullup (100k) Die Codesegmente sind im Anhang zu finden. Hat von euch einer eine Idee, woran mein Problem liegen könnte? Besten Dank schonmal, Gruß Christoph
Bevor du eine Softwareanalyse machst - Hast du schon den UART-RX-Pin mit dem Oszi beobachtet, ob dort physikalisch ein Signal bzw. Störung reinkommt (d.h. Hardwareproblem)?
Danke ihr beiden, habe leider kein Oszi zur Hand. Wenn ich T1OUT vom Max auf Masse kurzschließe, verschwinden die Fehler (Aber neben den Fehlern verschwindet leider auch die Funktion; mit Kommunikation ist dann nix mehr). Vorher war ein 16MHz Quarzoszi drin, damit gab es den gleichen Mist. Bin auf das Baudratenquarz gegangen, weil ich dies als Fehlerquelle ausschließen wollte.
Wenn der Eingang offen ist, dann kann da alles Mögliche passieren, weil Du offensichtlich keinen Pull-Up aktiviert hast.
Also ein
1 | PORTD |=(1<<PD0) ; |
(keine Verbesserung) hinter die UART-Initialisierung? Habe testweise zZ einen 100kOhm Pull-Up zw. RxT und +5V. Mache ich da vielleicht was falsch?
Am Max liegt alles richtig an, soweit ich das überprüfen kann. Habe noch alles nicht an der Buchse benötigtes abgeklemmt (Hatte irgendwie noch die Steuerleitungen an V+ des max232 gelegt; keine Ahnung warum...ist schon was her). Nun ist das Verhalten ein anderes: bei Anschluss an PC sendet der atmel mir unentwegt '\0'.
1 | uart_putc((unsigned char) c); |
(senden ist schon richtig; aber scheinbar bekommt er von irgendwoher genau die '\0') Wenn ich das Kabel entferne, bekomme ich buffer overflows. Senden (PC->atmel) kann ich immer noch nicht.
> Wenn ich T1OUT vom Max auf Masse kurzschließe, verschwinden die Fehler > ... > Am Max liegt alles richtig an, soweit ich das überprüfen kann. Spätestens jetzt wäre das Bekanntgeben des Schaltplans und eines aussägefähigen Fotos des konkreten Aufbaus notzlich. Hat der MAX232n Vcc und GND und korrekt angeschlossene Ladekondensatoren? Wie kommt das Signal PC seitig in den MAX232n - RX, TX und GND vorhanden?
Hier der Schaltplan und die Bilder. Die rot gekreuzten Leitungen sind eben von mir 'per Hand' gekappt worden. (sowohl im Schaltplan, als auch auf den Fotos markiert). Die Platine ist zweiseitig beschaltet. Man kann auf der Vorderseite nicht alle Leitungen sehen. Habe aber nochmal entsprechend dem UART-Tutorial hier alles überprüft und für richtig befunden. Die Ladekondensatoren sind entsprechend dem Datenblatt des Max 1µ. Allerdings keine Elkos. Die Schaltung hat so mit einem ATMega16 schon korrekt funktioniert; weiß leider nichtmehr, ob auch mit der aktuellen Programmierung. Seid nachsichtig mit mir ;-) Es ist meine erste ausführliche Lötarbeit und meine erste selbst erstellte Platine.
vorderseite (gibt es eigentlich eine Möglichkeit, mehrere Anhänge an einen Beitrag anzuhängen?)
Rückseite Danke für die Hilfe edit: Achja, ich vergaß zu sagen: RxD und TxD sind im Schaltplan gekreuzt. Da ich habe ein normales Kabel (kein Nullmodemkabel) verwende, habe ich sie entsprechend im Kabel zurück gekreuzt. (War ein Fehler im Layout meinerseits, der im Kabel leichter zu beheben war).
1/ Die korrekte Beschaltung mit einem 1:1 Kabel (kein Nullmodemkabel) zwischen PC und µC ist diese Verbindung: AVR MAX DB-9 Buchse F | 1:1-Kabel | DB-9 Buchse M PC | M F | ======================================================================== = TXD T1IN/T1OUT Pin2 Pin2 RXD RXD R1OUT/R1IN Pin3 Pin3 TXD GND Pin5 Pin5 GND Wenn du auf der Platine an der DB-9 Buchse F fir Belegung von Pin2 und Pin3 getauscht hast, kannst du nicht mit einem 1:1 Kabel arbeiten. Du müsstest in diesem Fall das 1:1 Kabel an einer Seite öffnen und die Verbindungen an Pin2 und Pin3 tauschen. 2/ Ich sehe in deinem Schaltplan (und den zu kleinen Fotos) keine Kondensatoren zwischen Vcc und GND bei den ICs (Atmega und MAX232). 3/ > Datenempfang auch ohne angeschlossene Gegenseite (Datenmüll incl. > Buffer overflows) > kein gezielter Datenempfang möglich (naja, manchmal schon). > kein Senden möglich. Was meinst du mit "Gegenseite" bzw. wo entdeckst du die Übertragungsfehler? Hast du schon mal den Atmega32 entfernt und eine Brücke zwischen Pin14 und Pin15 an der Fassung IC2 angebracht und dann vom PC aus probiert, was zu senden? Wenn die Verkabelung und der Anschluss des MAX232 i.O. ist, solltest du so ein Echo bekommen.
Hallo Stefan, erstmal danke für deine ausführliche Antwort. Stefan "stefb" B. wrote: > Wenn du auf der Platine an der DB-9 Buchse F fir Belegung von Pin2 und > Pin3 getauscht hast, kannst du nicht mit einem 1:1 Kabel arbeiten. > > Du müsstest in diesem Fall das 1:1 Kabel an einer Seite öffnen und die > Verbindungen an Pin2 und Pin3 tauschen. Ist genau so, wie du schreibst; An der Buchse Pin2 und Pin3 vertauscht, dafür in dem 1:1 Kabel auch an einer Seite Pin2 und Pin3 getauscht. > 2/ Ich sehe in deinem Schaltplan (und den zu kleinen Fotos) keine > Kondensatoren zwischen Vcc und GND bei den ICs (Atmega und MAX232). Die Abblockkondensatoren habe ich tatsächlich im Schaltplan vergessen (Wie gesagt, war mein erster), dafür sind sie nachträglich auf der Rückseite der Schaltung zu finden. > 3/ >> Datenempfang auch ohne angeschlossene Gegenseite (Datenmüll incl. >> Buffer overflows) >> kein gezielter Datenempfang möglich (naja, manchmal schon). >> kein Senden möglich. > > Was meinst du mit "Gegenseite" bzw. wo entdeckst du die > Übertragungsfehler? > Hast du schon mal den Atmega32 entfernt und eine Brücke zwischen Pin14 > und Pin15 an der Fassung IC2 angebracht und dann vom PC aus probiert, > was zu senden? Wenn die Verkabelung und der Anschluss des MAX232 i.O. > ist, solltest du so ein Echo bekommen. Ich habe an der Schaltung ein LCD-Display (das irgendwie auch fehlerfrei funktioniert. Hierüber lasse ich darstellen, was der UART empfängt. Aktueller Stand ist: Kein ser. Kabel an der Schaltung -> datenmüll am µC Kabel an der Schaltung (und anderes Ende am PC/Hyperterminal) -> nix am µC nix im Hyperterminal; Wenn ich was zum µC sende, kommen (manchmal!) '\0' in unterschiedlicher Anzahl zurück Werde jetzt mal den atmel aus der Fassung nehmen und das Ganze mal mit der von dir vorgeschlagenen Methode testen. Gebe dann sofort wieder Rückmeldung.
Problem gelöst: Habe auf Stefans Anraten hin mal vom PC angefangen die Leitung gecheckt... erster Fehler: der USb-RS232-Konverter war falsch eingestellt. (da sich das Problem nicht besserte über die native rs232 habe ich hier bei der Problembeschreibung den Konverter außen vor gelassen). zweiter Fehler: Max232 kaputt (beide getesteten, echt doof) letzt läuft es (fast) perfekt. Ab und zu werden befehle vom µC nicht verarbeitet, aber da es sich bei der UART nur um einen Testaufbau im System handelt (Prototypen-Datalogging), kann ich hier mit einem geeigneten Protokoll Abhilfe schaffen. Vielen Dank nochmal allen, die sich des Problems angekommen haben. Beste Grüße & ein schönes Wochenende, Christoph
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.