Hallo zusammen, ich habe mehrere Arduinos (ca. 21 Micro 1x DUE) an verschiendenen Positionen und möchte diese miteinander verbinden. Da die Strecken nicht unbedingt so nah beieinander liegen (ges. < 12m) und 22 USB Ports doch etwas viel sind, würde ich diese gerne per Can Bus verbinden. Leider finde ich keine gute oder zumindest für mich verständliche Erklärung (absoluter Anfänger) oder Leitfaden/Beispiele. Kennt sich jemand damit aus bzw kann mir das erklären, oder dabei helfen, das Problem zu lösen. Setup: 21x Arduino Micro sollen mit 1x Due komunizieren. Beispiel: Modul 1: 6x Taster inkl. je eine RGB LED für Rückmeldung, sowie 4 RGB LED für Dekobeleuchtung Taster 1 bis 6 geben die Buchstaben A,B,C,D,E und F aus. Je nachdem, wie der Zustand ist, wechselt die LED von rot auf grün oder umgekehrt. Die erste Taste gibt somit zb nach Betätigung von Taster T1 ein (A) aus und die LED wechselt von Rot auf grün. Tastet man erneut, wird wieder ein (A) ausgegeben und die LED wechselt auf rot zurück. (Schaltung ist korrekt auf einem Board aufgebaut, entprellt und funktioniert) Die Signalkette bei einem Tastendruck wäre dann beispielsweise: Taster T1 wird gedrückt vom Arduino Micro (AM1) wird ein Signal zur LED gesendet, dass diese von der aktuellen, zur wechselnden Farbe wechseln soll gleichzeitig vom Micro (AM1) soll ein Signal über Can Bus zum Due (AD1) gesendet werden vom Due (AD1) geht dann das Signal über das USB Kabel zum PC auf dem PC wird dann ein A (Keyboardsimulation) ausgegeben Die Signalkette bei einem Farbwechsel der Deko RGB LEDs wäre dann beispielsweise: von einer Software wird ein Wert X ausgegeben dieser wird per USB zum Due (AD1) gesendet vom Due (AD1) soll ein Signal über Can Bus zu den Micro´s (AM1 bis AM20) gesendet werden die Micro´s (AM1 bis AM20) geben dann den Wert an die RGB LEDS aus, welche dann ihre Farbe ändern Ziel: Das gesamte System soll, wie oben beschrieben, die Signale und Abfragen von (Micro und Due) über Can Bus ausgeben, beziehungsweise Senden und Empfangen. Lg Dee
Hallo, ich glaube nicht, dass dafür der CAN-Bus das richtige Übertragungsmedium ist, denn du brauchst für jeden Arduino noch einen CAN-Controller. Das Protokoll ist für diesen Micro zu aufwändig. Schau doch mal, ob es nicht auch mit RS422/RS485 zu lösen wäre und auf der Kommandoebene reine ASCII-Texte ausreichen? Servus, Helmut.
Ein CAN ist für diese Aufgabe genau richtig, nur: der AVR kann direkt kein CAN. Dafür gibt's aber Shields, bzw. ziemlich sicher auch Boards, und der dort enthaltene Chip (z.B. MCP2515) kümmert sich ganz allein um das Protokoll. Damit ist Quittierung, Codierung, Fehlerkontrolle, Kollisionserkennung und Vorfilterung in Hardware erledigt, der AVR muss nur noch Nachrichten erzeugen und auswerten. Da CAN ja Events mit bis zu 8 Byte Nutzlast verschickt, wird die Geschichte soar relativ einfach.
Hallo, Das Problem ist, dass in einer vorangegangenen Diskussion immer wieder der Arduino Mirco, der Due und die MCP 2515 als am sinnvollsten gesehen wurden. Nach einer etwas längeren Pause habe ich aktuell wieder damit angefangen und zum Preis von 4,50 für ein Arduino Micro + MCP2515 ist es im verhältnis recht Preiswert. Aber danke für dein versuch. lg
Hallo Jens, dein ....soar relativ einfach.... ist hoffentlich das Zeichen, dass du dich damit auskennst und mir genau verklickern kannst, wie die Sch.... aussehen muss bzw ich das hin bekomme. lg
Den MCP hab ich noch nicht benutzt, sondern PICs mit eingebautem CAN. Aber es gibt Shields und Libraries für Arduino, da sollte es auch nicht so schwer sein. Im Prinzip musst du nur eine Nachricht "komponieren" und dem Chip geben, der kümmert sich um den Versand. Dazu gibt es einen Status, den du abfragen musst, der sagt dir Fehler und Erfolg, außerdem ob Post für dich da ist. Normalerweise hat der CAN-controller auch Filter, damit kannst du bestimmte Events ignorieren oder freigeben, und der Controller gibt einen Interrupt ab wenn eine Nachricht angekommen ist auf die der Filter passt. Der AVR kann sich also voll und ganz darauf konzentrieren, Nachrichten zu entziffern bzw. zu schreiben, der CC macht die Post. Was du in die Payload schreibst und welche IDs welche Farbe oder Taste sind ist völlig deiner Fantasie überlassen. Das ist das eigentliche Problem. CAN wird mit so einem Controller vom Umfang eher wie ein Display oder eine RTC. Das hat mit einer Schnittstelle nicht viel zu tun, da Fehlerbehandlung und einiges Mehr in der Hardware des Controllers laufen. Also: 2 Shields kaufen, verstrippen und spielen. Dann kommst du schnell dahinter.
Die Module sollten in den nächsten Wochen kommen. Die Arudino Skatche habe ich ja soweit zusammen, aber ich habe kein Plan wie ich das mit dem Can hin bekommen soll. Bin, wenn man es so will, absoluter Neuling auf der Micro Controller Bereich und habe mir die ersten 19 der benötigten 22 Skatche zusammen basteln können (funktioniert auch alles im "solo" Betrieb per USB). Aktuell hängt es noch bei 3 Punkten under anderem halt dem Can BUS. Ich verstehe es einfach nicht. Was ein Bus ist, ist mir klar und so aber der Skatch, wie ich jettzt was schreiben muss auf Controller 1 2 3 usw - kein Plan.
- Setze Filter auf Nachricht mt ID 1, 2 & 3, das sind R, G und B - Warte bis Filter IRQ auslöst - Lies Nachricht -- ID=1? Dann R = Payload -- ID=2? Dann G = Payload -- ID=3? Dann B = Payload Das Sendeende funzt ähnlich: - Bekomme RGB - Erzeuge Nachricht mit ID 1 Payload = R - Warte bis abgeschickt - Erzeuge Nachricht mit ID 2 Payload = G - ...
Könntest du mir anhand von dem nachfolgendem Skatch (für den Arduino Mirco 1 bis 8)das mal zeigen. Der andere Skatch vom DUE ist noch nicht angefangen. Eine Besonderheit wäre noch, dass es durch eine IF/ELSE Abfrage einmal Solo und einmal über CAN BUS betrieben werden soll. Sprich, wenn der Schalter offen ist, wird es "Solo" betrieben. Wenn der Schalter geschlossen ist, wird es im "CAN-Modus" betrieben.
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 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | |
221 | |
222 | |
223 | |
224 | |
225 | |
226 | |
227 | |
228 | |
229 | |
230 | |
231 | |
232 | |
233 | |
234 | |
235 | |
236 | |
237 | |
238 | |
239 | |
240 | |
241 | |
242 | |
243 | |
244 | |
245 | |
246 | |
247 | |
248 | |
249 | |
250 | |
251 | |
252 | |
253 | |
254 | |
255 | |
256 | |
257 | |
258 | |
259 | |
260 | |
261 | |
262 | |
263 | |
264 | |
265 | |
266 | |
267 | |
268 | |
269 | |
270 | |
271 | |
272 | |
273 | |
274 | |
275 | |
276 | |
277 | |
278 | |
279 | |
280 | |
281 | |
282 | |
283 | |
284 | |
285 | |
286 | |
287 | |
288 | |
289 | |
290 | |
Und bevor ich es vergesse, das ist der vorläufige und nicht der Cleancode!
Das musst du ja gar nicht unterscheiden. Wenn eine CAN-Nachricht kommt, kann die ja "Taste gedrückt" bedeuten und in den gleichen IFs abgefragt werden. Wenn du dann einen CAN-Node hast, bestückst du die Taster nicht, an einem Taster-node ist eben kein CAN-Controller, das Programm merkt das im setup() und ignoriert den niemals kommenden INT. Wenn du magst kann eine Node gleichzeitig den Zustand ja auch wieder absenden, so das die Tasten aller Nodes wie parallel geschaltet wirken. Dazu müsstest du nur den Teil der Tastenerkennung und der eigentlichen Aktion teilen, die Aktionsfunktion kannst du dann aus der Tastenerkennung und aus der CAN-Erkennung aufrufen, schon funzt beides parallel. Die letzte CAN-Nachricht merken und wenn schonmal bekommen ignorieren. Ablauf dann - Taste gedrückt? Dann Farbe setzen und CAN verschicken, Nachricht merken - CAN bekommen? Dann Nachricht prüfen. Anders wie eben: Farbe setzen, sonst nix machen Nur mal schnell gegoogelt: https://github.com/autowp/arduino-mcp2515 Einfach mal einlesen und mit 2 Nodes spielen, dann kommst du drauf.
Nein... ich glaube du hast mich falsch verstanden, bzw. ich habe es etwas zu ungenau geschrieben. Einen Schalter, der per Mechanismus mit einer Klappe verbunden ist deckt entweder dem CAN BUS PORT (in Position 1) oder den USB Port (in Position 2)ab. 2x Betriebsmodis: Modi 1 - der Schalter steht auf offen (Position 1) - die Klappe verdeckt den CAN BUS Port - das USB Kabel kann angesteckt werden - der Arduino wird über USB betrieben Modi 2 - der Schalter steht auf geschlossen (Position 2) - die Klappe verdeckt den USB Port - das CAN BUS Kabel kann angesteckt werden - der Arduino wird über CAN BUS betrieben Heisst zb: If Klemme X Low ..... Modi 1 /ELSE..... Modi 2
Du kommst aus der SPS- Richtung? hier findet man eine anleitung zu can mit dem MCP2515 https://github.com/autowp/arduino-mcp2515 Schau dir auch mal C-grundlagen wie arrays, funktionen und for-schleifen an. Damit kannst du deinen code auf ca. 40 zeilen kürzen und somit übersichtlicher und verständlicher machen.
Ja hatte mal was mit SPS zu tun aber das liegt schon jahre zurück. Ja den Link kenne ich, aber ich komm da einfach nicht rein. Und wie schon gesagt, es ist der vorläufige nicht der Clearcode. Der nachfolgende ist der Clearcode, aber ich weis noch nicht ob er richtig ist bzw. funktioniert, da ich den gerade nicht testen kann.
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 | |
Gast
#5727368
Hi Nur, damit's hier keine Unstimmigkeiten gibt - Cross-Postings auf - http://forum.arduino.cc/index.php?topic=595441.msg4044647 - arduino-forum.de, dort ist der Link auf arduino.cc aber ungültig ;) @mc-big-d Viel Spaß weiterhin, die Leute an sämtlichen Fronten zu verarschen ...
Geh den Leuten nicht auf den Sack und heul wo anders rum. Wenigstens kümmert er sich um eine Lösung und teilt seine Infos. Aber wegen so vollpfosten wie dir Forenrambo werden es immer weniger die ihr Wissen teilen. Wenn du nichts sinnvolles dazu beitragen willst, verschone uns doch Bitte mit deinen Posts. @D. Z. Fang erstmal an mit den ersten Schritten. Besorg dir die MCP2515 und lade dir den Beispiel Scatch. Dann wird es nach und nach auch Sinn ergeben. PS Nicht mein Original Account da mir diese Kinder sonst auf den nerv gehen
Danke dir ja kp was der hat naja egal.... Ja, ich bekomme die Tage erst die MCP´s, dann werde ich es mal mit den Beispielcodes versuchen. Hab gehofft, dass ich es vorher verstehe und die Skatche vorher schon schreiben kann, aber es klappt nicht so.
Gast
#5728225
RS485 -> SP485 <- Bauteil gibts auch als THT für einen Apfel und ein Ei ;) Mach die Baudrate nicht so hoch, sonst hast du eine hohe Bitfehlerrate mit den bei Arduino üblichen Quarzen. Gruß
Die Bauteile an sich habe ich alle schon bzw sind schon bestellt. Den Scatch schreiben ist eher das Problem. Aber trotzdem danke für die Info.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.