Forum: Mikrocontroller und Digitale Elektronik Über 2 AT90CAN LED steuern


von MArkus S. (markus1991)


Angehängte Dateien:

Lesenswert?

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.

von Hans M. (Gast)


Lesenswert?

Dann denk gleich mal an die Abschlußwiderstände und zwar an beiden 
Seiten, egal wie kurz dein Kabel wird! ;-)


Hans

von MArkus S. (markus1991)


Lesenswert?

ok bitte so schlimm ist mein kenntniswiderstand auch nicht.
mir fehlts nur an programmierwissen

von Hans M. (Gast)


Angehängte Dateien:

Lesenswert?

:-S Das wollt ich damit nicht ausdrücken.

Dann nimmst die Lib ausm Anhang, die hab ich auf den gleichen Boards 
verwendet.

Hans

von MArkus S. (markus1991)


Lesenswert?

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?

von Hans M. (Gast)


Lesenswert?

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

von MArkus S. (markus1991)


Lesenswert?

Alles klar.

Falls doch jemand den absoluten Tatendrang verspürt sich diesem Problem 
näher zu widmen, der soll sich gerne melden.

von Hans M. (Gast)


Lesenswert?

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

von Michael K. (damichl)


Lesenswert?

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 :)

von MArkus S. (markus1991)


Lesenswert?

Michael K. schrieb:
> while(CAN_RX_LED_MSG)
>       {
>          __asm("nop");
>       }

was bedeutet dieser befehl?

von MArkus S. (markus1991)


Lesenswert?

Plus eine weitere Frage:

Was mache ich mit dem makefile bzw. wie binde ich das ein? Muss es 
eingebunden werden?

von MArkus S. (markus1991)


Lesenswert?

Ich bekomme jetzt nämlich die Fehlermeldung:
undefined reference to 'can_init' (und weitere Funktionen).

Ich weiß da nicht mehr weiter...

von Hans M. (Gast)


Lesenswert?

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

von MArkus S. (markus1991)


Lesenswert?

Wie gesagt,

im moment scheitert es sogar am einbinden des makefiles.
Das muss ich ja machen oder?

von MArkus S. (markus1991)


Lesenswert?

Hatte jemand mal diesen Fehler:

#error  only 16 MHz for F_CPU supported!

??

von Michael K. (damichl)


Lesenswert?

nein, hatte noch niemand bis jetzt.

von Cyblord -. (cyblord)


Lesenswert?

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.

von MArkus S. (markus1991)


Lesenswert?

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 ..

von Cyblord -. (cyblord)


Lesenswert?

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?

von MArkus S. (markus1991)


Lesenswert?

Nein leider nicht. Ist mein erstes projekt mit atmel und auch mit dem 
at90can

von MArkus S. (markus1991)


Lesenswert?

Kann denn niemand beim Einbinden eines Makefiles helfen?

von Cyblord -. (cyblord)


Lesenswert?

MArkus S. schrieb:
> Kann denn niemand beim Einbinden eines Makefiles helfen?

Warum willst du unbedingt ein makefile einbinden?

von MArkus S. (markus1991)


Lesenswert?

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?

von Cyblord -. (cyblord)


Lesenswert?

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?

von MArkus S. (markus1991)


Lesenswert?

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
Noch kein Account? Hier anmelden.