Hallo, ich ich hab erstmal 2boards(selbst gemacht) jeweils mit dem AT90CAN32 und den tranceiver MCP2551 und die 120 Ohm widerstand Bus-Terminierung plus Schneckschnak für die Schaltung, programiert wird durch ISP. auf dem ersten Board sind 8 Schalter(soll der sender sein), und auf dem 2.Board sind 8 LED's(Empfänger) an jeweils ein Port von dem µC angeschlossen. ich hab zuerst ein kommunikation durch UART durchgeführt und ich konnte die daten zwischen die 2 µCs schicken, und es funktioniert. jetzt zum CAN-Bus, ich hab mich grundsätzlich auf die Dokumentation von marko Glietsch hier beim codesammlung basiert, ich habe die register initialisiert und ich konnte im simulator schauen dass sie auch initialisert werden konnten. meine frage ist: soll ich für jedes µC ein anders programm schreiben, das heißt für den sender ein C Code schreiben wo ich das mode TRANSMIT_DATA aktiviere nach der Initialisierung der Register und für den empfänger ein anders C Code schreibe mit dem mode RECEIV_DATA... soll ich einfach die gleiche ID und ID maske überall gleich setzen??? kann mir jemand helfen mit einem tipp oder informationen wie man der can-bus zwischen 2 knoten (2µC) programmieren kann...die theorie über can-bus habe ich mehrmals durchgelesen, ich stehe allerdings immer noch auf dem schlauch... es muss kein fertigs brot sein... aber ich freue mich auf jede hilfe. mfg
Ja, sicher, Du brauchst Code zum Senden und Code zum Empfangen. Am Einfachsten geht das indem Du verschiedenen MOB's zum Senden und Empfangen initialisierst. Das kann dann auch der gleich Code auf beiden Controllern sein, zum Testen jedenfalls, die können aber auch gleichzeitig senden, gibt halt nur einen Fehler auf dem Bus. Wobei, das Empfangen habe ich im Interrupt gemacht, das kann dann "irgendwann" passieren. Das Senden mache ich im "Scheduler" um zwei Botschaften zyklisch jeweils einmal alle 100ms absetzen zu können. Doppelt-Blind ist garnicht gut übrigens. Ein Teil wie das Hitex-CAN-USB Devboard mit dem man vom PC aus Botschaften senden und empfangen kann ist schon sehr hilfreich...
Hallo Erri, > auf dem ersten Board sind 8 Schalter(soll der sender sein), > auf dem 2.Board sind 8 LED's(Empfänger) ....angeschlossen. > soll ich für jedes µC ein anders programm schreiben kann man so machen, muss man aber nicht..... Du kannst das selbe Programm für beide nehmen: 1. Werte die Schalter aus und sende diese z. B. nur über den CAN, wenn eine Änderung stattfindet. 2. werte empfangene Botschaften aus und steuere damit die LED An dem Board, dass keine Schalter hat, wird auch nichts gesendet und bei dem Board, dass keine LED hat, nichts angezeigt. > soll ich einfach die gleiche ID und ID maske überall gleich setzen??? Sendest Du z. B. die Taster in der ID "0x100", so muss diese auf der Empfangsseite auch durch den Akzeptanzfilter gelangen..... Gruss Otto
vielen dank für die schnelle Antwort ich hab leider gerade die Hardware nicht hier und mit dem simulator kann ich leider nicht viel testen... ich hab noch eine frage, da ich leider kein Devboard mit dem man vom PC aus daten sendet, und das wahrscheinlich auch nicht zur verfügung gestellt bekomme, wegen kosten und zeit gründen, gibt da irgend eine möglichkeit zu kontrollieren ob da überhaupt was tut... ich hab versucht daten zu senden und mit dem Ozcylloskop sowohl an den ausgangs pins CAN-H und CAN-Low von dem MCP2551 als auch TXCAN von dem µC zu sehen ob da was passiert, das ergebnis war leider negativ... frage: wie kann ich testen ob meine Hardware funktioniert. besonders MCP2551? ich freue mich falls jemand da ein tipp hat, das wird mir unheimlich weiter helfen. viele Grüße
> ich hab versucht daten zu senden und mit dem Oszilloskop > sowohl an den Ausgangspins CAN-H und CAN-Low von dem > MCP2551 als auch TXCAN von dem µC zu sehen ob > da was passiert, das ergebnis war leider negativ... > frage: wie kann ich testen ob meine Hardware funktioniert. besonders > MCP2551? An RxD gegen GND und TxD gegeb GBD sowie zwischen CANL und CANH solltest Du mit dem Scope Signale messen können. Wenn Du überall nichts misst, hast Du den CAN senderseitig noch nicht (vollständig) initialisiert oder programmiert. Wenn Du einen preiswerten Anschluss für CAN an den PC suchst, kauf die vom Elektronikladen (www.elmicro.de) den CAN232. Gruss Otto
Hallo Otto, dass mein Programm nicht vollständig ist, kann ich leider nicht ausschliessen, da ich das zum ersten mal mache, und leider auf den Datenblätter von dem AT90can gibt es kein beispiel C-Code zum initialisieren von CAN... so habe ich mich einfach auf paar beispiele von hier verlassen. und so habe ich die Baudrate festgelegt (bei 8Mhz 1Mbit/s) die interrupts initialisisert, Mob, ID, IDMaske,... also ich hab folgende Funktionen in meinem Code. void CAN_setBaudrate(u16 baud); //REgister: CANBT1-3 void CAN_setInterrupt(u8 mode); //Register: CANGIE void CAN_getMOb(u8 MOb); //Reg.: CANPAGE void CAN_setIDMask(u32 idm); //Reg: CANIDM1-4 void CAN_setID(u32 id); //'' : CANIDT1-4 u32 CAN_getID(void); void CAN_setMode(u8 mode); u8 CAN_getMode(void); void CAN_setData(u8* data); CAN_message CAN_getData(void); void CAN_setMObInterrupt(u8 objekt); u8 CAN_getMObInterrupt(void); void CAN_ClrMObInterrupt(u8 objekt); void CAN_Init(u16 baud, u8 intmode); void CAN_EnableMOb(u8 objekt, u8 mode, CAN_message msg); void CAN_DisableMOb(u8 objekt); void CAN_SendData(u8 Mob, u8*data); void CAN_SendRemote(u8 MOb); wenn du willst kann ich dir mein Code zumailen... nur ich werde mich schämen es hier zu veröffentlichen, ich bin kein profi und meine programmierungskunst ist leider sehr beschränkt. aber ich bin für jede hilfe dankbar.
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.