Forum: Mikrocontroller und Digitale Elektronik ATmega8 Serielle kommunikation


von Romano (Gast)


Lesenswert?

Hallo zusammen,

Ich versuche mich mittlerweile seit ca. einer Woche an der 
implementierung einer Kommunikation meines ATMega8 mit der Seriellen 
Schnittstelle meines Computers. Leider funktioniert das ganze nicht wie 
gewollt. Der PC empfängt immer nur Schrott. Bevor jetzt alle 
losschreien, ich habe mir alle Artikel und Threads zu dem Thema 
durchgelesen und alles versucht.

Erstmal zu meinem Aufbau :

Ich habe einen "Max232 CPE" und einen ATMega8L8 bei diesen sind rx,tx 
mit r1in und t1out verbunden. Als elkos am Max232 nutze ich 1mf Elkos 
(Der Aufbau entspricht dem im UART Tutorial). Am ATMega betreibe ich 
einen 4mhz Quarz, dieser ist mit xtal1 und xtal2 verbunden (davor 
befinden sich zwei 22 pF kerkos). Die Fuses habe ich mit dem AVR Studio 
auf extern christal medium mit der höchsten startup zeit gesetzt. Der 
Quarz funktioniert auch (habe ich durch auslöten aus der Schaltung 
verifiziert). Auf meiner Schaltung nutze ich einen Seriellen Stecker 
(Leitungen sind gekreuzt. Kommt ja auch was am Rechner an). Das ganze 
ist per Nullmodem mit dem rechner verbunden. Ich habe in einem Beitrag 
gelesen, dass man die Anschlüsse (des Seriellen Steckers) 4-6-8 Brücken 
muss, in einem anderen, dass 4-6 und 7-8 gebrückt werden müssen. Das 
habe ich auch beides getestet, hat aber auch keine besseren ergebnisse 
gebracht. Ich habe an der Schaltung auch einen Resetschalter angebracht 
(und nutze diesen ;-). Wenn ich die Schaltung teste gehe ich in der 
folgenden Reihenfolge vor:

1. Schaltung mit Nullmodem verbinden
2. Strom anschließen (9V Block bzw. 16V Netzteil)
3. Terminal Software starten und verbinden
4. Reset Schalter drücken

Zur Software:

Ich erstelle die Programme mit dem aktuellen AVR Studio (habe sowohl Asm 
als auch GCC probiert). Zunächst habe ich die Quelltexte aus dem 
Tutorial getestet. Als das nicht zum gewünschten Ergebnis geführt hat 
habe ich die Beispiele aus dem Datenblatt übernommen und UBBR auf 25 
(4Mhz und 9600 Baud) gesetzt (auch aus der Tabelle im Datenblatt 
übernommen). Ich habe sowohl die Variante mit einem Stopbit(Tutorial), 
als auch die mit zweien (Datenblatt) getestet.


Der Fehler:

Getestet habe ich sowohl das senden eines einzelnen Zeichens, als auch 
das wiederholte senden einzelner Zeichen. Dabei kommt es immer wieder 
vor, das auch mal ein par Zeichen korrekt empfangen werden (Beim 
Assembler Beispielprogramm, dass die Zeichenfolge "Test!" sendet ist der 
string manchmal fast komplett). Ich teste mit den Programmen HTerm und 
ttermPro.

Als ich mal gemessen habe, wie es mit der Stromversorgung aussieht viel 
mir auf, das in der gesamten Schaltung nur 4,91V - 4,92V zur Verfügung 
stehen (Stromversorgung ist wie im Tutorial aufgebaut). Am Max232 sind 
es nurnoch knapp über 3V. Diese Ergebnisse habe ich sowohl mit dem 9V 
Block, als auch mit dem 16V Netzteil.

Wäre super, wenn mir jemand einen Tip geben könnte. Ich bin schon kurz 
davor aufzugeben.

Danke schonmal im Vorraus.

P.S.: Sollte ich vergessen haben etwas wichtiges zu beschreiben bitte 
auch darauf hinweisen

von Klaus W. (mfgkw)


Lesenswert?

Die 4.9 V sind nicht kritisch, aber 3 am MAX232 ist zu wenig.
Er muß daraus ja die Spannungen für RS232 machen.

Wo bleiben denn die 2 V bis zum MAX232?

von Romano (Gast)


Lesenswert?

Das ganze ist gemessen hinter dem C4 aus der Beispielschaltung 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART). Also 
zwischen C4 und V-. Messe ich da evtl. einfach an der falschen Stelle?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Romano schrieb:
> Also zwischen C4 und V-.
Zwischen C4 und Pin V- ist eine Verbindung, da darf keine Spannung 
sein... :-o
Oder misst/meinst du die Spannung über C4 (gegen GND)?

von H.Joachim S. (crazyhorse)


Lesenswert?

du solltest messen können (alles gegen Gnd):

Pin16: 5V
Pin2: ca. 10V
Pin6: ca. -10V

Und wenn weder der PC noch der ATMega sendet:
Pin14: -10V
Pin13: -10V

von Romano (Gast)


Lesenswert?

Leider bin ich momentan bei der Arbeit ;-). Sobald ich zuhause bin werde 
ich noch mal messen. Aber ich denke, dass ich an PIN 16 auch wieder nur 
die 4,92V messen werde. Und PIN2 und PIN6 hängen ja auch am "normalen" 
Stromkreis. Wird die Spannung dort durch die Elkos erhöht(Ich kenne mich 
bisher leider noch nicht so gut mit dem Verhalten und dem Zusammenspiel 
der einzelnen Bauteile aus). Grundsätzlich gehe ich allerdings davon 
aus, dass die Spannung überall stimmt. Da die Kommunikation mit dem PC 
ja grundsätzlich klappt (es kommen Daten beim PC an). Hättet ihr noch 
eine Idee, was die Fehlerquelle sein könnte?

von H.Joachim S. (crazyhorse)


Lesenswert?

Bleiben noch die Terminaleinstellungen, neben Baudrate wäre da:
-Anzahl der Datenbits (8)
-Parität              (keine)
-Anzahl der stopbits  (1)
-Flusssteuerung       (keine)


Um die Harware zu testen, kanst du ja mal den ATMega entfernen und Rx 
und Tx brücken.
Vom Terminal gesendete Zeichen sollten dann wieder auf dem Schirm 
auftauchen.

von Romano (Gast)


Lesenswert?

@H.joachim Seifert:

Die Terminalsoftware habe ich in beiden Fällen so eingestellt. Der Tip 
mit der Brücke ist gut. Das werde ich nacher sofort testen. Danke.

von Peter R. (pnu)


Lesenswert?

Was ist eigentlich mit der Taktfrequenz ? von einem Quarz oder 
Keramikschwinger erzeugt ?

von Romano (Gast)


Lesenswert?

Die Taktfrequenz wird von einem 4Mhz Quarz erzeugt.

von Romano (Gast)


Lesenswert?

Als Einstellung im AVR Studio habe ich folgendes gewählt :

"Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 64 ms"

Ansonsten habe ich an den Fuses nichts geändert

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

Hallo Romano...

Ich hatte damals auch mal dieses komische Verhalten meines ATMEGA8 beim 
gleichen versuch wie du...
mein fehler lag damals daran, das der gemeinsame 
Bezugspotenzialausgleich gefehlt hatte durch nen leitungsfehler auf der 
platine...
Messe mal ob zwischen PC-Gehäuse und ATMEGA GND Pin auch wirklich eine 
direkte verbindung besteht, ansonsten mach das alles mal mit einem 
3,6864MHz Quartz, da is die fehlertoleranz am kleinsten...

LG
Giuse

von Romano (Gast)


Lesenswert?

Hi Giuse,

ich bin mir grad nicht sicher, wie genau ich das testen könnte. Meinst 
du ich soll das Nullmoden durchmessen? Oder soll ich an VCC auf dem Bord 
und GND am PC Ende des Kabels messen?

Den GND des Seriellen Steckers (auf meiner Platine) habe ich übrigens 
direkt an GND (Quasi sofort vom 9V Block) angeschlossen. Habe da auch 
schon eine Schlatung gesehen, wo dieser Anschluss an V- Lag. Da kam dann 
aber im Terminal garnichts mehr an.

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

>Den GND des Seriellen Steckers (auf meiner Platine) habe ich übrigens
>direkt an GND (Quasi sofort vom 9V Block) angeschlossen.

So sollts eigentlich auch sein und nicht an V- sonst fliegt dir auf 
dauer der wandler in die luft oder du zerstörst dein COM-Port...

Was ich meine ist ganz eifach...
Gehe mit einem "Leitungsprüfer" an das PC Gehäuse (Schaltung vorher 
komplett anschließen natürlich) und das andere ende vom Prüfer an den 
Minuspol der Batterie und auch an den Pin 8 & 22 vom Mega 8.
Überall sollte dann eine 0 OHM direkte verbindung sein...
und berichte dann, obs auch geklappt hat :-)

wenn nicht, liegt es dann am quarz (3,6864MHz)...
Wenn wir deine schaltung hätten, könnten wir dir eher helfen.

Mfg Giuse

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

> Ich habe einen "Max232 CPE" und einen ATMega8L8 bei diesen sind rx,tx
> mit r1in und t1out verbunden.

RX ist Empfang, da muss r1out des MAX232 an RXD des AVRs.
TX ist Senden, da muss TXD des AVRs an t1in des MAX232.

> Als elkos am Max232 nutze ich 1mf Elkos

Ich vermute, dass Du nicht 1 Millifarad meinst sondern 1 Mikrofarad. ^^
Ich verwende dazu erfolgreich SMD-Kerkos 1000 nF (1 µF).

MfG

von Romano (Gast)


Lesenswert?

Hi Giuse,

ich werde das nachher testen und dann meine Ergebnisse mitteilen. Die 
Schaltung entspricht der aus dem Tutorial, ist halt alles 
"Freiluftverkabelt". Ein Foto wird wohl nichts bringen, oder ?

@Kluchscheißender Consulter:
Da hast du natürlich recht, ist auch so verkabelt. War nur ein 
Schreibfehler. Und mit den Elkos hast du auch recht, war ich wohl etwas 
zu voreilig beim Tippen ;-)

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Mir geht's nicht um's Rechthaben, sondern um den Ausschluss von 
Fehlerquellen.

Ich bevorzuge übrigens auch baudratentaugliche Quarze (3,6864 MHz, 
7,3728 MHz), wenn meine AVRs mit PCs oder anderen Industriegeräten per 
RS232 kommunizieren sollen. Es schließt einfach zusätzliche 
Fehlerquellen aus.

MfG

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

>Ich bevorzuge übrigens auch baudratentaugliche Quarze (3,6864 MHz,
>7,3728 MHz)

ersteres is besser, da gängiger und besser zu haben und vorneweg auch 
günstiger im EP.
letzteres is zwar auch ok, aber immerhin noch paar microeinheiten 
schlechter als 3,6864MHz...
Aber zum laufen sind die definitiv beide besser als 4MHz...

LG
Giuse

von Romano (Gast)


Lesenswert?

Ich bin leider erst jetzt dazu gekommen alles durchzumessen. Leider sind 
die Ergebnisse überhaupt nicht wie erwartet.

Beim prüfen zwischen PC Gehäuse und Schaltung (GND und PIN8&22 vom 
ATMega)habe ich werte um 4 Ohm gemessen (das ist noch in Ordnung, 
oder?).

Aber bei den Spannungswerten am Max232 sid völlig andere Werte als 
erwartet gemessen worden:

PIN2 4V
PIN6 -1,3V
PIN16 -1,3V
T1OUT (beim senden) ca. 3V

Lediglich am R1IN habe ich die erwarteten -10V gemessen.

Ich denke ich fange nochmal von vorne an und baue die Schaltung neu auf. 
Wenn jemand mir einen Schaltplan und ein C Programm zur Verfügung 
stellen könnte (die Kombination aus beidem sollte dann bei ihm schon 
funktioniert haben) wäre das Toll. Dann gebe ich nächste Woche meine 
Bestellung bei Reichelt auf. Aufgeben will ich einfach noch nicht.

Gruß,
Romano

von Purzel H. (hacky)


Lesenswert?

Ein Oszilloskop ist verfuegbar ? Dann ist es ein Stueck einfacher.

von Romano (Gast)


Lesenswert?

Ein Oszilloskop habe ich leider nicht. Da ist mir die Investition 
momentan einfach zu hoch.

von Kurt (Gast)


Lesenswert?

Hallo Romano, welche Spannung liegt am Pin 15 des Max232 an?


Gruss Kurt

von fuzzy1 (Gast)


Lesenswert?

probier mal diese Seite:
http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-level-conversion/

hat bei mir eigentlich alles funktioniert
:-)

von Romano (Gast)


Lesenswert?

@Kurt:
An PIN15(GND, nichts angeschlossen) liegen (gemessen gegen GND) 4,2V an.

@fuzzy1:
Danke für die Seite, wird mir als Anfänger schon von daher weiterhelfen 
können, dass ich Fotos der Schaltungen sehe.

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Romano schrieb:
> @Kurt:
> An PIN15(GND, nichts angeschlossen) liegen (gemessen gegen GND) 4,2V an.

Muss ich das jetzt verstehen???

Wie kann man am GND-Pin 4,2V gegen GND messen?

Betreffs Schaltung und C-Programm:
Schau doch einfach mal ins Datenblatt des MAX232 (gibt es kostenfrei bei 
Maxim und an vielen anderen Stellen im Netz), da ist die komplette 
Beschaltung drin.
Und dann schau ins Datenblatt des Mega8, Kapitel USART, da sind ASM- und 
C-Routinen für RS232 RX und TX drin.

MfG

von Romano (Gast)


Lesenswert?

An PIN16 messe ich die gleiche Spannung. Hab dann grad mal den max 
ausgetauscht (hätte ja defekt sein können), bekomme aber die gleichen 
Ergebnisse. Im Datenblatt sin VCC und GND auch beschaltet, in allen 
anderen Quellen habe ich das bisher noch nicht gesehen.

von H.Joachim S. (crazyhorse)


Lesenswert?

lol, du hast Vcc und Gnd gar nicht beschaltet??

von Frank B. (frank501)


Lesenswert?

Romano schrieb:
> an PIN15(GND, nichts angeschlossen) liegen (gemessen gegen GND) 4,2V an.

Romano schrieb:
> An PIN16 messe ich die gleiche Spannung.

Kann es sein, daß Du die beiden Pins nirgends angeschlossen hast?
die gehören an die 5V Versorgung (Pin16) und an Masse (Pin15), wie hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART
auch abgebildet (der kleine Schaltungsteil rechts unten).

Frank

von Romano (Gast)


Lesenswert?

^^Ok, da hab ich mich dann wohl ein wenig blöd angestellt. Das werd ich 
gleich mal ausbessern und geb dann Rückmeldung.

von Romano (Gast)


Lesenswert?

In der Schaltung die hier 
(http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-level-conversion/) 
dargestellt ist sind die aber auch nicht beschaltet. Ist das einfach 
SOOO basic, dass das nicht dargestellt wird ??

von Romano (Gast)


Lesenswert?

Vorab erstmal: Vielen, vielen Dank für eure Hilfe.

Es hat endlich funktioniert!! Ich bin ja so blöd!! In Zukunft nicht mehr 
ohne Datenblatt!!!

Jetzt weis ich aber, wo man ausdauernde kometent Hilfe bekommt.

Vielen Dank noch mal.

Gruß,
Romano

von Frank B. (frank501)


Lesenswert?

Romano schrieb:
> In der Schaltung die hier
> (http://extremeelectronics.co.in/avr-tutorials/rs23...)
> dargestellt ist sind die aber auch nicht beschaltet.

Daß die Vcc und GND Pins an einem IC angeschlossen werden müssen, sollte 
eigentlich klar sein, da die Funktion sonst nicht oder wie in Deinem 
Fall nicht korrekt gegeben ist.
In manchen Fällen kann das sogar gut gehen, wenn interne Schutzdioden an 
den I/O-Pins gegen Masse und Vcc im IC sitzen. Dann kann man sogar eine 
passende Wechselspennung an zwei I/O-Pins legen und puffert die 
Versorgung nur an Vcc und GND mit einem Elko und einem 100nF 
Kondensator. die internen Schutzdioden wirken dann als 
Brückengleichrichter. Wie hier zum Beispiel:
http://micah.navi.cx/2008/09/using-an-avr-as-an-rfid-tag/

Aber als normale Arbeitsweise der IC's kann man das nicht ansehen und 
sollte es tunlichst vermeiden, wenn man nicht 100%ig weiß, was man tut.

In Deinem Falle hat sich der Max seine Versorgungsspannung zum Teil aus 
den Eingangsspannungen gebastelt, was aber nicht wirklich funktioniert 
hat.


Romano schrieb:
> Ist das einfach SOOO basic, dass das nicht dargestellt wird ??

Ja.
Genau so wie die Entkoppelkondensatoren an der Spannungsversorgung 
direkt am IC.

In vielen Plänen werden die Versorgungsspannungsanschlüsse einfach weg 
gelassen oder in einem seperaten Teil gezeichnet, um (vor allem in 
größeren Plänen) die Übersichtlichkeit zu wahren.

Frank

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.