PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom SERIN SEROUT unterschiedliche Baudrate?



Scarabol
28.05.2010, 16:25
Hi,

ich würde gerne mit meinem AtMega168 auf einem Minicontrol die serielle Schnittstelle meines Routers auslesen und die Daten dann an meinen Computer schicken.

Der Router hat eine Baudrate von 38400 und mein AtMega läuft mit 9600.

Das Terminalprogramm auf meinem Rechner zeigt mir aber "fast" nur Quatsch an. Bis auf einige Buchstaben oder kurze Wörter steht auch viel Mist in der Ausgabe.

Bsp:


ion:203
005 20070) 2:] M 4MBregi a 6raseors ] ARz

AV
[cAVM :
...............do<\n>[arHERAHz b


[a[ar7ar7_

L<20>?r?W???@<5>


Wo liegt der Fehler?

Ich benutze folgendes Program:


'----------------------------------------------------------------------
' serin_out.bas
' (c) 2002-2005 MCS Electronics
' demonstration of DYNAMIC software UART
'----------------------------------------------------------------------

'tip : Also look at OPEN and CLOSE

$regfile = "m168def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

'some variables we will use
Dim S As String * 10
'buffer to save data
Dim B As Long
B = 0

S = Chr(13) + Chr(13) + "Im ready" + Chr(13)
Print S

'DISABLE HW UART
Ucsr0b = 0

Do
'first get some data via JP1
Serin B , 4 , D , 2 , 38400 , 0 , 8 , 1
'now send it
If B <> 0 Then
Serout B , 4 , D , 1 , 9600 , 0 , 8 , 1
' ^ 1 stop bit
' ^---- 8 data bits
' ^-------- even parity (0=N, 1 = E, 2=O)
' ^------------- baud rate
' ^------------------- pin number
' ^----------------------- port so PORTA.0 and PORTA.1 are used
' ^--------------------------- for strings pass 0
' ^-------------------------------- variable
End If
Loop
End

'because the baud rate is passed with a variable in theis example, you could change it under user control
'for example check some DIP switches and change the variable mybaud


MfG
Scarabol

Scarabol
28.05.2010, 17:04
Ich hab den Fehler schon selber gefunden:

1. Ich habe den Speicher mit einem Array auf 500 Byte aufgepumpt
2. Außerdem hab ich die if B = 0 Überprüfung entfernt.

Hier mal der funktionierende Code:


'----------------------------------------------------------------------
' serin_out.bas
' (c) 2002-2005 MCS Electronics
' demonstration of DYNAMIC software UART
'----------------------------------------------------------------------

'tip : Also look at OPEN and CLOSE

$regfile = "m168def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

'some variables we will use
Dim S As String * 10
'buffer to save data
Dim B(512) As Byte
'B(0) = 0

S = Chr(13) + Chr(13) + "Im ready" + Chr(13)
Print S

'DISABLE HW UART
Ucsr0b = 0

Do
'first get some data via JP1
Serin B(1) , 511 , D , 2 , 38400 , 0 , 8 , 1
'now send it
Serout B(1) , 511 , D , 1 , 9600 , 0 , 8 , 1
' ^ 1 stop bit
' ^---- 8 data bits
' ^-------- even parity (0=N, 1 = E, 2=O)
' ^------------- baud rate
' ^------------------- pin number
' ^----------------------- port so PORTA.0 and PORTA.1 are used
' ^--------------------------- for strings pass 0
' ^-------------------------------- variable
Loop
End

'because the baud rate is passed with a variable in theis example, you could change it under user control
'for example check some DIP switches and change the variable mybaud

Richard
28.05.2010, 18:33
Hi,


MfG
Scarabol


versuche es mal damit:




Dim R As String * 10





Do

Open "comc.0:9600,8,n,1" For Output As #1
Open "comc.1:9600,8,n,1" For Input As #2

Input #2 "Test " , R

Print #1 , "hallo" ; R




Close #1
Close #2

Loop


Gruß Richard

Scarabol
28.05.2010, 18:45
Kann ich für $baud auch 38400 wie beim Router benutzen?

Oder ist das zu schnell für den Atmega168?

MfG
Scarabol

Richard
28.05.2010, 19:14
Kann ich für $baud auch 38400 wie beim Router benutzen?

Oder ist das zu schnell für den Atmega168?

MfG
Scarabol

Natürlich. :-)

Aber wir reden aneinander vorbei. :-( Stelle Dir einmal vor Du bist
das contol und ich bin die Fritz Box und wir Telefonieren. Ich spreche nur
Plattdeutsch und Du nur Russisch, das klappt nicht. Die Baudraten müssen
schon Passen.

Die eine (Software-Schnittelle) bekommt von Hand eingetragen für RX/TX 38400 und wird an die Fritzbox angeschlossen.

Die Andere (Hardware-Schnittelle)
auch auf 38400 $baut 38400 eingestellt werden und wird mit dem PC
verbunden. Die PC Baudrate muss dann angepasst werden.

PCTX>>>>>>>HartwareRX>>>>>>>SoftwareTX>>>>>>FritzRX
PCRX<<<<<<<HarwareTX<<<<<<<SoftwareRX<<<<<<FritzTX
GND----------------GND--------------------GND-----------------GND

Gruß Richard[/code]

Scarabol
28.05.2010, 19:17
Danke dir,

ich habs hinbekommen:


' Fritz Debug
'
' This debugs Fritz Box Fon WLAN 7050
' serial output to RS232 via Minicontrol
'
' made by Scarabol
' thx Richard

$regfile = "m168def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 38400

Print
Print
Print "Im ready!"
Print

Dim B As Byte
B = 0

Open "comd.2:38400,8,n,1" For Input As #2

Do


B = Waitkey(#2)

If B > 0 Then
Printbin B
End If

Loop

Close #2


MfG
Scarabol