Forum: Mikrocontroller und Digitale Elektronik Empfangsprobleme uart


von Thorsten K. (odysseus-dpb)


Lesenswert?

Hallo

Ich habe ein Problem mit meinen Programm und mir sind die Ideen 
ausgegangen wo der Fehler liegen könte.

Ich will mit einen Programm einen µC ansteuern. Dieser soll dan 
Schaltbefehle ausführen und auch Rückmeldungen bringen. Das ganze ist 
für ein Faller Car System, welches ich über ein Modellbahn Programm 
steuern will. Das Datenprotocoll für die Serielle Schnitstelle habe ich 
und das ist an und für sich auch nicht mein Problem.

Der Computer Sendet zum Anmelden an die "Zentrale" (dies soll mein µC 
werden) einige Daten. Der erste Datensatz wird auch super empfangen und 
ausgewertet (255,254,33,33,0). Nachdem mein µC die Antwort darauf 
gesendet hat, kommt der nächste Datensatz (255,254,240,240). Jedoch 
erhält der µC scheinbar nur (255,254,240), als nur 3 der 4 Byte`s.

Habe den Pc mehrmals seine Daten Senden lassen, doch es wird immer beim 
zweiten Datenpaket nicht alles empfangen.

Ich habe auch mal die Antwort für das zweite Datenpaket automatisch mit 
50 ms Pause senden lassen. Da wurde somit auch das "Zweite" Datenpaket 
nicht Richtig empfangen. Da hatte ich jedoch den eindruck da die 
mittleren 3 der 6 gesendeten Bytes nicht empfangen wurden.

Es werden halt beim zweiten Datenpaket immer nur 3 Bytes empfangen und 
das macht mich stutzig.

Hier mal ein kleiner Auszug aus meinen Programm
Kann leider nur Basic, habe ich damals noch in der Schule zu Win 3.1 
Zeiten gelernt.
Zaeler ist die Anzahl der Empfangenen Bytes
In "Empfang 1-10" werden die Bytes zur späteren Auswertung gespeichert
"A" sorgt dafür das alle Bytes Empfangen werden, da ich nicht weiß wie 
viele Bytes gesendet werden.

1
$regfile = "m8def.dat"
2
$crystal = 7372800
3
$baud = 57600
4
Echo Off
5
6
Do
7
If Ischarwaiting() = 1 Then Gosub Dateneingang
8
9
If A > 0 Then A = A + 1
10
If A = 250 And Empfang1 = 255 Then
11
 A = 0
12
  Gosub Auswerten
13
Elseif A > 250 Then
14
 A = 0
15
  Zaeler = 0
16
End If
17
Loop
18
19
Auswerten:
20
If Test = 2 Then
21
Printbin Zaeler
22
Printbin 13
23
  Printbin Empfang1
24
  Printbin Empfang2
25
  Printbin Empfang3
26
  Printbin Empfang4
27
  Printbin Empfang5
28
  Printbin Empfang6
29
  Printbin Empfang7
30
  Printbin Empfang8
31
  Printbin Empfang9
32
  Printbin Empfang10
33
End If
34
return
35
36
Dateneingang:
37
Zaeler = Zaeler + 1
38
A = 1
39
X = Inkey()
40
If Zaeler = 1 Then Empfang1 = Asc(x)
41
If Zaeler = 2 Then Empfang2 = Asc(x)
42
If Zaeler = 3 Then Empfang3 = Asc(x)
43
If Zaeler = 4 Then Empfang4 = Asc(x)
44
If Zaeler = 5 Then Empfang5 = Asc(x)
45
If Zaeler = 6 Then Empfang6 = Asc(x)
46
If Zaeler = 7 Then Empfang7 = Asc(x)
47
If Zaeler = 8 Then Empfang8 = Asc(x)
48
If Zaeler = 9 Then Empfang9 = Asc(x)
49
If Zaeler = 10 Then Empfang10 = Asc(x)
50
Return

Wäre echt schön wenn jemand von euch, mir eine Lösung für mein Problem 
sagen könnte.

PS das Programm habe ich mit Bascom geschrieben und mit den 
myAVR_ProgTool mit Hilfe vom MySmartUSB light übertragen.

Gruß Thosten

von Luca E. (derlucae98)


Lesenswert?

Sind die Fusebits für den externen Quarz gesetzt? Andere Baudrate 
probiert? Anderen Quarz probiert?

von Thorsten K. (odysseus-dpb)


Lesenswert?

Die Fuse Bits sind Gesetzt und ich habe auch schon einen Doppelt so 
schnellen Quarz probiert. Leider ohne Erfolg.

Die Baudrate kann ich leider nicht ändern, den die ist vom Protokoll her 
festgelegt.

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.