Peter_M
25.04.2007, 16:03
Hallo
Ich habe ein seltsames UART Problem. Wenn Daten von meinen Atmega8 ( 16 MHZ) mit 115200 Baud an den PC sende, werden einige Bytes nicht richtig empfangen. Bei 4400 gesendeten Bytes werden ungefähr 15 Bytes nicht richtig übermittelt. Interessanterweise tritt der Fehler nur auf wenn die Bytes zwischen 127 bis 255 liegen, unter 127 wird alles richtig übertragen. Die Übertragungsgeschwindigkeit (115200) kann ich nicht senken da ich die Bandbreite dringen brauche.
Bei meinen Testprogramm wird von 0 bis 1024 gezählt und die Zahl gesendet (HIGH und LOW Byte)
Im Terminal.exe am PC bekomme folgendes typisches Bild ( die Zahl 127 kippt am häufigsten zu 255 !!!)
0 110 0 111 0 112 0 113 0 114 0 115 0 116
0 117 0 118 0 119 0 120 0 121 0 122 0 123
0 124 0 125 0 126 0 255 0 128 0 129 0 130
0 131 0 132 0 133 0 134 0 135 0 136 0 137
0 138 0 139 0 140 0 141 0 142 0 143 0 144
Habt ihr eine Idee was das Problem sein könnte?
Mein Code:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 115200
$framesize = 32
$swstack = 32
$hwstack = 64
Config Lcdmode = Port
Config Lcd = 16 * 2
Config Lcdbus = 4
Dim A As Byte
Dim Counter As Integer
Dim Messwert_counter As Integer
Dim Signal_test As Integer
Dim Messdaten(2) As Byte
Dim Low_byte As Byte , High_byte As Byte
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.5 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portd.3 , Rs = Portd.2
Initlcd
Cls
Locate 1 , 1
Lcd "Test"
Locate 2 , 1
Lcd "Baud 115200"
Wait 2
Signal_test = 0
For Messwert_counter = 1 To 2000
Low_byte = Low(signal_test)
High_byte = High(signal_test)
Messdaten(1) = High_byte
Messdaten(2) = Low_byte
Printbin Messdaten(1);
Waitms 100
Incr Signal_test
If Signal_test > 1024 Then Signal_test = 0
Next Messwert_counter
End
Ich habe ein seltsames UART Problem. Wenn Daten von meinen Atmega8 ( 16 MHZ) mit 115200 Baud an den PC sende, werden einige Bytes nicht richtig empfangen. Bei 4400 gesendeten Bytes werden ungefähr 15 Bytes nicht richtig übermittelt. Interessanterweise tritt der Fehler nur auf wenn die Bytes zwischen 127 bis 255 liegen, unter 127 wird alles richtig übertragen. Die Übertragungsgeschwindigkeit (115200) kann ich nicht senken da ich die Bandbreite dringen brauche.
Bei meinen Testprogramm wird von 0 bis 1024 gezählt und die Zahl gesendet (HIGH und LOW Byte)
Im Terminal.exe am PC bekomme folgendes typisches Bild ( die Zahl 127 kippt am häufigsten zu 255 !!!)
0 110 0 111 0 112 0 113 0 114 0 115 0 116
0 117 0 118 0 119 0 120 0 121 0 122 0 123
0 124 0 125 0 126 0 255 0 128 0 129 0 130
0 131 0 132 0 133 0 134 0 135 0 136 0 137
0 138 0 139 0 140 0 141 0 142 0 143 0 144
Habt ihr eine Idee was das Problem sein könnte?
Mein Code:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 115200
$framesize = 32
$swstack = 32
$hwstack = 64
Config Lcdmode = Port
Config Lcd = 16 * 2
Config Lcdbus = 4
Dim A As Byte
Dim Counter As Integer
Dim Messwert_counter As Integer
Dim Signal_test As Integer
Dim Messdaten(2) As Byte
Dim Low_byte As Byte , High_byte As Byte
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.5 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portd.3 , Rs = Portd.2
Initlcd
Cls
Locate 1 , 1
Lcd "Test"
Locate 2 , 1
Lcd "Baud 115200"
Wait 2
Signal_test = 0
For Messwert_counter = 1 To 2000
Low_byte = Low(signal_test)
High_byte = High(signal_test)
Messdaten(1) = High_byte
Messdaten(2) = Low_byte
Printbin Messdaten(1);
Waitms 100
Incr Signal_test
If Signal_test > 1024 Then Signal_test = 0
Next Messwert_counter
End