RS232 macht mich kirre

OP #1439141
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
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
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
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
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
> 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
@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?
Persönliche Seite #1439269
hast du mal den max232 getauscht ?
oder versuch mal ttl-seitig rxd-txd zu verbinden (ohne gestecktem 
atmega).
vllt das der max232 einen weg hat.

ansonsten wüsst ich nur noch einen weg : mal in assembler ausprobieren 
ob sich da was empfangen lässt. vllt hat bascom ja ein problem. kenn 
mich mit bascom nicht aus. programmiere nur in c.
OP #1439285
@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
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
OP #1439357
Alle Aufregung ist umsonst, wenn der Fehler 30cm vor dem Steckbord 
sitzt. Hab rxd in int0 gesteckt, und das einfach nicht gesehen.
Jetzt funktioniert´s natürlich... Und wieder ein 3/4 Tag verschenkt.

Vielen Dank an alle, die drüber nachgedacht haben.

Gruß
Matze
Gast #1439386
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.