Hallo Community, im Anhang seht ihr eine CAN-Bibliothek, mit der man mit 4 Tastern 4 Led s ansteuern kann. Ich möchte so etwas ähmliches umsetzen und zwar: Ich habe zwei crumb at90 can und möchte einfach nur über can eine nachricht von einem mikrocontroller(1) zum anderen schicken und bei erfolgreicher übertragung eine led an mikrocontroller (2) blinken lassen. kann mir da jemand weiterhelfen? (bin wahrlich nicht der geborene programmierer) es wäre wirklich wichtig. Ich gebe mich auch schon mit denkanstößen zufrieden.
Dann denk gleich mal an die Abschlußwiderstände und zwar an beiden Seiten, egal wie kurz dein Kabel wird! ;-) Hans
ok bitte so schlimm ist mein kenntniswiderstand auch nicht. mir fehlts nur an programmierwissen
:-S Das wollt ich damit nicht ausdrücken. Dann nimmst die Lib ausm Anhang, die hab ich auf den gleichen Boards verwendet. Hans
Hans M. schrieb: > :-S Das wollt ich damit nicht ausdrücken. > > Dann nimmst die Lib ausm Anhang, die hab ich auf den gleichen Boards > verwendet. > > Hans Danke dir ! Und das löst mein Problem?
MArkus S. schrieb: > mir fehlts nur an programmierwissen löst die Lib nicht. Aber mit ein wenig lesen ( http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial )und anschaun der Demo (main.c), hast alles an der Hand um dein Problem selbst zu lösen ;-) Hans
Alles klar. Falls doch jemand den absoluten Tatendrang verspürt sich diesem Problem näher zu widmen, der soll sich gerne melden.
Wo ist das Problem in der /demo/main.c:
1 | while (1) |
2 | {
|
3 | // Check if a new messag was received
|
4 | if (can_check_message()) |
5 | {
|
6 | can_t msg; |
7 | |
8 | // HIER DEIN LED_GEBLINKE EINZUBAUEN???
|
9 | |
10 | // Try to read the message
|
11 | if (can_get_message(&msg)) |
12 | {
|
13 | // If we received a message resend it with a different id
|
14 | msg.id += 10; |
15 | |
16 | // Send the new message
|
17 | can_send_message(&msg); |
18 | }
|
19 | }
|
20 | }
|
Egal, iwer wird dir schon ein Copy/Paste Code schreiben... Hans
Bitteschoen, das hier sollte mit minimalen Anpassungen dein Problem lösen:
1 | #define CAN_RX_LED_MSG 1
|
2 | |
3 | while (1) |
4 | {
|
5 | // Check if a new messag was received
|
6 | if (can_check_message()) |
7 | {
|
8 | can_t msg; |
9 | |
10 | while(CAN_RX_LED_MSG) |
11 | {
|
12 | __asm("nop"); |
13 | }
|
14 | |
15 | // Try to read the message
|
16 | if (can_get_message(&msg)) |
17 | {
|
18 | // If we received a message resend it with a different id
|
19 | msg.id += 10; |
20 | |
21 | // Send the new message
|
22 | can_send_message(&msg); |
23 | }
|
24 | }
|
25 | }
|
Viel Spaß damit :)
Plus eine weitere Frage: Was mache ich mit dem makefile bzw. wie binde ich das ein? Muss es eingebunden werden?
Ich bekomme jetzt nämlich die Fehlermeldung: undefined reference to 'can_init' (und weitere Funktionen). Ich weiß da nicht mehr weiter...
Ich kann's zwar an deinen Fragen ableiten, aber definiere doch bitte mal: "mir fehlts nur an programmierwissen". Es würde denen mit MArkus S. schrieb: > absoluten Tatendrang helfen, dir Denkanstöße auf deinem "Level" zu geben. Gern verweise ich noch einmal auf: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Alternative schau doch mal im bascom-forum.de vorbei. Das sollte deinem Unwillen, sich mit C zu beschäftigen, entgegen kommen ;-) Aber dann wirds mit der Lib nix mehr ( oder kann bascom auch c-files händeln? ) . Hans
Wie gesagt, im moment scheitert es sogar am einbinden des makefiles. Das muss ich ja machen oder?
Hatte jemand mal diesen Fehler: #error only 16 MHz for F_CPU supported! ??
MArkus S. schrieb: > Michael K. schrieb: >> while(CAN_RX_LED_MSG) >> { >> __asm("nop"); >> } > > was bedeutet dieser befehl? Es hält sich hartnäckig die Mär, ohne diesen unsäglich überflüssigen NOP Befehl würde die While-Schleife wegoptimiert werden. Ist natürlich Humbug.
folgendes steht ja in der at90can_private.h: #if F_CPU != 16000000UL #error only 16 MHz for F_CPU supported! #endif in der delay.h steht: # define F_CPU 1000000UL somit kann das ja nicht funktionieren. Könnt ihr mir jetzt nur sagen, ob ich dafür das einbinden des makefiles benötige? denn man kann die delay.h ja nicht abändern ..
MArkus S. schrieb: > folgendes steht ja in der at90can_private.h: > > #if F_CPU != 16000000UL > #error only 16 MHz for F_CPU supported! > #endif > > in der delay.h steht: > > # define F_CPU 1000000UL > > somit kann das ja nicht funktionieren. > Könnt ihr mir jetzt nur sagen, ob ich dafür das einbinden des makefiles > benötige? denn man kann die delay.h ja nicht abändern .. F_CPU sollte NICHT in der delay.h stehen. Mit F_CPU stellst du deine Controllerfrequenz ein. Das sollte man im makefile bzw. in der verwendeten IDE einstellen. Und nicht irgendwo in den Code klatschen. D.h. du musst deinen Controller mit 16 MHz takten lassen und dies dem Compiler mit dem F_CPU Symbol mitteilen. Keine Ahnung ob du ein makefile einbinden musst. Wo schreibst du was zu deiner Entwicklungsumgebung? Im Atmel Studio muss man es nicht. In den meisten IDEs muss man es nicht. Du hast doch sicher schon andere Projekte in deiner Umgebung gemacht oder?
Nein leider nicht. Ist mein erstes projekt mit atmel und auch mit dem at90can
MArkus S. schrieb: > Kann denn niemand beim Einbinden eines Makefiles helfen? Warum willst du unbedingt ein makefile einbinden?
Cyblord -. schrieb: > Warum willst du unbedingt ein makefile einbinden? Weil ich nicht weiß, wie ich sonst die CPU ändern soll. Wo in der IDE soll das gehen?
MArkus S. schrieb: > Cyblord -. schrieb: >> Warum willst du unbedingt ein makefile einbinden? > > Weil ich nicht weiß, wie ich sonst die CPU ändern soll. > Wo in der IDE soll das gehen? Welche nutzt du überhaupt? Atmel Studio? Das macht man einfach in den Projekteinstellungen, dort wo man auch den Controller einstellt. Läuft dein Controller dann auch wirklich mit 16 MHz? Hast du einen entsprechenden Taktgeber/Quarz dran und die Fuses entsprechend eingestellt?
Cyblord -. schrieb: > Welche nutzt du überhaupt? Atmel Studio? Das macht man einfach in den > Projekteinstellungen, dort wo man auch den Controller einstellt. > > Läuft dein Controller dann auch wirklich mit 16 MHz? Hast du einen > entsprechenden Taktgeber/Quarz dran und die Fuses entsprechend > eingestellt? Ja atmel ja mit 16 MHz quarz ist dran fuses?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.