CAN Speed nicht ausreichend? Kategorie: CAN-Bus (von Newbie - 4.09.2012 8:33) | ||
| ||
Ausgangslage: Mehrere Geräte senden über CAN, es sollen mehr als 15 ID's verwertet werden. Gruppen: 0x300-0x307, 0x0C0-0x0C4, 0x0D0-0x0D8 z.B. also kann nicht jeder ID ein exklusiver Kanal zugeordnet werden. Wenn ich exklusiv jedem Kanal einzeln zuordne, funktioniert alles tiptop (Alle LED's blinken unisono). (Sendefrequenz: 1Sek, Zeit zwischen zwei ID's: 4ms) mit can.init(4,0x7FF,0x000); thread test { byte temp[8]; can.expect(0,0x305); // Erwarte auf Kanal 0, can.expect(1,0x307); // Erwarte auf Kanal 1 can.expect(2,0x300); // Inv Power can.expect(3,0x301); // Grid Power can.expect(4,0x304); // Frequency loop { if can.rxd(0) { can.get(0,temp); stports.togLED(0x01); } if can.rxd(1) { can.get(1,temp); stports.togLED(0x02); } if can.rxd(2) { can.get(2,temp); stports.togLED(0x03); } if can.rxd(3) { can.get(3,temp); stports.togLED(0x04); } if can.rxd(4) { can.get(4,temp); stports.togLED(0x05); } } } Wenn ich nun versuche, mehrere in einem Kanal zuzuweisen, um Kanäle zu sparen, dann blinken nicht mehr alle Unisono - es gehen Frames verloren.: can.init(4,0x7F8,0x000); //Letzte 8 Bites egal. Somit 0x300-0x307 im selben Postfach thread test2 { byte temp[8]; int adress; can.expect(0,0x305); // Erwarte auf Kanal 0, letzten 8 Bites egal, da Global Mask entsprechend. loop { wait can.rxd(0); //Neue Daten? { adress=can.getID(0); //Welche Adresse? can.get(0,temp); //Daten auslesen, Eingangskanal leeren if adress==0x300 stports.togLED(0x01); if adress==0x301 stports.togLED(0x02); if adress==0x304 stports.togLED(0x03); if adress==0x305 stports.togLED(0x04); if adress==0x307 stports.togLED(0x05); }//if zu }//Loop zu } Ist was ich erreichen will nicht möglich? Oder gibt es einen besseren Ansatz? Danke für eure Hilfe! Mike | ||
Antwort schreiben Antworten: Re: CAN Speed nicht ausreichend? (von André H. - 7.09.2012 10:51) |