Hallo zusammen, ich bin Einsteiger was die Programmierung in AVR angeht. ich habe jetzt mal die Schaltungen aus dem AVR Tutorial nachgebaut und finde das ganze relativ simpel. Meine Idee wäre jetzt der Bau einer "Anlage" die auf Basis von Lokalen AVR's Messdaten und Schaltzustände im ganzen Haus sammelt und mittels Can Bus an eine zentrale Stelle weitergibt. Hat das schon mal jemand gemacht? Mein Problem ist die programmierung eines Can Busses. Ich habe bisher noch keine Literatur dazu gefunden. Schöne Grüße Klaus
http://www.mikrocontroller.net/articles/CAN_als_Hausbus =) ganz einfach ;) habs mir nicht durchgelesen sollte aber helfen Gruss
Es gibt unter www.microcontroller-starterkits.de ein Board als Bausatz, bzw. als Leerplatine, wo man den CAN einmal mit dem ON-Chip-CAN des AT90CAN128 verwenden kann - oder man nimmt den MCP2515 und den ATMega128. Das Board unterstützt beides. Beispielprogramme findet man ebenfalls dort.
Bin grad dabei soetwas mit einem Mega8 und MCP2515 zu realisieren. Ist von der Hardware recht günstig und einfach aufzubauen. Und wenn man erst mal das Datenblatt des MCP kapiert hat läufts auch mit dem CAN :-) Also diese beiden Bausteine wären mein "Einsteigertipp". Der MCP übernimmt den ganzen CAN-Verkehr (ich finde das im vollen Unfang selbst zu programmieren übersteigt den Wert des MCP2515 ~etwa 2EUR bei weitem und lohnt nicht), er braucht nur mittels SPI parametriert und gesteuert werden.
Ja, das hatte ich auch neulichst hier gefragt. Nur ich war so dreist auch noch nach Bascom Beispielen und nach Erklärungen der Parameterübergabe zu fragen. Meine Post ist nach einem Tag gelöscht worden. Ein Link oder Beispiel hätte ev. schon geholfen. Wie man einen Can-Controller an den AVR klemmt findet man überall, nur wenn man nach der Parameterübergabe und deren Bedeutung fragt ist man : im falschem Forum !! Das war im Code-Forum. Hat es nichts mit Code zu tun, ist das Elektronik? In dem Sinne viel Erfolg !! Klaus
@Klaus: Stefan hat doch seinen kompletten C-Code als .zip reingestellt schon vor nem halben Jahr oder so...
@Danny Naja, wenn ich C verstehen könnte. Kann ich aber nicht. Um es in andere Sprachen zu machen müsste man wissen: Was muss ich wo reinschreiben, möglichst mit Erklärung. Warum, und was und wo kann ich was weglassen. Beim Dallas 1wire 18(s)20 gibt es auch Beispiele mit Registererklärung in C ----> UND <------- in Bascom.
@Klaus Wetzel in Kapitel 1.2.2 von http://www.canathome.de/Dokumentation/Kapitel1.htm#Kapitell_1_2 steht was grundsätzliches drin.
Hi, mal ne frage, wenn man den philips chip +avr nimmt, braucht man da den bustreiber PCA 82C250 oder gehts auch ohne?
@bassi: welchen "phillips chip" ? @Klaus K: geht es dir nur um die Initialisierung des MCP? Falls ja könnte ich dir kurz zusammenschreiben welche register ich womit beschreibe...
@Danny P. Was heist nur, ich möchte gern ein CAN-Bus-System bauen, weil ich lese, daß er nicht so störanfällig ist und man sich nicht um Kollisionen kümmern muss. Der Haken ist bei mir: ICH KANN KEIN C Nur bin ich mit Bascom und a little bit ASM gut klargekommen. Klaus Kühnel soll in seiner zweiten Auflage CAN-Beispiele gebracht haben. Die Beispiele kann man sich saugen auf seiner Page, aber ohne Erklärung.... Die erste Auflage habe ich, nur deshalb soviel Geld... Ev. bin geizig, kann sein... Bin dankbar für jede Unterstützung!
@Danny P. würdest du es mit der Registerbelegung, mögl. mit Erklärung, posten?
@klaus k: bist noch ein wenig on? den nschreib ich es dir jetzt nebenbei auf (dauert nur ein wenig)... ich würd eine reihenfolge der bytes schreiben (mit erklärung) die ich nacheinander zur initialisierung an den mcp sende. und ein beispiel um ein telegramm zu senden, dann kannst ja dazu fragen stellen, ok? oder lieber in anderer form?
@Danny P. Das wäre nett. Ev. machst du das ja nicht nur für mich. Andere Hobbyisten finden ev. dadurch auch zum CAN-Bus. Danke vorerst dafür!
du... ich hätte es auch für dich allein geschrieben ;-) nur mal zur erklärung: ich hab so komisch nach dem "nur hinschreiben" gefragt weil mehr als die initialisierung hab ich noch nicht fertig :) hab nur mal ein paar testtelegramme zum test der hardware gesendet :) Ok, zur erläuterung des folgenden textes: spi on = shipselectleitung meines mcp2515 auf low (=aktiv) spi off= na was wohl :-) spi = xxxxx = schiebt das dort stehende Byte per hardware spi aus initialisierung des mcp2515 (laufendes hardware spi vorausgesetzt) ## SoftwareReset des MCP ## spi on spi = 0xC0 spi off ## MCP in ConfigMode (nur so sind einige Register beschreibbar ## ## und ClockOut ein und auf clk/2 (Takt für meinen µC) ## ## 1Byte ist der Schreibbefehl, 2. die Zieladresse und 3. der ## ## Wert für das Register CANCTRL ## spi on spi = 0x02 spi = 0x0F spi = 0b100000101 - Bitbedeutung siehe Registerbeschreibung spi off ## BitTiming und Interrupterzeugung einstellen ## ## Die Werte fürs BitTiming (CNF1...3 stammen aus einem ## ## Calculator (fliesst Baudrate, Clk und so mit ein ## ## und wieder 1.Byte Schreibbefehl, 2. Adresse CNF3 und die ## ## folgenden die Werte für CNF2, CNF1, und CANINTE ## ## (die Registeradresse wird nach einem Schreibzyklus autom. ## ## inkrementiert ## spi on spi = 0x02 spi = 0x28 spi = 0x05 spi = 0xB8 spi = 0x01 spi = 0b00011111 - Bitbedeutung siehe Registerbeschr. CANINTE spi off ## nun schalte ich das Filtern ein, nur den Filter passierende ## ## Messages werden im Eingangspuffer0 verarbeitet geschrieben ## ## wird RXB0CTRL ## spi on spi = 0x02 spi = 0x60 spi = 0b00100000 spi off ## nun schalte ich das Filtern ein, nur den Filter passierende ## ## Messages werden im Eingangspuffer1 verarbeitet geschrieben ## ## wird RXB1CTRL ## spi on spi = 0x02 spi = 0x70 spi = 0b00100000 spi off ## nun schreibe ich den Filter (ein Wert mit dem der empfangene ## ## Identifier verglichen wird) entspricht der empfangene diesem ## ## hier eingetragenen wird die Message weiter verarbeitet ## ## ich schreibe hie nur das ID-Highbyte, mehr möchte ich nicht ## ## überprüfen. ACHTUNG der Filter wird noch über eine "Maske" ## ## beeiunflusst! Nur die Bits des Filters und des empf. Identi. ## ## werden verglichen die im Maskenbyte auf "1" gesetzt sind ## ## geschrieben wird hier RXF0SIDH ## spi on spi = 0x02 spi = 0x00 spi = 0b01010101 spi off ## hier folgt nur das zum Filter0 gehörende Maskenbyte RXM0SIDH ## ## nur an den Stellen an denen eine "1" steht wird Filter mit ## ## empfangenem Identifier verglichen ## spi on spi = 0x02 spi = 0x20 spi = 0b11111111 spi off ## nun passiert das gleiche mit Filter2 (nur ID-Highbyte) ## ## geschrieben wird RXF2SIDH ## spi on spi = 0x02 spi = 0x08 spi = 0b01010101 spi off ## und die Maske für Filter2 hionterher, geschrieben wird ## ## RXM1SIDH ## spi on spi = 0x02 spi = 0x24 spi = 0b11111111 spi off ## MCP wieder in NormalMode, Clockout = clk/2 ## spi on spi = 0x02 spi = 0x0F spi = 0b00000101 spi off Am Anfang würd ich das maskieren und Filter weglassen. Somit brauchst du nur einmal in ConfigMode wechseln, das BitTiming und die Interrupts setzen und anschliessend wieder in den von dir gewünschten Betriebszustand gehen (singleshot etc... ) Willst du nun sagen wir mal 2Byte senden (über den TX-Puffer0) machst du folgendes: spi on spi = 0b01000000 - Schreibbefehl TX-Puffer0, die bits 0..2 geben dabei an welcher Puffer und ab wo er beschrieben werden soll (entweder ab ID-Highbyte oder ab Datenbyte0 - siehe Seite 64 Datenblatt) "000" bedeutet TX-Puffer ab ID-Highbyte beschreiben. Prinzip bleibt gleich: Nach jedem SPI-Byte wird der Adresszähler des MCP inkrementiert, so das du nun nur noch Byte für Byte in den MCP schieben musst. also weiter: spi = 0b01010101 - ID-Highbyte (standartframe) - TXB0SIDH spi = 0b01000000 - ID-Lowbyte (standartframe) - TXB0SIDL spi = 0x00 - dient nur dazu das Register für extendetframes zu über- spi = 0x00 springen... spi = 0b00000010 - die bits 0...3 geben an wieviel Datenbytes folgen also in unserem fall 2 (0010) spi = 0x23 - 1. Datenbyte spi = 0x46 - 2. Datenbyte spi off somit hast du die Message in den TX-Puffer0 geschrieben, sie wird aber erst gesendet wenn du den befehl dafür per spi gibst (alternativ auch per IO-pin am MCP... aber wofür... ?!?) spi on spi = 0b10000001 - RequestToSend Kommando (bit 0..2 geben an welcher Puffer gesendet werden soll - bit0 = puffer0... bit1 = puffer1....) spi off ist nun der bus frei wird der puffer0inhalt gesendet.... ich hoffe du wirst aus meiner beschreibung ein wenig schlau... so schlimm isses eigentlich nich... wie gesagt: laß erst mal das filtern weg.. dann isses fast leicht :-) nun warte ich auf deine fragen ;-)
mh.. noch nen hinweis... ich glaub man muss/sollte nach dem software-reset einen moment lang warten (hab ich zumindest bei anderen programmen so gesehn... nur ich hab noch nix gefunden (wie lang etc).. bei mir gings auch ohne pause.. wie gesagt nur ein hinweis
@Danny P. Da hast du dir viel Mühe gegeben !! Respekt mein lieber, würde Stephan Raab sagen und die Schilder hochreissen. Werde ich mir heute Abend mal reinziehen. Im Moment habe ich wenig Zeit, hab' deshalb etwas Geduld.
@Danny P. Im Datenblatt Abschnitt Oscillator steht wie lange man warten muss: "128 clock cycles after startup" erst dann sollte man SPI Kommandos senden.
@wosged: Danke für den Hinweis! Die Stelle hatte ich zwar gesehn, aber ich hatte das als die zeit nach spannungswiederkehr verstanden, nicht für den "soft-reset".... von daher auch gleich wieder vergessen ;-)
Hi Leute, ich habe mich ein bischen mit den Thema Can-Bus beschäftigt. Dabei habe ich natürlich auch die Seite canathome.de durchgesehen. Aber den Siemens Can-Controller bekommt man ja nicht bei Reichelt. Dafür aber den MCP2515. Aber er ist vom Aufbau anders als der Siemens Chip und ich weiß nicht, ob ich für ihn auch einen Can-Leitungstreiber brauche. Oder schließe ich ihn direkt an den Can-Leitungen an? Sprich Mikrocontroller (SPI)--> MCP2515 --> Can-Leitung Schon mal danke im Vorraus.
auch beim MCP2515 gehoert zwischen Chip und Bus ein "Can-Leitungstreiber". Fuer "High-Speed-Can" z.B. Philips PCA82C250 (im Lieferprogramm) oder Nachfolger oder vergleichbar. Zur "Inspiration" vielleicht hilfreich: http://www.siwawi.arubi.uni-kl.de/avr_projects/can/index.html
@Klaus: und schon was in die luft geflogen? :) nee im ernst, hast schon was probieren können? für was für eine anwendung machst du das ganze denn? Hardware schon fertig? greetz Danny
@Danny P. Habe erst einmal Teile bestellt. Anwendung: erst einmal Spielerei. Wenn ich da durchsteige 'ne Hausautomation. Stichwort www.pcdimmer.de die Adressierung ist klar, man legt sie hardwaremässig fest, fertig. Der Taster bekommt per Programm die Adresse, die er bearbeiten soll und tut hoffentlich das was man will. Den Dimmer kann man im Haus auch gebrauchen. Das mit den Tastern und Schalter ist schon da, deshalb der Wunsch nach einem Bus der die Zugriffe gut handelt. Einige Treads gibt es hier ja auch, nur finde ich einige Projekte zu gross aufgebaut, grundsätzlich finde ich aber keine Hausautomation die mindestens schon als Beispiel funktioniert und auch noch preiswert nach baubar ist. Dabei finde ich mein System easy: Der Taster wird abgefragt, ist er kurz gedrückt : toogeln lang gedrückt: dimmen Kurzes Bascomprogramm gibt den seriellen Datenstrom zum Dimmer oder Schalter. Der Schalter hat auch ein kurzes Bascomprogrammm weil er ja nur auf seine ADR hören muss. Naja, ich komme auf CAN wegen der möglichen Uberschneidungen, bis jetzt kein Problem, leben nur 2 Leute im Haus, kann nicht viel Überschneidung sein. Aber besser ist.... Aber erst einmal sehen.... Bei deiner Erklärung blicke ich soweit durch. Besser ist es aber, ich baue Hardwaremässig auf und teste: learning by duing...
dann hast evt. ja auch unsere diskussion im "hausbus"-thread gelesen ,was? mmh.. oversized mag sein... aber ich bin froh das der can-bus mir viel arbeit (buskollisionen etc.) abnimmt und noch hohe leistungsreserven bietet. so bin ich mir ziemlich sicher das ich auch in 12 jahren noch glücklich damit bin, auch wenn viel anwendungen (oder auch mal viel datenverkehr) dazukommen und teuer ist es nicht. ein buskoppler (mega8 + mcp2515 inkl. hardware drum rum) etwa 12EUR (platine selbst geätzt)
@Danny P. bzw. @Alle Noch ein Nachtrag: hat schon jemand was mit dem MCP über SPI und Bascom gemacht? Wenn ja wie verschaltet? Danke für die Antworten.
@Danny P. Dein Buskoppler ist sicherlich auch das was ich brauche, nur bestimmt in C programmiert.... Verstehe ich ja nicht so.. Aber darf ich das Layout mal sehen und die Schaltung? Meine ist auf Lochraster und ohne CAN.
@Klaus: ohne can? wie hast du die kommunikation denn bisher gelöst? Schaltung und layout lass ich dir mal zukommen, muss ich nur erst mal zeichnen :) ich habe nämlich erst mal schnell schnell ne platine gezaubert um möglichst früh die hardware testen und auswählen zu können (obs funzt etc). nun mach ich mich an eine vernünftige doku. aber hast du schon mal den "Hausbus" threat hier im forum gelesen? dort diskutieren wird grad über einzelfunktionen, software, etc. evt auch interessant für dich dort hat Stefan seine bereits fertige Doku als zip reingestellt (auch mit bilder etc.) wie gesagt: meine doku mach ich jetzt die nächsten tage
@Danny P. Einfach mit V24 Schnittstelle. Schalter schickt Telegramm über Max-Baustein. Max-Baustein am Relais hört Nachricht und wenn er sie als seine ADR erkennt schaltet er. Meine Schaltung hat ja nicht viele Teilnehmer. Den Tread habe ich gelesen und einiges an Info's für mich gewonnen. zB. was ich per Variable mache, worauf mein Relais hört steht in meinem Programm, besser: Der Aktor bekommt in einer Parametrierung ins EEprom geschrieben, worauf er hören soll bzw. wer ihn schalten darf. Bisher habe ich keine Bestätigung der empfangenen Daten gemacht, hat man auf die Taste gedrückt und es passierte nicht's, dann eben nochmal! Das Prinzip würde bei dem Dimmermodul (das war die Erweiterung jetzt) sowieso nicht gut sein...deshalb komme ich ja auf CAN. Besser: es wird geantwortet und danach wird entschieden ob nochmal gesendet wird. Nur mein Schált- bzw. mein Tastermodul soll nicht zu groß werden. soll in eine UP-Dose passen. Jetzt habe ich Max ´die Kondensatoren Quarz und Pullup's und Mega8. Ich hatte schon mit Funkmodulen liebäugelt, aber das Teil ist zu gross! Irgentwie weiss ich auch nicht, warum ich grösser werden soll. RC5, 1Wire für Temperatur, ist alles nicht so groß.. Eine Uhr hönnte noch kommen, dafür wäre DCF ganz gut, müsste aber auch irgentwie das Tageslicht sehen, sprich: wäre nicht in der Schalterdose. Rolladen könnte mit Umschaltkontakt gebaut werden (Zeitbegrenzung als zusätzlichen Schutz). Ich suche der Tread aber nochmal nach den Bildern ab, meine aber es war ziemlich groß... Die Teile von Reichelt werden sicherlich Dienstag da sein. Muss mir dann mal 2 Mega8 verschalten und was probieren. Naja, Zeit müsste man haben... Deshalb frage ich ja auch nach ev. Hardwarebeispielen (nur nicht so aufwendig), die schon laufen, möglichst in Bascom.
Hi, da ja hier kurz das Dimmerprojekt von www.pcdimmer.de angesprochen wurde: ich habe selber vor, meine (noch in der Planung befindliche) Wohnung mit Softtastern auszustatten, damit ich nicht überall die 230V Leitungen liegen habe. Meine Idee ist es, zum ATtiny2313, der meine TRIACs steuert, noch mehrere (vielleicht kleinere) AVRs zu nutzen (pro Zimmer vielleicht einer), an dem 8 bis 12 Taster eines Raumes dran sind. Drückt man einen Taster, wird das zugewiesene Ergeinis in diesem kleinen Steuer-AVR ausgeführt und die (in der Firmware) voreingestellte Lichtszene per RS232 an den ATtiny2313, der die TRIACs steuert, gesendet. Zudem ist die ganze Lichtanlage des Hauses immer noch mit dem PC (oder vielleicht bald mit PDA) steuerbar. Aber da muss ich noch etwas Entwicklungsarbeit leisten g Der kleine Raum-AVR kann ja in C, Basic oder ASM geschrieben sein, hauptsache er schickt das korrekte RS232-Protokoll. Man nutzt als Bussystem einfach den RS232-Bus, den ich bereits auf 200 Meter funktionstüchtig mit 9600 Baud nutzen kann. Diese Lösung werde ich verfolgen, da es in der Tat keine anderen kostengünstigen Vorschläge im WWW gibt :-/ Als Kosten bleiben so nämlich nur ne Handvoll AVRs, Taster und ne 3- oder 4-Adrige Leitung (GND, +RS232-Data, +5V Speisespannung) Werde aber dennoch diesen Thread hier verfolgen g vielleicht kommt ja noch die Idee. schöne Grüße, Christian
@christian: du hast die rs232 verbindung schon getestet.... aber auch mit mehr als zwei µC? rs232 ist ja kein bus sondern nur ne serielle schnittstelle... da is nix mit einfach zusammenklemmen... rs485, can, schonmal darüber nachgedacht? störsicher, echter bus und teurer wirds auch nicht... (can controller 1,9EUR...) greetz Danny
Ich habe derzeit 4 Atmels mit ner Wandlung des RS232-Pegels auf +5V Niveau durch nen Transistor dran. Das klappt einwandfrei. Allerdings habe ich mehr als 4 noch nicht getestet - aber mit 4 Prozessoren habe ich bereits 4x8 Dimmbare Kanäle, was fürs Wohnzimmer und Hofbeleuchtung locker reichen dürfte g An den CAN-Bus habe ich mich noch nicht rangetraut, da ich hier doch sicher nicht nur nen Chip Rs232->CAN und dann auf der anderen Seite CAN->Rs232 einsetzen kann, oder? Da brauchts mehr... Un bei DMX, also RS485, muss ich mein Protokoll überarbeiten, was derzeit aber noch vollkommen ausreichend ist - da habe ich Kanal, Endwert und Fadezeit in einem RS232-Frame und kann somit mit einem einzigen Frame bereits das Licht von 0 auf z.B. 70% langsam Dimmen. Bei DMX muss ich doch dies mit aufeinanderfolgenden Befehlen komplizierter realisieren? Warum neu erfinden, wenns doch läuft? ;-) Ich kalkuliere nur Probleme beim Entstören der TRIACs ein (-> anderer Thread von mir) aber das ist nicht das Problem von RS232. Außerdem kann ich bei dem RS232-Protokoll jeden Rechner an die Leitungen mit dranklemmen und somit die Steuerung per PC übernehmen. Also ich finde es mit RS232 bequemer, als mit CAN oder RS485, oder gibt es Probleme, die ich blauäugig übersehe g ciao, Christian
oki seitens PC->µC´s hast du recht. aber du hast ja auch dein "raum-avr" erwähnt der die tasten einsammeln soll. und somit hast du ja mehrere µC am "draht" die alle mal was sagen wollen. wie gesagt, wenn einer sendet und alle empfangen - kein problem aber andersrum... geht nicht ohne bus greetz Danny
OK, das sehe ich ein. Fürs erste ist die Anlage nur fürs Wohnzimmer geplant. Da werde ich das mal im Dauereinsatz testen (Decke wird z.B. passiv Beleuchtet, Deckenlampen und Wandlampen sollen alle mit an den Dimmer). Anfangs komme ich (hoffe ich) noch ohne Bus aus, da der Raum-AVR nur blöd seinen RS232-Frame absendet, wenn eine Taste gedrückt wurde. Kann dann nur zu Kollisionen führen, wenn dann gleichzeitig jemand mit PC sendet (ist bei DMX aber auch so, da dort ebenfalls nur einer Master sein darf). Zum Schauen, ob die Anlage überhaupt läuft, reicht es aber allemal. Vielleicht entwickelt sich hier ja auch noch ein anderes Projekt, wo ich dann sage: das ist es! :) Werde mir erst mal ein Menü basteln, ála Semiton, damit ich mit drei Tasten die Stimmung auswählen und abfahren kann - fertig ist das Zimmerinterface. tschau Chris
naja... DMX ist finde ich kein passender vergleich, da gehts ja auch nur drum zentral viele "doofe" lampen zu -steuern- es gibt hier einen thread der evt für dich interessant sein dürfte... einfach mal nach "hausbus" suchen. oder mal bei www.canathome.de reinschauen oki, zum testen reichts so, das stimmt... aber ich mach mir mitlerweile lieber anfangs viele gedanken als später wieder bei null anfangen zu müssen weil ich nen neues system brauche und mit nem bussystem eröffnen sich viiiiele ungeahnte möglichkeiten/spielereien :) greetz Danny
Spielereien? Seit dem ich in JurassicPark I das Computersystem zum Steuern der Türen gesehen habe, wollte ich sowas auch. ;-) Inzwischen komme ich immer näher dahin (Licht an/aus mit PC: geht. Dimmen mit PC:geht. Dynamische Rückmeldung und alles auf einer Leitung: Bussystem - ich sehe es ein :D ) Du hast recht... ich werde mir das Bussystem mal vornehmen und ernsthaft studieren. Bis denn!
Hihi, ich wollte mich mal an den AT90CAN128 rantrauen allerdings komm ich mit dem Datenblatt überhaupt nicht zurecht. Ich möchte im Prinzip mit dem uC nur Daten mit einem bestimmten Identifier vom CAN-Bus empfangen allerdings hab ich keine Ahnung was ich in die Register reinschreiben soll. Hat jemand damit schon Erfahrung? Ich programmiere mit Codevision wäre net wenn mir jemand mal einen gut Auskommentierten c-Code schicken könnte mit dem von Atmel komme ich leider auch nicht zurecht. Danke schonmal.
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.