Hallo
Ich ärger mich heut schon den ganzen Tag mit der Software Uart rum. Ich
möchte mit meinem Programm Daten via RS232 vom PC empfangen sowie
auswerten und danach kommandos als String über die Software-Uart an den
zweiten ATMega8 schicken. Das senden klappt dabei problemlos, die
Zeichen werden via SoftwareUART übertragen. Der Slave scheint auch etwas
zu empfangen.
Das Problem welches ich nun habe ist jedoch das von der übertragenen
Zeichenkette scheinbare kein Byte außer <CR> ankommt. Habe mal nen HTerm
schirm rangehangen zum nachvollziehen. Gesendet wurde immer "#001adr".
Der code des Masters:
1 | $regfile = "m8def.dat"
|
2 | $crystal = 8000000
|
3 | $hwstack = 100
|
4 | $swstack = 100
|
5 | $framesize = 100
|
6 | $baud = 9600
|
7 |
|
8 | Declare Sub Serial0charmatch()
|
9 | Declare Sub Antwortavr()
|
10 | Declare Sub Cmdadr()
|
11 |
|
12 | '########[ Variables ]#####################################################
|
13 | Dim New_command As String * 10 , A As String * 3 , Command As String * 3
|
14 | Dim Antwort As String * 10
|
15 |
|
16 | '########[ Constants ]#####################################################
|
17 | Const Adresse = "001"
|
18 |
|
19 | '########[ Hardware Configuration ]########################################
|
20 | Config Portd.4 = Output
|
21 | Senden Alias Portd.4
|
22 | Config Serialin = Buffered , Size = 10 , Bytematch = 13
|
23 |
|
24 | '########[ Initialisation ]################################################
|
25 | Open "comd.6:9600,8,N,1" For Output As #1 'TXD
|
26 | Open "comd.7:9600,8,N,1" For Input As #2 'RXD
|
27 | Enable Interrupts
|
28 | Senden = 0
|
29 |
|
30 | '########[ Main Code ]#####################################################
|
31 | Do
|
32 | !nop
|
33 | Loop
|
34 | End
|
35 |
|
36 | '########[ Subroutines ]###################################################
|
37 | Sub Serial0charmatch()
|
38 | Input New_command Noecho
|
39 | Clear Serialin
|
40 | If Instr(new_command , "#") = 1 Then 'Suchen nach Startzeichen (#)
|
41 | A = Mid(new_command , 2 , 3) 'Abtrennen der Adresse
|
42 | Command = Mid(new_command , 5 , 3) 'Abtrennen des Befehls
|
43 | Command = Ucase(command) 'Umwandeln in Großbuchstaben
|
44 |
|
45 | Select Case A
|
46 | Case Adresse
|
47 | Select Case Command 'Selektion nach kommando
|
48 | Case "ADR"
|
49 | Call Cmdadr
|
50 | Case Else
|
51 | Print "Unbekanntes Kommando"
|
52 | End Select
|
53 | Case Else
|
54 | Print "Unbekannte Adresse"
|
55 | End Select
|
56 |
|
57 | A = "" : Command = ""
|
58 |
|
59 | Else
|
60 | New_command = ""
|
61 |
|
62 | End If
|
63 | End Sub
|
64 |
|
65 |
|
66 | Sub Cmdadr()
|
67 | Senden = 1
|
68 | Print #1 , A + Command
|
69 | Print "gesendet: " ; A + Command
|
70 | Senden = 0
|
71 | Call Antwortavr
|
72 | End Sub
|
73 |
|
74 |
|
75 | Sub Antwortavr()
|
76 | Input #2 , Antwort
|
77 | Print "Antwort von AVR: " ; Antwort 'Antwort von AVR an RS232 übergeben
|
78 | End Sub
|
und hier der Code des Slave:
1 | $regfile = "m8def.dat"
|
2 | $crystal = 8000000
|
3 | $hwstack = 100
|
4 | $swstack = 100
|
5 | $framesize = 100
|
6 | $baud = 9600
|
7 |
|
8 | Declare Sub Serial0charmatch()
|
9 |
|
10 | '########[ Variables ]#####################################################
|
11 | Dim New_command As String * 10
|
12 |
|
13 | '########[ Hardware Configuration ]########################################
|
14 | Config Serialin = Buffered , Size = 10 , Bytematch = 13
|
15 | Config Portb.0 = Output
|
16 | Enable Interrupts
|
17 |
|
18 | '########[ Main Code ]#####################################################
|
19 | Do
|
20 | !nop
|
21 | Loop
|
22 | End
|
23 |
|
24 | '########[ Subroutines ]###################################################
|
25 | Sub Serial0charmatch()
|
26 | Toggle Portb.0 'anzeigen ob etwas empfangen wurde
|
27 | Waitms 100
|
28 | Input New_command Noecho 'Einlesen in new_command
|
29 |
|
30 | Print "Empfangen: " ; New_command 'Ausgabe zur kontrolle
|
31 |
|
32 | End Sub
|
Der Printbefehl des slave liefert immer nur "Empfangen: " zurück.
Kommentiere ich die waitms 100 zeile aus, erhalte ich gar keine Antwort.
Warum enthält er nicht auch die entsprechenden Kommendos? Was habe ich
falsch konfiguriert? Kann mir bitte jemand helfen?