tc-maxx
09.02.2007, 23:56
Hallo !
Ich habe das Problem wenn ich einen String von meiner PC-RS232 Schnittstelle an meinen Atmega32 sende immer nur das 1. und manchmal auch das 2. Zeichen korrekt übertragen wird... Der Rest ist immer Müll.. :(
Das Empfangen der Daten vom µC auf dem PC funktioniert ohne Probleme!
Wenn ich die Zeichen aber einzeln übertrage und dazwischen jeweils eine Millisekunde Zeit lasse dann werden alle Zeichen ordnungsgemäß übertragen.
Vom PC aus sende ich die Daten mit einem Visual Basic Programm.
Hier der VB6 Source:
Private Sub Command1_Click()
' Call ComAusgabe("MaXX") ‚<- funz weil 1ms pause zw jedem Zeichen…
MSComm1.Output = "MaXX" ‘<-funzt nicht es kommt nur „Ma…ý“ an
End Sub
Private Sub ComAusgabe(Zeile As String)
Dim Count As Integer
For Count = 1 To Len(Zeile)
Sleep 1
MSComm1.Output = Mid(Zeile, Count, 1)
Next Count
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 0
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comOverrun: MsgBox "Datenverlust!"
Case comRxOver: MsgBox "Datenverlust!"
Case comEvReceive: Text = Text & MSComm1.Input
End Select
code.SetFocus
code.Text = code.Text & Text
End Sub
Private Sub Form_Close()
MSComm1.PortOpen = False
End Sub
Bascom Programm
'------------[Meta]-------------------------------------------------------------
$regfile = "m32def.dat"
$crystal = 11592000
$hwstack = 32
$swstack = 10
'$framesize = 40
$baud = 9600
'------------[Lib für glcdKS108]------------------------------------------------
$lib "glcdKS108.lbx"
'------------[GLCD Config]------------------------------------------------------
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 1 , Ce2 = 2 , Cd = 3 , Rd = 4 , Reset = 0 , Enable = 5
Cls
Setfont Font8x8
On Urxc Onrxd
Dim I As Byte
Dim S As String * 10
Ddrd.5 = 1
Enable Urxc
Enable Interrupts
Main:
Portd.5 = Not Portd.5
Waitms 1
Goto Main
Onrxd:
I = Udr
Udr = I
S = S + Chr(i)
Cls
Lcdat 1 , 1 , S
Return
'------------[Ende]-------------------------------------------------------------
End
$include "font8x8.font"
Gibt es eine möglichkeit den µC zu fragen ob er empfangsbereit ist o.ä?
Ich wäre für jede Hilfe Dankbar!
MfG MaXX
PS: Ich bemerke gerade dass bei längeren Strings die Wartezeit von 1ms nicht mehr ausreicht
Ich habe das Problem wenn ich einen String von meiner PC-RS232 Schnittstelle an meinen Atmega32 sende immer nur das 1. und manchmal auch das 2. Zeichen korrekt übertragen wird... Der Rest ist immer Müll.. :(
Das Empfangen der Daten vom µC auf dem PC funktioniert ohne Probleme!
Wenn ich die Zeichen aber einzeln übertrage und dazwischen jeweils eine Millisekunde Zeit lasse dann werden alle Zeichen ordnungsgemäß übertragen.
Vom PC aus sende ich die Daten mit einem Visual Basic Programm.
Hier der VB6 Source:
Private Sub Command1_Click()
' Call ComAusgabe("MaXX") ‚<- funz weil 1ms pause zw jedem Zeichen…
MSComm1.Output = "MaXX" ‘<-funzt nicht es kommt nur „Ma…ý“ an
End Sub
Private Sub ComAusgabe(Zeile As String)
Dim Count As Integer
For Count = 1 To Len(Zeile)
Sleep 1
MSComm1.Output = Mid(Zeile, Count, 1)
Next Count
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 0
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comOverrun: MsgBox "Datenverlust!"
Case comRxOver: MsgBox "Datenverlust!"
Case comEvReceive: Text = Text & MSComm1.Input
End Select
code.SetFocus
code.Text = code.Text & Text
End Sub
Private Sub Form_Close()
MSComm1.PortOpen = False
End Sub
Bascom Programm
'------------[Meta]-------------------------------------------------------------
$regfile = "m32def.dat"
$crystal = 11592000
$hwstack = 32
$swstack = 10
'$framesize = 40
$baud = 9600
'------------[Lib für glcdKS108]------------------------------------------------
$lib "glcdKS108.lbx"
'------------[GLCD Config]------------------------------------------------------
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 1 , Ce2 = 2 , Cd = 3 , Rd = 4 , Reset = 0 , Enable = 5
Cls
Setfont Font8x8
On Urxc Onrxd
Dim I As Byte
Dim S As String * 10
Ddrd.5 = 1
Enable Urxc
Enable Interrupts
Main:
Portd.5 = Not Portd.5
Waitms 1
Goto Main
Onrxd:
I = Udr
Udr = I
S = S + Chr(i)
Cls
Lcdat 1 , 1 , S
Return
'------------[Ende]-------------------------------------------------------------
End
$include "font8x8.font"
Gibt es eine möglichkeit den µC zu fragen ob er empfangsbereit ist o.ä?
Ich wäre für jede Hilfe Dankbar!
MfG MaXX
PS: Ich bemerke gerade dass bei längeren Strings die Wartezeit von 1ms nicht mehr ausreicht