Liste der Anhänge anzeigen (Anzahl: 1)
CAN-Bus
Hallo Forum,
ich möchte euch mal das zeigen woran ich im Moment und in naher Zukunft noch arbeiten möchte.
Und zwar handelt es sich um einen CAN-Bus mit einem Mega32, einem MCP2515 CAN-Controller und einem MCP2551 CAN Transreciever.
Das Internet gab leider nicht all zu viele Informationen her und dementsprechend ist sehr viel davon selbst erarbeitet (nochmals danke an den Verfasser dieses C-Tutorials http://www.kreatives-chaos.com/artik...cp2515#receive).
Die erste Idee zu dem Projekt kam mir beim lesen eines Buchs über den CAN-Bus vom Elektorverlag.
Da ich mich etwas mit dem Bus beschäftigen wollte, habe ich dazu eine kleine Platine entworfen.
Leider hat die Version 0 meiner Platine zwei kleine Fehler (Testpin des FT232 ist nicht mit GND verbunden und deswegen ist es Glück ob der funktioniert. Aber das Problem lässt sich mit einer kleinen Lötbrücke lösen und die Rx und Tx LEDs sind falsch angeschlossen.
Den Schaltplan des CAN-Knotens habe ich mal als Anhang angehängt.
Der Bus sieht im Moment so aus, dass ich einen fertig bestückten CAN-Knoten habe und ein RN-Control + Steckbrettaufbau.
RN-Control + MCP2515 und MCP2551:
Bild hier
CAN-Knoten (selbst entworfen und bestückt):
Bild hier
Das RN-Control sendet im Sekundentakt eine sich ständig erhöhende Zahl und der CAN-Knoten empfängt diese und gibt die auf einem PC Terminal aus:
Sender:
Bild hier
Empfänger:
Bild hier
Das ganze läuft komplett Interruptgesteuert ab. Somit wird der Controller nicht zu stark ausgelastet. Als Spannungsversorgung für die CAN-Knoten habe ich solch ein Kabel:
Bild hier
Dabei handelt es sich um ein Netzteil, welches ich bei mir aus der Firma bekommen habe, weil es sonst im Müll landet würde ;)
Und um die Knoten miteinander zu verbinden, habe ich mir dieses Kabel hier gebaut:
Bild hier
Bild hier
Über das Kabel wird die 12V Spannungsversorgung der einzelnen Knoten gewährleistet und es wird das CANH und CANL Signal übertragen.
Durch die 12V Spannungsversorgung ist es möglich, dass nur ein Knoten am Stromnetz hängt und die anderen Knoten werden dann über die CAN-Kabel versorgt. Auf den Platinen befindet sich ein 7805 kompatibler Schaltregler, der bis zu 1,5A Strom bereitstellen kann.
Die nächsten Schritte werden dann sein, dass ich eine PC-Software dafür schreiben wollte (mit Visual Basic oder so) womit die Knoten ausgelesen werden können (z.B. Sensorwerte anderer Knoten).
Außerdem wollte ich gucken ob ich die Anbindung eines MCP2515 an mein Raspberry Pi hin bekomme. Dann würde das Pi den Job des "CAN Master" übernehmen. An die Knoten selber wollte ich verschiedene Sensoren anschließen und damit was aufbauen.
Zwei Sensoren habe ich hier schon rumliegen (einmal Luftdruck und Temperatur und einmal Feuchtigkeit). Den Feuchtigkeitssensor kann ich aber nicht ohne weiteres nehmen, da dieser eine von der Feuchtigkeit abhängige Frequenz angibt und ich bei meinem CAN-Knoten keine Interrupts rausgeführt habe.....
Mal schauen wie sich das Problem lösen lässt. Vielleicht steige ich auch auf eine I²C Variante um.
Vielleicht wandel ich die Frequenz auch in eine analoge Spannung um und messe diese einfach.
Wie dem auch sei. Ich werde schauen, dass ich diesen Thread hier nach und nach aktualisiere sobald es was neues gibt. Dies soll für die Leute sein, die selber mal mit dem Controller rumspielen möchten. Bei meiner Recherche habe ich gemerkt, dass es nicht all zu viel über CAN und Bascom im Internet gibt. Deswegen möchte ich hier gerne etwas für die Leute schaffen womit ihnen der Einstieg erleichtert wird.
Ich stehe auch gerne jedem zur Seite, der sich selber mit dem Controller beschäftigt und dabei Hilfe braucht :)
Für weitere Infos usw. könnt ihr auch auf meine Page schauen:
http://kampis-elektroecke.de/?page_id=453
Liste der Anhänge anzeigen (Anzahl: 1)
Heyho,
ich wollte den Thread mal ein wenig Updaten.....die letzten freien Tage habe ich mal wieder dazu genutzt um an dem Bus weiter zu arbeiten (wird auch demnächst auf meiner Homepage aktualisiert usw.).
Herausgekommen ist, dass ich das Programm etwas umdesignt habe. Außerdem habe ich noch ein kleines Userinterface für eine einfache Konsole entwickelt (der UART soll später über Interrupts arbeiten.....nicht wie in der aktuellen Version über "Input". Damit wird das ganze Programm Interruptgesteuert und ich habe die Mainloop frei):
Bild hier
Die Befehle die das Interface verwendet, wollte ich dann (irgendwann) auch für eine PC-Software verwenden.
Im Gegensatz zu meinem ersten Programmentwurf ist dieses Programm etwas variabler, sprich durch den Aufruf der "Data" Funktion werden nicht wie beim ersten Entwurf permanent 8 Byte gesendet sondern dies ist unterschiedlich (je nachdem wie viel gesendet werden soll).
Ein Wechsel des Controllers in den "Loopback" Modus + Senden und Empfangen von Daten sieht dann z.B. so aus:
Bild hier
Der Befehl "Data,7,8,15,7,12,78,16,1,144,179" ist dabei wie folgt aufgebaut:
1. Data -> Wählt die Funktion zum Senden von Daten aus
2. 7 -> der Identifier (0-2047)
3. 8 -> Anzahl der zu übertragenden Bytes
4. Die 8 Werte die übertragen werden soll.
Eine ähnliche Funktion gibt es für den Remoteframe. Hier jetzt im Nomalmode und als Antwort kommen 8 Bytes von einem zweiten Knoten zurück wo ein LM75 angeschlossen ist, der die Temperatur meines Wohnzimmers ausgibt (der Knoten hat noch die aller erste Softwareversion drauf, deswegen 8 Bytes die gesendet werden obwohl er nur ein Wert ermittelt ;) ):
Bild hier
An der Funktion zum einstellen der Filter arbeite ich noch....irgendwie verwirft der Controller die Einstellungen beim verlassen des Unterprogramms.....
Ebenso suche ich noch einen Weg einen Mega32 als I²C Slave zu betreiben.....ich habe gesehen, dass es da sogar eine Bascomfunktion für gibt aber die ist bei mir wohl irgendwie nicht drin, sprich ich muss es händisch machen.
Im Anhang ist mal der (aktuelle) Quellcode. Falls irgendjemand was dazu sagen möchte....nur zu :)
Posten tue ich den mal nicht, weil das über 1000 Zeilen sind und das ist glaube ich zuviel für einen Beitrag.