PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfachstes UART RS232 empfangen funktioniert nicht



Steffen44
01.10.2006, 10:26
Ich glaube ich habe nun schon alle möglichen Scripte die es gibt durchprobiert und nichts von allem funktioniert. Ich schaffe es nicht auch nur irgendein String oder auch nur eine einzelne Zahl zu senden und im ATMEGA32 auszuwerten und über die Serielle Schnittstelle zurückzusenden.


Mit welchem Programm kann man vernümpftig Strings senden und auch wieder empfangen ? Hab ich irgendetwas nicht eingerichtet oder eingestellt auf dem ATMEGA32 .. ich weis es nicht ... :-(

Es wäre schön wenn mir jemand ein Beispiel geben könnte mit welchem Programm er arbeitet und welches Script er einsetzt das die Kommunikation zw. PC und dem ATMega funzt.


Hier ist eines der Scripte die ich ausprobiert habe die so einfach gehalten sind das doch eigentlich nichts schief gehen kann aber rühren tut sich gar nix.

$regfile = "m32def.dat"
$crystal = 16000000 'Quarz: 16 MHz
$baud = 9600 'UART-Baudrate: 9600 Baud


$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space



'Config Portb = Output 'Config Port B als Output

Dim A As Byte 'Declarieren der Variable als 8Bit Wert
A = 0
Loop: 'Setzen der Sprungmarke
Input ">" , A 'Wartet auf Wert von der Seriellen Schnittstelle
Print A 'Setze den Port A vorher Empfangenen Wert
Goto Loop 'Spring zurück zur Sprungmarke

philiph
01.10.2006, 10:57
Also der Code sieht eigentlichh ganz gut aus aber lass mal das
'Config Portb = Output 'Config Port B als Output weg!
Also bei mir geht es so(nehme für den PC "HTERM" mal googeln)
UND :
1) Hast du auch ein CR(chr. 13) mitgesendet?
2) Stimmt ggf. die Pegelwandlung
3) ist alles richtig verkabelt?
4) geht nur Print(kannst Daten richtig empfangen)?

Steffen44
01.10.2006, 12:08
1) Hast du auch ein CR(chr. 13) mitgesendet?

was ist das ??

2) Stimmt ggf. die Pegelwandlung

kann ich auch nix anfangen mit ?!

ist alles richtig verkabelt?
ja das senden funktioniert. Habe mein RN-Controll ganz normal über die mitgelieferten Anschlußkabel angeschlossen da dürfte nichts falsch sein.

4) geht nur Print(kannst Daten richtig empfangen)?
JA bisher ging immer nur Print ein senden ist möglich das empfangen hat bisher nie geklappt egal welche Scripte ich versucht habe.

Ich bin mir nicht sicher ob ich nur die Daten vom PC her falsch sende oder ob ich evtl. noch irgendeine Einstellung für den Controller vergessen habe.


'Config Portb = Output 'Config Port B als Output
hatte ich schon auskommentiert das war aus einem Beispielscript wo die Ausgabe wohl per Port erfolgen sollte aber ich will eigentlich ein Feedback sehen wenn ich sende soll er mir die bestätigung zurücksenden naja das ist schwieriger als ich dachte.

Gruß
Steffen

philiph
01.10.2006, 12:21
Also "CR" ist ein Steuerzeichen das muss mitgesendet werden sonst ignorriert der controller die Daten bedeutet -->no input
Bei meinem "HTerm" z.B. kann man das einstellen

i-mon
03.10.2006, 20:42
Hallo,

kann es sein, dass dein Code grundlegend falsch ist?
Ich benutze für den Empfang via serielle Schnittstelle immer Inkey(). Hier mal ein Beispiel:



$regfile = "m32def.dat"
$crystal = 4000000
$baud = 9600

Dim Zeichen As Byte
Zeichen = 0

Do
Zeichen = Inkey()
If Zeichen > 0 Then Print "Habe Zeichen " ; Chr(zeichen) ; " empfangen!"

Loop
End

Ich benutze sowas auch häufig in Kombination mit einer Select Case-Schleife.

Gruß

Werner

Steffen44
03.10.2006, 22:11
danke für das beispiel sowas habe ich gesucht aber wie alle beispiele finde ich keine möglichkeit es irgendwie auszuwerten.

Das Hterm verstehe ich nicht wo kann man da Daten empfangen ?!

Gibt es nicht etwas einfach wo ich senden und auch empfangen kann ?

Ich werde wohl erstmal versuchen müßen mit deinem Beispiel den Speaker zu aktivieren das sollte mir die Möglichkeit geben zumindest akustisch bestätigung zu erlangen das da irgendwas funktioniert.

Gento
04.10.2006, 05:33
a) wozu ein chr(13) ?
b) wenn man das einsetzt "Zeichen = Inkey()" wartet die CPU Wochen bis wirklich ein Zeichen ankommt.

Gento

Vitis
04.10.2006, 06:46
von wegen, bei inkey wartet das Ding nie, wenn nix angekommen ist gibt Inkey 0 zurück und weiter gehts.
Was Du meinst ist "waitkey"

Steffen44
07.10.2006, 12:27
Also bei Inkey höre ich den Speaker ständig so kann das nicht sein ohne zeichen geschickt zu haben dürfter der Speaker nicht aktiviert werden und bei Waitkey passiert rein gar nichts wo ich bei meinem üblichem Problem wäre. Hier ist der Schnippsel den ich verwendet habe :



$regfile = "m32def.dat" 'ATmega8-Deklarationen
$crystal = 16000000 'Quarz: 16 MHz
$baud = 9600 'UART-Baudrate: 9600 Baud
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space




Dim Zeichen As Byte
Zeichen = 0

Do
Zeichen = Waitkey()
If Zeichen > 0 Then Print "Habe Zeichen " ; Chr(zeichen) ; " empfangen!"
Sound Portd.7 , 400 , 350 'BEEP

Loop
End

Vitis
08.10.2006, 09:56
ich vermute Hardwarefehler.
Max232 richtig beschalten, RX-TX richtig beschalten,
Serialkabel richtrig angeschlossen, richtigen COM am PC eingestöpselt COM1 COM2, Richtiger COM im Terminal eingestellt etc.
Fuses falsch gesetzt, läuft der M32 auf 16MHz?
oder noch intern auf 1MHz, Baudrate vom Terminal
und M32 passend etc.

Frage: Funktioniert Print Anweisung? Kommt im Terminalfenster was an?

PicNick
08.10.2006, 10:06
Mach zur Kontrolle die "Hello world"-Geschichte. (Bascom-version)
https://www.roboternetz.de/wissen/index.php/Sourcevergleich#BasCom_.28Hello.2C_world.29

Dann weißt du, ob die Kommunikations-Hardware funzt oder nicht.

Es sind dort noch andere Beispiele, die du versuchen solltest.
Dann kannst du dich über gefinkeltere Sachen stürzen

i-mon
08.10.2006, 14:13
Hallo,

deine if-Bedingung musst du nochmal überarbeiten, da die sound-Funktion nicht an die Bedingung geknüpft ist. Mit meiner Änderung müsste nur etwas zu hören sein, wenn dein Mega32 empfängt. Die Variable Zeichen wieder auf null zu setzen, nachdem etwas empfangen wurde, wäre auch nicht schlecht:

$regfile = "m32def.dat" 'ATmega8-Deklarationen
$crystal = 16000000 'Quarz: 16 MHz
$baud = 9600 'UART-Baudrate: 9600 Baud
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space




Dim Zeichen As Byte
Zeichen = 0

Do
Zeichen = inkey()
If Zeichen > 0 Then
Print "Habe Zeichen " ; Chr(zeichen) ; " empfangen!"
Sound Portd.7 , 400 , 350 'BEEP
Zeichen=0
end if

Loop
End

Steffen44
08.10.2006, 14:49
ich danke ersteinmal allen für die Hilfe ich habe nun alles durchgetestet und jede menge Tips ausprobiert nur tut sich nix in meinem µC der ATMEGA 32 bleibt stumm und will entweder nix entfangen oder kann mit dem empfangenen nichts anfangen.

Ich habe das AVR Term sowie das Hterm und ein in Excel geschriebenes VB Script zur Kommunikation mit der Com schnittstelle ausprobiert nichts will funktionieren.

Das RN-Controll hat ja alles komplett auf dem Board und langsam kann ich mir nur vorstellen das der max232 vieleicht beschädigt ist senden tut er ja fleißig aber mit dem empfangen und auswerten geht rein gar nix.

Ich werde mal versuchen eine Spannung zu messen ob irgendetwas am max232 angekommt und abgeht.

PsychoElvis64
10.11.2006, 01:12
Bei mir lags an der Spannung und an einer zu hohen Bautrate!

Ich habe dann eine kräftiger Stromquelle genommen und die Rate auf Testweise 1200 etwas verringert und *ding* da lief es auf einmal :-)

Nur nen Tip bin auch kein Profi

Steffen44
10.11.2006, 15:57
ahh ein Leipziger :-)

das kann ich mal Probieren ob es an der Baudrate geht weil mittlerweile habe ich schon alles versucht das ich es schon halb aufgegeben habe.

Irgendwann wollte ich es nochmal mit dem ATMega 8 probieren.

Gruß
Steffen

kolisson
10.11.2006, 16:37
ein ganz nettes terminalprogramm für die pc-seite findet man hier:
http://www.download-tipp.de/Telekommunikation/Telnet_und_Terminal_Programme/index.shtml

und dann das terminal ga 2.38

gruss

Steffen44
22.11.2006, 13:55
fehler gefunden nach langem Spannung messen am Max232 habe ich festgestellt das der RX mit GND beschalten ist und anders herum.

Schön das man originale Kabel mit falscher Beschaltung ausgeliefert bekommt. Zum Glück ist nichts kaput gegangen an meinem PC.

Jetzt funkioniert alles wie ich mir das vorgestellt habe :-)

Vielen Dank für die Wertvollen Tips

Gruß
Steffen

MOLE
22.11.2007, 17:53
Hallo RN-User,

Da mir in dem Forum schon öfters sehr gut und nett geholfen wurde, und die Beiträge hier auch viele Erkenntnisse und Lösungen für diverse Probleme bringen.
Nun wollte ich auch einmal mein Wissen verbreiten, jetzt wo ichs mal kann ;)


Also es geht um folgende Problemstellung:
Als Vorversuch soll über das Windows Hyperterminal per Eingabe ein Bytewert über die RS232 Schnittstelle an einen ATMEGA8 übertragen werden.
Dieser schaltet anhand des Bytes (6 Pins bedeutet Bit 0-5) an PortC über Relais/Optokoppler jeweils eine LED.
Das bedeutet, wenn man eine "1" sendet geht LED1 an, bei einer "2" LED2, bei einer "4" LED3 und bei einer "7" LED1,2,3. Normalzustand der LEDs ist aus.
Desweiteren sollen dann die Eingänge an PortB eingelesen werden. Auch nur 6 Eingänge.
GND Signal= 0, 5V=1

Dieser Wert wird dann wiederum über die RS232 Schnittstelle zum Hyperterminal gesendet, so dass man anhand des Bitcodes auslesen kann wie die Schalter stehen.

Ein MAX232 übernimmt die Pegelwandlung und ein externer 8MHz Quarz (mit entsprechend gesetzten Fuses) taktet den µC.

Der Schaltplan befindet sich im Anhang, mit Target erzeugt, und ja hab ihn jetzt mal schnell erstellt, deswegen vielleicht nicht ganz so übersichtlich... :oops:

Getestet wurde der Mikrocontroller zunächst am ATMEL AVR Starterkit Board STK500. Programmiert mit dem hier empfohlenen Bascom
(Großen Dank übrigens für die Empfehlung und die schönen Beispiele, hatte nämlich keine Lust auf Assemblersprache, und C mit dem GUI Compiler war mir zu blöd und kompliziert zum Compilern und übertragen :)
Einzig die Fuses stellen sich so schlecht ein, da nutz ich noch das AVR Tool, geht schneller und übersichtlicher und da dies nur einmal gemacht wird auch kein großer Aufwand)

Soweit so gut, das µC Programm dazu befindet sich im Anhang.

Natürlich hat das Programm nicht auf Anhieb geklappt und auch an der Beschaltung vom Board musste ich etwas basteln hat aber soweit alles geklappt.
Die Tests am Board haben geklappt Kommunikation am Terminal ging und LEDs gingen an etc.

Dann der Nachbau am Steckbrett (ja war lustige Arbeit ;) )
Jetzt sollte eigentlich auch alles gehen. Aber nada....

Beim Versuch die Kommunikation weiterhin über das STK500 zu steuern (Per Rückführung des RXD,TXD und GND) ging es wiederum also kein Fehler in den Schaltungen.
Aber nicht direkt über den MAX232. Alle Pins und Verbindungen und Steckerbelegungen haben gepasst. Auch habe ich (da zunächst ohne MAX gar nix ging) über den MAX immerhin vom µC zum Hyperterminal senden können. Nicht aber zurück, kein Empfang am µC.
BAUD Einstellungen , Parity, Stopp, haben soweit gepasst.
Und die Kommunikation über den STK500 ging bei gleicher Konstellation und nur RXD, TXD und GND zurückgeführt. Hat mich also sehr verwirrt.

Lange hab ich den Fehler im Aufbau, im Programm etc. gesucht warum der µC zwar senden, jedoch nicht empfangen wollte. Und die Querlösung, die Daten über das andere Board zu schicken ging auch ohne Änderungen....

Schließlich half mir ein Kollege.
Der Fehler lag nämlich im Hyperterminal (Wo ich selbst nie gesucht hätte) !!!! Dort war nämlich die Flußsteuerung vom Standard also auf Hardware eingestellt. Am STK hat es mit dem mitgelieferten Kabel auch funktioniert. Bei meiner Platine mit eigenem Stecker wo nur PIN 2,3 und 5 belegt waren jedoch nicht.
Und siehe da, kaum war die Flußsteuerung ausgeschaltet ging die Kommunikation auch auf der selbst gebauten Platine, mit MAX232 und eigenem Kabel.


Und ich schreibe diese Geschichte hier zum einen aus Freude, dass es endlich geht, zum anderen hatten hier schon einige Leute ähnliche Probleme, meist dann aber ein Verkabelungsfehler vom RS232 Stecker.
Ich wollte nur sagen es kann auch am Hyperterminal liegen!!!

Vielleicht hilft einem mein Fehler oder auch die kleine Schaltung bei einem seiner Probleme. Und ein ähnliches Problem hat hier noch niemand beschrieben.
Immerhin hab ich hier schon einige Lösungen und Hilfen gefunden, deswegen zum Dank sozusagen mein Feedback :)