RS232 macht mich kirre

OP #1439141
Lesenswert?

Hallo zusammen!
Ich habe gerade ein kleines Problem mit der Kommunikation PC-µC.

Ich verwende einen atmega8 & max232 und möchte Daten zum PC senden 
(funktioniert) und welche empfangen (klappt nicht...).
Ich verwende Bascom.

Zum Aufbau:
atmega8 mit 8.867238 MHz Quarz, Geschwindigkeit 2400 Baud (zum Testen)
max232 mit 5 1µF Elkos

max232....PC.....atmega
-----------------------
T1out.....Pin2
R1in......Pin3
R1out............RXD
T1in.............TXD

Die Masse vom RS232 (Pin5) liegt auf der Masse vom atmega.

--------------
\ 1 2 3 4 5 /
 \ 6 7 8 9 /
  ---------
Was funktioniert:
Senden vom µC an den PC - Klappte sofort
Senden vom PC zum PC mittels gebrücktem TxD RxD klappt auch.
2 LED´s, jeweils an R1out und T1in. Funktionieren, irritieren mich aber 
etwas. Beim Senden von µC blinkt RxD, beim Empfangen vom PC TxD.

Was nicht klappt:
Senden vom PC zum µC. Es wird nichts ausgewertet. Ich komme aber einfach 
nicht dahinter was fehlt.

Einstellung im Hyperterm:
2400 Baud, 1 Stop-Bit, keine Parität, keine Flußkontrolle

Habe sowohl den max als auch den atmega schon mal getauscht - ohne 
Erfolg.
Ich hoffe, ich habe nichts vergessen - bin neu in der Elektronik...

Hat jemand eine Idee, was ich vergessen haben könnte?

Vielen Dank
Matze
#1439160
Lesenswert?

Hi,

probiere bitte auf den internen Oszillator mit 1 Mhz umzustellen. Ich 
habe die Vermutung, das die Baudrate mit dem Takt nicht möglich ist.

Fusebits laut Abbildung.

Wie ist das Ergebnis jetzt?

Verwende eine andere Baudrate.

Verwende folgenden Programmteil

dim Eingabe as string*1
Eingabe=inkey()
print Eingabe;

Grüße

Niels
OP #1439175
Lesenswert?

Hallo Niels, Hallo Michael,
vielen Dank für eure Antworten!

Die Geschwindigkeit müsste eigentlich passen. Im Datenblatt steht 
natürlich nicht genau die Quarzgeschwindigkeit, aber laut "AVR baud rate 
calculator" sollte es gehen.
Calculated Baud code (UBR): 230
Real baud rate: 2399 baud
Baud rate error: 0%

Muss ich den UBR noch irgendwo eintragen?
Gast #1439210
Lesenswert?

Hi,

laß Dich von "linuxgeeks" nicht kirre machen, der code ist sinnvoll. Ist 
ja direkt aus der BASCOM Hilfe - und sollte fuktionieren. In der Hilfe 
ist alles sehr gut unter "Using the UART" beschrieben. Auch wie man 
sieht, ob der interne Oszillator eingeschaltet ist. Du kannst aber auch 
einfach mal versuchen mit $crystal = 8000000 zu compilieren ...

@ derandi
Was könnte bei Waitkey passieren? Warten auf einen Tastendruck?
Steht übrigens auch in der Hilfe.

Viel Glück, derpeter
#1439233
Lesenswert?

Beim waitkey() wartet Bascom so lange bis ein Zeichen empfangen wurde. 
In diesem Fall wird der ASCII Wert des Buchstabens ausgeben.

Soll der Buchstabe selbst ausgegeben werden, so wäre chr(A) zu 
schreiben.

Probiers mal hiermit:

$baud 2400
dim A as byte
Print "Hallo Welt! Taste druecken!"
Do
A = Waitkey()
  Print "ASCII " ; A ; " empfangen!"
Loop
End

Also den Waitkey() in die Schleife und den statischen Print raus.

Ist übrigens Quatsch von Linuxgeek. Der interne Oszillator ist auch 
nicht ungenauer als 3%. Daher probiere es mit 1 000 000 Hz. Bei 8 MHz 
sind 2400bps mit Bascom aber auch möglich.
Gast #1439253
Lesenswert?

> Ist übrigens Quatsch von Linuxgeek. Der interne Oszillator ist auch
nicht ungenauer als 3%.

Ja. wenn man ihn kalibriert- kann man im DB nachlesen.
Der Tipp, eine UART mit internem Oszlllator zu betreiben, schreit 
geradezu nach Wiedereinführung der Prügelstrafe...
OP #1439254
Lesenswert?

@derpeter:
Auf 8Mhz kommt nur Kauderwelsch am PC an.

@Niels:
Keine Änderung - WaitKey war aber auch schon in der Schleife.

Ich habe den Quarz auch nur drauf, weil ich jedes Risiko umschiffen 
wollte. Und da der Weg µC->PC klappt mmüsste es ja auch eigentlich 
gehen...
Ich verstehe das einfach nicht. Hab mir jetzt auch schon zig Anleitungen 
angesehen - aber die machen eigentlich nichts anders.

Brauch die eingehende Leitung vielleicht noch einen Pullup, oder muss 
ich noch irgendwas zusätzlich am RS232 beschalten?
OP #1439285
Lesenswert?

@rene:
>hast du mal den max232 getauscht ?
Hab ich getauscht. Ich habe meine LED´s auch hinter dem max gesteckt.

>oder versuch mal ttl-seitig rxd-txd zu verbinden (ohne gestecktem atmega).
Hab ich zu Anfang schon getestet. Das geht

@Niels:
>Schau Dir mal den Pegelwandler von Pollin an. Da ist ein Schaltplan. Mit dem geht 
es immer.
Ok - das mache ich, aber mit dem max232 soll es doch auch funktionieren. 
Soviel Pech, dass mehrere, mittlerweile 3, max232 einen Weg haben geht 
doch nicht, oder?
Gast #1439320
Lesenswert?

Hi!
Von Bascom habe ich keine Ahnung, aber RX/TX lassen sich im µC 
abschalten,
nicht das du Rx noch irgendwie freigeben musst(RXE=1).
>Print "Hallo Welt! Taste druecken!" könnte ja Tx einschalten.

Viel Erfolg, Uwe
Gast #1439386
Lesenswert?

Hi
Also, soweit ich es auf die Schnelle beurteilen kann, ich glaub, da ist 
ein Denkfehler. erst der µC, dann der Max und dann der PC. Nun die 
Frage, µC mit oder ohne externen Quarz. Ohne hat er nur 1 MHz, und da 
ist er sehr ungenau. Hohe Baudraten kannst du dann vergessen. Es gibt 
hier ein Tutorial, ist zwar in Assembler geschrieben, aber mit AVR 
Studio ist es kein Problem, nachzuarbeiten. Ich mag auch mehr den 
Assembler....
So, nun noch ein paar kurze Infos zur Hardware:
µC hat Tx ( Sendeleitung) und die sollte am Max auf Pin (oh Gott, auf 
meinem Schreibtisch sieht's mal wieder aus..) also Pin 10 und der kommt 
auf Pin 7 wieder raus. Ebenso sollte alternativ TX an Pin 11 und pin 14 
wieder raus gehen. Der Ausgang (also 7 oder 14) geht dann auf 2 vom 
RS232 Stecker (weiblich). RX vom µC (Empfangen) geht auf Pin 12  (raus) 
und kommt auf Pin 13 rein oder alternativ auf Pin 8 (raus) und auf Pin 9 
rein. Also, Pin 13 oder Pin 8 kommt am RS232 Stecker auf Pin 3. Nun die 
Verbindungsleitung zum PC. Diese muß 2 und 3 kreuzen, denn was am µC TX 
ist, ist am PC RX und RX am µC ist TX am PC. Nicht vergessen, Pin 5 auf 
Masse zu legen. So sollte es dann auch funktionieren.
µC TX---MAX Pin 11 in --- MAX out pin 14 -- RS232 Pin 2 --RS 232 Pin 3 
PC
µC RX---MAX Pin 12 out --- MAX in Pin 13 -- RS232 Pin 3 --RS 232 Pin 2 
PC
Gnd --------------------------------------- RS232 Pin 5 --RS 232 Pin 5 
PC

Viel Spass
oldmax

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren