Gast
#1005443
Hallo allerseits! Ich versuche zur zeit ein Kommunikationsprotokoll zwischen ATmega128 und ATMega8 aufzubauen. Der Master schick zuerst ein CMDByte an den Slave, dieser entscheidet was demnächst geschieht. Wenn der MSBit(R/W-Bit) im CMDByte gesetzt ist, dann sollen die Daten gelesen wereden, d.h. es kommen nach dem CMDByte keine Daten mehr an. Slave wertet die untersten 5Bits aus dem CMDByte aus und entscheidet je nach Befehl, welche Daten in den Sendepuffer gelegt werden sollen. Anschließend teilt er dem Master mit Hilfe des BUSY Signals mit, dass er die Daten jetzt abholen kann. Darauf hin schickt Master die entsprechende anzahl der Dummy-Bytes zum Slave. Im Schreibmodus soll Master die Möglichkeit haben, entweder sehr kurze Befehle an Slave (nur den Befehlsbyte(CMDByte)), oder nach dem CMDByte auch weitere Bytes mit dazugehörigen Parametern senden zu können. CMDByte MSB [RWBit|X|X|CMDBit4|CMDBit3|CMDBit2|CMDBit1|CMDBit0] Pinbelegung________ ATMega182 ATMega8 MISO <======= MISO MOSI =======> MOSI SCK ========> SCK /SS ========> /SS PE7 <======== PB1(BUSY) Nun zu meinem Problem... Die Hardware funktioniert schon, die Übertragung funktioniert in beiden Richtungen. Ich kann mehrere Bytes aus dem voreingestellten Puffer lesen. Auch wenn ich zuerst ein CMDByte mit dem Schreibbefehl sende um den Puffer zu manipulieren, klappt es ebenfalls, denn ich finde die Zahl auch in den gelesenen Daten wieder. Nun, wenn ich jetzt aber beim Schreibvorgang auch paar Bytes hinterher sende und anschließend versuche die Daten aus dem Puffer zu lesen, erhalte nur 0 0 0 0 anstatt 9 33 1 1. Hat jemand schon so etwas gemacht? Wie könnte man das ganze noch verbessern (Programmiertechnisch)? Da ich mich noch nicht soo gut in Sachen C auskenne, bitte ich um Hilfe.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |