Forum: Mikrocontroller und Digitale Elektronik CAN-Bus mit uC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kevin W. (kevin89)


Lesenswert?

Hi,
ist es möglch mit einem uC ein High Speed CAN Signal im PKW Bereich 
auszugeben? Es sollte ein festes Signal sein (Bitfolge).

Im Grunde will ich wenn ein Eingangssignal kommt (Ein / Aus über 
Schalter) am uC, dass er in einem Bestimmten Abstand ein CAN-Signal 
ausgiebt. Kann man soetwas realisieren?

Gruß Kevin

von Falk B. (falk)


Lesenswert?

@Kevin W. (kevin89)

>ist es möglch mit einem uC ein High Speed CAN Signal im PKW Bereich
>auszugeben? Es sollte ein festes Signal sein (Bitfolge).

Sicher.

>Im Grunde will ich wenn ein Eingangssignal kommt (Ein / Aus über
>Schalter) am uC, dass er in einem Bestimmten Abstand ein CAN-Signal
>ausgiebt. Kann man soetwas realisieren?

Ja. Entweder Controller mit integriertem CAN-Controller oder beliebiger 
Controller mit externem CAN-COntroller, siehe CAN.

von Kevin W. (kevin89)


Lesenswert?

Danke schonmal ich habe vergessen dazu zu schreiben welche Art uC's ich 
gemeint habe:

Ich dachte an ATTiny85 (eignet sich auch für PWM Audioplayer) bzw. 
ATTiny's oder einfachere ATMega's.

Geht das auch mit diesen?

von besserwisser (Gast)


Lesenswert?

das geht prinzipiell mit jedem Controller!
wenn Dein Controller keine CAN-Schnittstelle hat, benötigst Du einen 
externen CAN-Controller wie z.b. den SJA1000 von NXP.

die Frage ist eher welche Möglichkeiten hast Du?

Kann Du programmieren? hast du die Möglichkeit eine Platine zu 
erstellen? kannst Du löten!?

von besserwisser (Gast)


Lesenswert?

noch was, hinter Deinem CAN-Controller benötigst du noch einen Treiber. 
das könnte z.b. ein MCP2551 sein.

von (prx) A. K. (prx)


Lesenswert?

Wenn es drum geht, dass das Kerlchen klein wird: MCP2515 statt SJA1000, 
oder irgendwas mit integriertem CAN (AT90CANxxx, PIC18F2680, ...). Aber 
ein Tiny85 wird das wohl nicht, das wär zu knapp.

Wenn du dir vielleicht vorgestellt hast, mit einem Tiny85 einfach nur 
die Bitsequenz auf einem Pin rauszublasen ohne nach links und rechts zu 
sehen: Das geht nicht. Ein CAN Controller ist unverzichtbar, sonst 
werden die übrigen Busteilnehmer sauer.

von W.Sprengel (Gast)


Lesenswert?

A. K. schrieb:
> oder irgendwas mit integriertem CAN (AT90CANxxx, PIC18F2680, ...). Aber
> ein Tiny85 wird das wohl nicht, das wär zu knapp.

z.B. die LPC11C-Reihe. Kleine, günstig und genügen Power.

von Lothar (Gast)


Lesenswert?

W.Sprengel schrieb:
> z.B. die LPC11C-Reihe. Kleine, günstig und genügen Power.

Stimmt z.B. LPC11C24 mit integriertem Treiber, somit nur 1 IC 
erforderlich. Zudem CAN-API im ROM. Zum Testen hier ein günstiges 
Demo-Board mit CAN-Beispiel:

https://www.olimex.com/Products/ARM/NXP/LPC-P11C24

von (prx) A. K. (prx)


Lesenswert?

Für den Anfang und besonders im PKW wäre ein externer Transceiver 
vielleicht sinnvoller. Tauscht sich leichter, besonders als DIP im 
Sockel.

von Kevin (Gast)


Lesenswert?

A. K. schrieb:
> Wenn du dir vielleicht vorgestellt hast, mit einem Tiny85 einfach nur
> die Bitsequenz auf einem Pin rauszublasen ohne nach links und rechts zu
> sehen: Das geht nicht. Ein CAN Controller ist unverzichtbar, sonst
> werden die übrigen Busteilnehmer sauer.

Das trifft es sehr gut! Ich habe nämlich nur ein Gerät das angesteuert 
werden muss und mein Plan war es mit sehr wenig Mitteln das Signal zu 
schummeln.


Zu der Frage weiter oben, ich kann mit Eagle eigene Bauteile erstllen, 
Platinen sowieso und das Ätzen und löten ist auch kein Problem. Nur uC 
programmieren kann ich nicht deswegen meine Fragen ;)

von (prx) A. K. (prx)


Lesenswert?

Kevin schrieb:
> Das trifft es sehr gut! Ich habe nämlich nur ein Gerät das angesteuert
> werden muss und mein Plan war es mit sehr wenig Mitteln das Signal zu
> schummeln.

Wenn du ausser der hier betrachteten Node exakt einen Teilnehmer hast, 
der ausschliesslich empfängt, *dann und nur dann kannst du tatsächlich 
ohne CAN-Controller einen Bitstrom rausblasen.

von Lothar (Gast)


Lesenswert?

Kevin schrieb:
> Nur uC programmieren kann ich nicht deswegen meine Fragen ;)

Wie gesagt, hier ist ein Demo-Programm dabei das periodisch oder per 
Interrupt eine CAN-Message sendet, einfach mal ansehen:

https://www.olimex.com/Products/ARM/NXP/LPC-P11C24

Nicht das 2. Demo-Programm, das ist CANopen.

von Kevin W. (kevin89)


Lesenswert?

A. K. schrieb:
> Wenn du ausser der hier betrachteten Node exakt einen Teilnehmer hast,
> der ausschliesslich empfängt, *dann und nur dann kannst du tatsächlich
> ohne CAN-Controller einen Bitstrom rausblasen.

Da muss ich leider sagen CAN Teilnehmer senden und empfangen immer und 
wenn es nur das ACK Bit ist. Es sind immer Transceiver, aber mir ist in 
dem Fall egal was er sendet. Ich will deshalb eine Pause zwischen jedem 
senden von meinem Signal haben um Störungen zu vermeiden

Lothar schrieb:
> Wie gesagt, hier ist ein Demo-Programm dabei das periodisch oder per
> Interrupt eine CAN-Message sendet, einfach mal ansehen:

Vielen Dank ich schau mir das Programm an :)

von (prx) A. K. (prx)


Lesenswert?

Kevin W. schrieb:
> Da muss ich leider sagen CAN Teilnehmer senden und empfangen immer und
> wenn es nur das ACK Bit ist.

Inwiefern stört das ACK Bit denn? Klar, error handling gibts so keines.

von Kevin W. (kevin89)


Lesenswert?

Es ging nur darum dass alle CAN-Bus Teilnehmer immer senden und 
empfangen. Weil immer eine Abfrage da ist ob die Nachricht korrekt ist.

von (prx) A. K. (prx)


Lesenswert?

Daher ja auch mein oben erwähntes "wenn". Das geht nur, wenn alle 
anderen Nodes keine Frames senden, sondern allenfalls ACKs. 
Standard-konform ist das klarerweise nicht.

von Charlie_Day (Gast)


Lesenswert?

Hallo,

an dieser Stelle würde ich mich mal ganz gerne einklinken.

Ich würde mich sehr freuen, wenn einer ein paar Worte darüber verlieren 
könnte warum ich für einen Can-Bus einen speziellen uC brauche.

Also was hat dieser uC mehr und macht ihn besser ?


MFG

von Link zu Artikel (Gast)


Lesenswert?

Lerne lesen!

von Martin L. (maveric00)


Lesenswert?

Hallo,

für Kommunikation auf dem CAN-Bus braucht man zwei Elemente: Einmal die 
richtigen Hardware-Pegel (differenziell) und einmal die richtige 
logische Ansteuerung.

Erstes ist nur mit einem Transceiver zu erreichen (ob diskret oder als 
IC), da die Mikrocontroller-Ein- und Ausgänge nicht den elektrischen 
Charakteristiken entsprechen.

Zweites kann man - wenn man masochistisch veranlagt ist - auch mit einem 
µC darstellen. Allerdings gibt es, um Standardkonform zu sein, so viele 
Sonderfälle und Eigenheiten zu beachten, dass es sich schlicht nicht 
lohnt, so etwas rein in Software selber zu machen (wobei die üblichen 
CAN-Controller durchaus einen eigenen festprogrammierten µC-Kern haben 
dürften, der von Spezialhardware unterstützt wird).

Das fängt dabei an, dass das Signal zu einem bestimmten Zeitpunkt 
gesamplet werden muss, bzw. der Samplingzeitpunkt mit dem Signal 
synchronisiert werden muss. Es geht weiter mit Kollisionserkennung, 
Bit-Stuffing, Error-Frames und Acknowledge um schließlich bei 
Message-Filterung und -Verarbeitung zu enden. Das ist wirklich so viel 
einfacher mit einem (integrierten) CAN-Controller erledigt, dass selbst 
bei richtig großen Stückzahlen Software sich nicht lohnt (zumal diese 
bei großen Stückzahlen sicher zertifiziert werden müsste).

Also besser entweder einen externen CAN-Controller mit Transceiver (2 
Bausteine extra), oder aber einen µC mit integriertem Transceiver ( 1 
extra Baustein) oder eine vollintegrierte Lösung verwenden (wobei mir 
hier nur Varianten bekannt sind, die zwei Versorgungsspannungen - 3.3 
und 5V - benötigen).

Schöne Grüße,
Martin

von Bülent C. (mirki)


Lesenswert?

Als blutiger Anfänger solltest einen Arduino nehmen und auf dem 
steckbrett den Mcp2515 plus den Mcp2551 beschalten.
Wenn du dann erfahrener geworden bist, gehst du über ins nächste Level.
Dann nimmst du einen atmega168 plus einen Mcp25625 oder gleich einen 
atmega16m1

von Bülent C. (mirki)


Lesenswert?

Natürlich atmega16m1 plus Mcp2551

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.