Hi, wir haben bei der Uni ein Projekt mit zwei Dice-Kits. Wir senden eine Nachricht mit einer Hexadezimalen Zahl via CAN aif ein zweites Dice-Kit von Fujitsu. Jedoch bekommen wir es nicht hin auf diese Hexadezimale Zahl zuzugreifen. Meine Frage ist nun, wie können wir die Nachricht auslesen und somit unsere if-Funktion welche diese Zahl als Startvariable hat starten. Z.B. hschicken wir eine 0x01 als Startvariable für unsere AC-Messung und wollen doe Funktion if(0x01) dann das Teilprogramm starten. Hoffe Ihr könnt mir helfen. Gruß Schmelz
Schmelz schrieb: > Hoffe Ihr könnt mir helfen. Na ja, aber diesen Link kennt Ihr schon? http://mcu.emea.fujitsu.com/mcu_tool/detail/DICE-KIT.htm Gruss Andi
Hi Andi, ja die Seite haben wir uns auch schon zu gemüte geführt. Jedoch wenn wir das mit zum Beispiel der Switch case Funktion machen, startet er nicht die Teilprogramme weil er die Zahlen die wir Senden nicht erkennt, Ich weiß nicht ob es daran liegt, dass er die in einem extra Register abspeichert, aufjedenfall springt er nicht in die Teilprogramme
H Schmelz schrieb: > Jedoch wenn wir > das mit zum Beispiel der Switch case Funktion machen, startet er nicht > die Teilprogramme weil er die Zahlen die wir Senden nicht erkennt, > Ich weiß nicht ob es daran liegt, dass er die in einem extra Register > abspeichert, aufjedenfall springt er nicht in die Teilprogramme Hallo; Meine Fragen: 1. "Ich weiß nicht ob es daran liegt, dass er die in einem extra Register > abspeichert" Die Frage lautet also zunächst einmal: Funktioniert der CAN Bus ? Wird die Nachricht gesendet und auch empfangen ?? Wenn ich 1. richtig verstanden habe wird offenbar etwas empfangen. Greift doch mal "auf dieses "Extra Register zu und prüft ob ihr dort den Wert wieder findet. Wenn der Wert dem Wert der gesendeten Nachricht / Zahl entspricht bräuchtet ihr diese doch nur in eine Variable zu kopieren und diese in eure Bedingung verwenden ?? Hintergrund (nicht euer Controller): Beispielsweise landen die Nachrichten bei der CCAN Übetragung bei STM32 Controllern in einem FIFO. Ausserdem wird beim Empfang ein Interupt ausgelöst. Nach dem Erkennen des Interrupt / Ereigniss "Sie haben Post". Brache ich dann "nur" in den "Briefkasten" zu sehen. Hoffe das hilft euch etwas weiter. Bei grundlegenden Problemen bei der CAn Bus übetragung hilft hier nur ein Analyser.
Schmelz schrieb: > Hoffe Ihr könnt mir helfen. Teile und herrsche. 1. Übertrage eine (1) CAN-Message 2. Werte diese Message aus Ich vermute überaus sehr, dass es hier schon bei 1. klemmt. Man könnte das evtl. am nicht geposteten Code abschätzen... > unsere if-Funktion > Switch case Funktion Du solltest mal in einem C-Buch (das ist vermutlich die Programmiersprache, die verwendet werden soll) ganz vorn nachlesen, was eine Funktion und was eine Anweisung ist... > bekommen wir es nicht hin auf diese Hexadezimale Zahl zuzugreifen. Es gibt keine "hexadezimalen Zahlen" im uC. Es gibt dort nur binäre Vektoren (Speicherzellen, Register, Stati, Kommandos,...) die man zur besseren Lesbarkeit statt binär auch hexadezimal oder dezimal darstellen kann. > bei der Uni Das gibt mir jetzt wirklich zu denken... :-o
Hallo Schmelz, Problem gelöst? So ganz ist mir nicht klar, wo dein Problem ist. Es gibt ein Beispiel fon Fujitsu, welches sehr schön zum Evaluieren des CAN auf dem DICE-Kit geeignet ist: dicekit_can_uart_async-v30.zip Gefunden auf Andi's Seitenempfehlung: http://mcu.emea.fujitsu.com/mcu_tool/detail/DICE-KIT.htm -> DICE-KIT - SOFTWARE EXAMPLES Ich hab's dir angehängt ;-) Wenn Du Interrupts einschaltest, wird __interrupt void IRQ_CANRX (void) aufgerufen. Dort
1 | |
2 | GetCanData (buffer, CAN_Receive_Data); /* Readout Message Buffer */ |
und Du hast díe Empfangsdaten iin CAN_Receive_Data[] stehen. Die ID in CAN_Receive_ID. Du könntest also zum Beispiel sowas machen:
1 | if (CAN_Receive_Data[1] == 0x01 |
2 | {
|
3 | Teilprogramm1(); |
4 | }
|
5 | |
6 | if (CAN_Receive_Data[1] == 0x02 |
7 | {
|
8 | Teilprogramm2(); |
9 | }
|
ginge natürlich auch mit einer switch Anweisung:
1 | switch (CAN_Receive_Data[1]) |
2 | {
|
3 | case 0x01: Teilprogramm1(); |
4 | break; |
5 | |
6 | case 0x02: Teilprogramm2(); |
7 | break; |
8 | |
9 | default: ... Teilprogramm_unbekannt(); |
10 | |
11 | }
|
Okay, in der Interrupt-Routine sollte das vielleicht nicht gerade passieren, aber das Prinzip sollte klar sein ... Sind dir denn die Prinzipien von CAN klar, was IDs sind, und wie CAN Nachrichten aussehen? Poste doch mal dein Projekt, dann verstehen wir vielleicht besser was Du meinst und wo das Problem liegt. Ich habe übrigens auch ein DICE-Kit ... und für einfache Dinge ist das ganz gut brauchbar und einfuch zu bedienen. Und die Entwicklungssoftware bei Fujitsu ist kostenlos. Allerdings ist der Core etwas veraltet, und auch Fujitsu setzt mitlerweile auf ARM Cortex-M3. Aber für einfache Steuerung und Lehrzwecke ist das DICE-Kit ein schönes "Spielzeug" Gruß, Mic Roller
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.