Forum: Mikrocontroller und Digitale Elektronik BASCOM UART Senden geht empfangen nicht


von Nette M. (nette-mann)


Lesenswert?

Hab mir eine Platine geätzt und auch alle Leiterbahnen auf kurzschluss 
getestet. Habe den MAX 232 in SMD Form verlötet. Laut Datenblatt gibt es 
zu dem DIP IC keine Unterschiede. 
http://www.mikrocontroller.net/wikifiles/e/ee/AVR-RS232.png

Ich kann mit dem aufgelöteten Atmega 8 auch zum PC senden und erhalten 
ohne Störsignale 100 %tig das was ich mit dem Atmega versende, aber wenn 
ich vom PC etwas an den Atmega schicke, gibt es keine Reaktion darauf.

Code:
$regfile = "m8def.dat"
$baud = 19200
$crystal = 4000000

Ein Alias 1
Aus Alias 0

Dim I As Byte
Config Pinb.0 = Output
Portb.0=Aus

Print "Start"
Do
  i = Ischarwaiting()
  If i = 1 Then
    i = Waitkey()
    Select Case i
    Case "H"
      Print "Hallo"
    Case "h"
      Print "hallo"
    Case "t"
      Portb.0 = EIN
    Case Else
      Print "Unbekannter Befehl"
    End Select
  End If
Loop
End

Und ja ich habe schon eine halbe stunde gegoogelt nach gemessen und die 
SuFu genutzt. Der gepostete ode ist nur ein Testprogramm und nicht das 
Hauptprogramm

von gast (Gast)


Lesenswert?

Hast Du am 9pol. Sub-D Stecker Deines Layouts die Pins
7 (RTS) mit 8 (CTS)
und
1 (DCD), 4 (DTR) und 6 (DSR)
miteinander verbunden? Ich musste das bei allen RS-232 Schaltungen 
machen, die ich an einen seriellen Port des PC angeschlossen habe.
Es funktionierte sonst nicht, wegen Handshake/Flusskontrolle.
RTS: Ready To Send
CTS: Clear To Send
DCD: Data Carrier Detected
DTR: Data Terminal Ready
DSR: Data Set Ready
Lies' Dir mal die Spezifikation der RS-232 Schnittstelle durch :-).

von Rolf I. (for_ro)


Lesenswert?

Da i als Byte deklariert ist, können die Cases "H", "h" und "t" niemals 
true ergeben. I kann dann nur gleich 72, 104 bzw 116 sein.
Es sollte aber immer der Else Case durchlaufen werden.

Gruß

Rolf

von Klaus D. (kolisson)



Lesenswert?

hallo nette mann,

kann sein dass dein code irgendwie auch gehen kann.
anbei aber mal meine version , die immer sehr zufriedenstellen läuft


gruss klaus

von Chris (Gast)


Lesenswert?

Konnte das Problem gelöst werden? Ich habe nämlich dasselbe. Verwende 
folgenden Testcode:
1
$regfile = "m32def.dat"
2
$crystal = 16000000
3
$baud = 9600
4
5
$framesize = 32
6
$swstack = 32
7
$hwstack = 32
8
9
Dim Relaisinp As Byte
10
11
Print "Hallo Welt"
12
13
Do
14
15
   If Ischarwaiting() <> 0 Then
16
17
      Relaisinp = Waitkey()
18
      Print Relaisinp
19
20
   End If
21
22
Loop

"Hallo Welt" kommt korrekt am Terminal an, jedoch reagiert der 
Controller (Atmega32) auf kein gesendetes Zeichen.

Es sind am RS232 nur die Pins RxD, TxD und die Signalmasse beschaltet, 
was doch eigentlich zum einfachen Senden und Empfangen reichen sollte.

Wäre schön, wenn mir jemand helfen kann. Den Code von Klaus habe ich 
ebenfalls ausprobiert - keine Reaktion.

Viele Grüße,
Chris

von Karl (Gast)


Lesenswert?

Probiere mal den Code aus der Bascom-Hilfe. Hier ist Ischarwaiting() 
nicht in die IF-THEN-Anweisung eingebaut.

http://avrhelp.mcselec.com/index.html?ischarwaiting.htm

Ich persönlich bevorzuge die Interrupt-Variante zum Empfangen:

http://www.rowalt.de/mc/avr/avrboard/04/avrb04.htm

von Chris (Gast)


Lesenswert?

Leider funktionieren beide Vorgehensweisen nicht. Kann es ein 
Hardwarefehler sein? Müssen die anderen Leitungen verschaltet werden? 
Das Terminal meldet "UART Receiver Framing Error". Kann dies den Fehler 
verursachen?
Danke für die Hilfe, Chris

von Karl (Gast)


Lesenswert?

Probiere mal 4800 Baud. Ansonsten ist evtl. wirklich ein Fehler in der 
Hardware vorhanden. Wie genau verbindest Du den µC mit dem Computer?

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.