CAN und I2C Projektumsetzung

OP #4083891
Lesenswert?

Hallo,

da ich mich gerade in meinem Praxissemester befinde und mein Projekt 
umsetzten muss, benötige ich ein klein wenig Hilfe.

Ich muss ein Bussystem für eine Anschauungswand Planen und umsetzten. 
Geplant sind zwei Bussysteme CAN und I2C. Das Projekt dient zum Erlernen 
der Bussysteme und hat keine tiefere Bedeutung ausser dass es am Ende 
einwandfrei laufen sollte.

Es wird 25 Piggybacks geben welche untereinander auf einer Hauptplatine 
miteinander verbunden sind. Später sollte das System im Multi-Master 
System laufen oder im Master Slave Modus.
Ich hoffe ich habe das Projekt allgemeinverständlich beschrieben.

Benutzt wird der:
Mikrocontroller: C8051F580 der auf jedem Piggyback ist. Somit 25 mal.
Speisung beträgt 3,3 V

So nun die Fragen zu CAN:

Betreiben will ich Full CAN damit ich die 1 MBit/s schaffe. Somit 
brauche ich drei Leitungen: TX, RX und Ground. Busabschlusswiderstände 
mit 120 ohm. Nur bin ich mir nicht sicher ob ich vor jedem 
Mikrocontroller (somit 25 Stück auf jedem Piggyback) 1 Transceiver 
benötige? Ist dieser nicht integriert im Mikrocontroller?

Wie berechne ich die Pull-up Widerstände für dieses System?


So nun die Fragen zu I2C:

Hierbei handelt es sich ja auch um eine 2-Draht Kommunikation. 
SDL(Datenleitung,) SCL (Taktleitung), GND (Ground). Jedoch gibt es hier 
die Einschränkung der 400pF gegenüber Ground. Wie kann ich dies 
berechnen um vorher schon sicherzustellen das ich unter diesem Wert 
bleibe bei 25 Teilnehmer und einer Datenleitungslänge von fast 3 Meter 
an der längsten Stelle? Aufgrund der Datenleitungslänger und Hoffnung 
auf Maximale Geschwindigkeit dachte ich baue in der Hälfte der Leitung 
ein PCA9614 (differenziellen I2C-Buffer) ein, um die Störsicherheit zu 
erhöhen und ein PCA9601DP um die 400 pF auf 4000pF zu erhöhen und genug 
Luft zu bekommen das ich meine Flanken noch erkenne.

Habe ich irgendwas wichtiges vergessen? Ist das überhaupt gut so? Habe 
leider kein rechten unterstützung hier, deshalb hoffe ich auf eure 
mithilfe :)


Vielen Dank schon mal im Vorfeld an euch alle.
Gast #4083918
Lesenswert?

Stephan Maier schrieb:
> Nur bin ich mir nicht sicher ob ich vor jedem
> Mikrocontroller (somit 25 Stück auf jedem Piggyback) 1 Transceiver
> benötige?
Ja.
> Ist dieser nicht integriert im Mikrocontroller?
Nicht im C8051F580.

Du könntest zB einen LPC1100 verwenden, der hat nicht nur den 
CAN-Controller, sondern auch den CAN-Transceiver integriert. Außerdem 
basiert dieser nicht auf der antiquierten 8051-Architektur sondern ist 
ein moderner Cortex-M0.

Stephan Maier schrieb:
> Wie berechne ich die Pull-up Widerstände für dieses System?
Was für PullUps?
#4083925
Lesenswert?

Stephan Maier schrieb:
> TX, RX und Ground. Busabschlusswiderstände.
> Nur bin ich mir nicht sicher ob ich vor jedem Mikrocontroller (somit 25
> Stück auf jedem Piggyback) 1 Transceiver benötige?

Auf dem CAN-Bus heißt es CANH und CANL, Rx und Tx hast du nur zwischen 
deinem Controller und dem Transceiver. Das heißt natürlich auch, dass du 
für jeden Controller einen Transceiver brauchst.
Abschlusswiderstände brauchst du jeweils einen an den beiden Enden der 
Busleitung. Idealerweise macht man den Widerstand in 
Experimentieraufbauten schaltbar oder als Zwischenstecker.

Hinsichtlich Konnektoren gibt es übrigens eine Standardbelegung auf 
SubD-9-Steckern.

Noch ein wichtiger und von neueinsteigern oft nicht beachteter Hinweis: 
Bei CAN brauchst du zur Kommunikation unbedingt zwei Teilnehmer! Wenn 
ein Teilnehmer eine Nachricht nicht versenden kann (weil niemand auf das 
Acknowledge reagiert), macht er einen Resend bis er sich selbst wegen 
Fehlerrate vom Bus nimmt.

Stephan Maier schrieb:
> SDL(Datenleitung,) SCL (Taktleitung), GND (Ground). Jedoch gibt es hier
> die Einschränkung der 400pF gegenüber Ground. Wie kann ich dies
> berechnen um vorher schon sicherzustellen das ich unter diesem Wert
> bleibe bei 25 Teilnehmer und einer Datenleitungslänge von fast 3 Meter
> an der längsten Stelle?

Offiziell heißt die Datenleitung SDA, aber das nur am Rande ;)

Die Kapazität vom Bus hängt einerseits von den Leitungen (Formeln siehe 
Grundstudium der Elektrotechnik ;) ), andererseits aber auch von deinen 
Busteilnehmern bzw. deren Rreiberbausteinen ab. Die Kapazität ist 
wichtig im Zusammenhang mit der Datenrate und den Pull-ups, die du 
verwendest  (bzw. verwenden musst, damit die Kommunikation klappt). 
Bitte behalte im Hinterkopf, dass I²C für Distanzen unter einem Meter 
designed wurde aber gleichzeitig durchaus gutmütig sein kann. Hier im 
Forum haben wohl schon ein paar einen Hausbus damit realisiert.

HTH

Chris
OP #4083928
Lesenswert?

Oh entschuldigung das mit den Pul-up`s sollte eigentlich bei I2C stehen. 
Da kam ich wohl durcheinander beim Tippen.

Das mit dem Cortex-M0 hört sich toll an, ich werde gleich mal 
recherchieren und dann hoffen das ich die zustimmung bekomme. Sonst muss 
ich halt den umständlichen Weg wählen.
Gast #4083934
Lesenswert?

Stephan Maier schrieb:
> So nun die Fragen zu I2C:

Beim I2C wird eine logische 0 niederohmig getrieben (d.h. ein Transistor 
verbindet niederohmig mit Masse) und eine logische 1 hochohmig gegen VCC 
gezogen (über den Pullup-Widerstand).

Das führt dazu, dass die fallenden Flanke recht steil sind, aber die 
steigenden Flanken verschliffen sein können. Grund dafür ist der 
R-C-Tiefpass aus Pullup-Widerstand und Leitungskapazität.

Verschliffene Flanken sind aber nur dann ein Problem, wenn die Taktrate 
des I2C-Bus so hoch ist, dass der logische High-Pegel nicht genug Zeit 
hat, auf einen ausreichend hohen Spannungspegel anzusteigen.

Dann hilft:
1. Leitungskapazität verkleinern (geht oft nicht)
2. Pullup verkleinern (Minimum siehe Datenblätter der ICs)
3. Taktrate senken
OP #4084722
Lesenswert?

Wow vielen vielen Dank für die vielen und scchnellen Antworten :) ich 
hätte mein Praxissemester bei euch machen sollen ;)


Dr. Sommer schrieb:
> Du könntest zB einen LPC1100 verwenden, der hat nicht nur den
> CAN-Controller, sondern auch den CAN-Transceiver integriert. Außerdem
> basiert dieser nicht auf der antiquierten 8051-Architektur sondern ist
> ein moderner Cortex-M0.

Also Ich dürfte einen Cortex nehmen aber er muss von Silicon Labs kommen 
und die haben keinen mit CAN :( Somit muss ich halt 25 Transceiver 
kaufen. Gibt es da unetrschiedlich gute, ich habe nämlich gesehen das es 
ziemlich viele Varianten von Transceiver gibt?!


Chris R. schrieb:
> Abschlusswiderstände brauchst du jeweils einen an den beiden Enden der
> Busleitung. Idealerweise macht man den Widerstand in
> Experimentieraufbauten schaltbar oder als Zwischenstecker.

Ist nicht für Full CAN immer 120 Ohm?


Chris R. schrieb:
> Die Kapazität vom Bus hängt einerseits von den Leitungen (Formeln siehe
> Grundstudium der Elektrotechnik ;) ),

Habe mein Elektrotechnik 3 Skript schon rausgekramt :D




Also meine Produktliste:

Für I2C benötige ich:

1x PCA9601DP
1x PCA9614
SDA(Datenleitung), SCL (Taktleitung), GND (Ground)
Pull ups


Für CAN benötige ich:

25x Transceiver (die Frage ist nur welcher von den vielen)
CANH, CANL und Ground
Busabschlusswiderstände mit 120 ohm


Vielen Dank euch allen ihr seit mir eine grosse Hilfe.
OP #4084827
Lesenswert?

Felix L. schrieb:
> Stephan Maier schrieb:
>> Also Ich dürfte einen Cortex nehmen aber er muss von Silicon Labs kommen
>> und die haben keinen mit CAN :( Somit muss ich halt 25 Transceiver
>> kaufen. Gibt es da unetrschiedlich gute, ich habe nämlich gesehen das es
>> ziemlich viele Varianten von Transceiver gibt?!
>
> Die EFM32 Gecko Mikrocontroller von Silabs haben doch CAN, oder nicht?

Hmmm ich weis nicht ob ich blind oder einfach zu unerfahren bin :/ aber 
da steht doch nur USART und I2C.
Angehängte Dateien:
OP #4086175
Lesenswert?

Hm ich hab grad noch eine Frage, zwecks I2C und CAN. Ich habe nachher 
meine Mikrocontroller (c8051f580) die für das Bussystem verantwortlich 
sind. Wenn ich nun noch zusätzlich einen weiteren Mikrocontroller 
verbaue auf dem Piggyback der für irgendeine Aufgabe zuständig ist (was 
auch immer), wie kommunizieren die zwei miteinander so dass meine Daten 
ins Bussystem kommen oder abgefragt werden können? Muss ich da dann 
wieder ein Bus aufbauen (SPI, UART)  zwischen den zwei Mikrocontrollern 
oder geht das auch einfach.
#4086217
Lesenswert?

Verstehe deine Frage nicht ganz:

Du hast einen weiteren Controller, der selber nicht am Bus - egal ob CAN 
oder I2C - hängt, aber trotzdem erreichbar sein soll?

Gerade für die Kommunikation von Controllern auf einer Platine 
untereinander gibt es den schnellen SPI. Du kannst dir aber auch einen 
eigenen Bus ausdenken.
OP #4086329
Lesenswert?

Habe mal ein Bild dazu gezeichnet. Meine Frage ist:

Dadurch das ich ja ein Mikrocontroller verwende als CAN Controller habe 
ich ja nur die vom Prozessor gegebenen Funktionen. Falls ich mal im 
Spezialfall mehr will und noch ein Cortex auf dem Piggyback dazu 
schalten (roter Pfeil) möchte aufgrund von Leistung oder weiteren 
Funktionen, wie mache ich das dann?   Muss ich dafür extra wieder ein 
Bussystem aufbauen (SPI I2C.....) oder gibt es da andere Möglichkeiten.
Angehängte Dateien:
#4086596
Lesenswert?

Stephan Maier schrieb:
> Dadurch das ich ja ein Mikrocontroller verwende als CAN Controller habe
> ich ja nur die vom Prozessor gegebenen Funktionen.

Der von dir gewählte 8051 ist ja nicht der kleinste. Der kann schon 
einiges.
Daher ist nicht klar, was du noch mit einem Cortex zusätzlich anfangen 
willst?

Aber wenn du meinst: Natürlich braucht es wieder irgendeine Verbindung 
der beiden. Da es nur zwei Teilnehmer sind, reicht auch eine 
Punkt-zu-Punkt-Verbindung wie RS232. Hängt halt davon ab, wieviel Daten 
du hin- und herschaufeln willst.
#4086606
Lesenswert?

Grundsätzlich möchte ich aber einwenden, dass du eben nach Möglichkeit 
NICHT einen weiteren Prozessor haben willst.
Es ist ein Irrtum zu glauben, dass sich die Dinge immer einfacher 
gestalten, je mehr Prozessoren im Spiel sind. Denn mit einem 
zusätzlichen Prozessor handelst du dir automatisch eine weitere 
Kommunikationsschicht ein, der dein ursprünglich vorhandener Prozessor 
dann ohnehin noch zusätzlich wuppen muss.

> Wenn ich nun noch zusätzlich einen weiteren Mikrocontroller verbaue
> auf dem Piggyback der für irgendeine Aufgabe zuständig ist
> (was auch immer)

Wenn er für eine weitere Aufgabe zuständig ist, warum soll der dann 
nicht ein eigenes Piggyback für genau diese eine Aufgabe bekommen und er 
ist CAN-Busteilnehmer wie alle anderen auch?
OP #4098657
Lesenswert?

Ja das mit dem zusätzlichen Controller war nur eine theoretische Frage 
welche mich interessiert hat wie man es lösen würde.


So jetzt hoffe ich das ich nicht alles falsch gemacht habe. Ich habe mal 
ein kleines Schema gezeichnet. Könnt Ihr mir sagen ob das so 
funktioniert wie ich das gelöst habe?

Eine weitere Frage ist, wofür ist das VRef beim CAN-Transceiver. Das 
wurde mir aus dem Datenblatt nicht ganz ersichtlich.


Vielen vielen Dank nochmals für eure Unterstützung :)
Angehängte Dateien:
OP #4103960
Lesenswert?

Ich habe noch eine weitere Frage. Ich würde gerne die Datenleitung von 
CAN und I2C anzapfen um die Übertragung mit einer LED sichtbar zu 
machen. Leider ist es mit nur aus Konstruktionsgründen möglich CAN_H 
oder CAN_L zu überprüfen.

Nun meine Idee, ich benutze einen Differenzenverstärker und ermittle 
damit die Differenz von CAN_H und CAN_L. Mittels eines Schmitttrigger 
prüfe ich das Differenzensignal auf über 0-1,5 V = LED aus und 1,5-3,5 
Volt = LED an.
Wolle es erst mit einem FET machen aber die sind mir zu ungenau was die 
Schwellenspannung angeht von 1,5V.

Bei I2C ist es mir noch nicht so einleuchtend wie ich es machen soll. 
Villt mit einem Inverter an der SCL Leitung.


Vielen Dank für eure Hilfe :)
#4104369
Lesenswert?

Hast du nicht die Pull-up Widerstände links und rechts vom Bustreiber 
vertauscht?
Und der 33R ist wohl eher ein 330R. Dann stimmts auch mit dem Datenblatt 
überein.
Einen Abblockkondensator dazu kann nicht schaden.


VRef am Transceiver kannst du offen lassen.

Zum 8051 kann ich dir nichts sagen.
#4104397
Lesenswert?

Stephan Maier schrieb:
> Ich würde gerne die Datenleitung von
> CAN und I2C anzapfen um die Übertragung mit einer LED sichtbar zu
> machen.

Oben hast du was von 1MBit auf dem CAN geschrieben. Nur mit einer LED 
wirst du da nichts sehen, die Botschaften sind einfach zu kurz.

Schliesse lieber eine oder zwei LED an den 8051 an und zeige Senden und 
Empfangen per Software an. Den Bus musst du schon mit einem DSO ansehen 
um was zu sehen.

Mach doch mal den Schaltplan fertig.
Gast #4104531
Lesenswert?

Hm,


ich würde hier noch einiges vorsehen.

- Quarz
- Abblockkondensatoren an VDDA
- Das C2 Debuginterface (Pullup nicht vergessen)
- I2C würde ich über die Crossbar eher auf Port 1 verschieben, evtl. 
braucht
  man die Externe Refernzspannung doch einmal
- Alle nichtbelegten Ports zumindestens auf Stecker, damit man diese 
später
  doch mal verwenden kann
- Der CAN Transceiver freut sich auch über Abblockkondensatoren
- Jumper für CAN Terminierung
- HEX-Coderschalter für Node-ID
- ein paar Debug LEDs


Such dir mal die Doku des Entwicklungskites für diesen Typ, da ist 
normalerweise auch ein Schaltplan mit enthalten.

Evtl. solltest du dir auch den F582 überlegen, der hat auch alles drauf, 
das QFP-32 Gehäuse hat aber einen größeren Pitch und lässt sich schöner 
mit der Hand löten.


mfg
Gast
#4107526
Lesenswert?

Stephan Maier schrieb:
>> - Jumper für CAN Terminierung

Der CAN-Bus hat zwei Abschlusswiderstände, einen an jedem Ende.
Da du ja alle Platinen gleich gestalten willst, dürfen die in der Mitte 
angeordneten CAN-Teilnehmer keinen Widerstand haben. Nun kann man den 
beim Bestücken einfach weglassen oder aber einlöten und zusätzlich einen 
Jumper dazu um den dann still zu legen.


>> - HEX-Coderschalter für Node-ID

Im I2C-Bus hat jedes Gerät eine eigene Geräteadresse.
Die kannst du nun fest in die Software reinschreiben, dann braucht aber 
jede Platine eine eigene Software-Version. Oder der Controller fragt 
beim Einschalten einen Codierschalter ab und weiß so seine Adresse.
#4107530
Lesenswert?

Willst du keine Knöpfe, Taster, LED, oder LCD-Anzeigen auf deinen 
Platinen vorsehen?

Auch wenn dann mal alle Controller miteinander kommunizieren können, 
steht Mensch davor und langweilt sich, da es keine Möglichkeit gibt mit 
dem Systen zu interagieren: Keine Knöppe drücken und die Reaktion darauf 
abwarten...
OP #4107596
Lesenswert?

Doch doch das kommt alles noch, jedoch wollte ich erst einmal das Schema
für die Grundschaltung (Bussystem, Controller, ...) aufbauen und
anschließend den Rest was auf die Piggyback Oberseite kommt hinzufügen.
Auf dem Bild kannst du mal Anfänge der Planung sehen was drauf kommt, 
nur die Stromversorgung wurde anders geregelt als anfänglich geplant.
Angehängte Dateien:
#4107669
Lesenswert?

Soll das Projekt innerhalb eines Praxissemesters in Hardware fertig 
werden oder nur durchgeplant?

Wenn du Hardware aufbauen und in Betrieb nehmen willst, bist du mit den 
Grundplatinen und deren Sotware schon gut beschäftigt.
Pass auf dass dir nicht die Zeit wegläuft.
OP #4109045
Lesenswert?

So, ich habe jetzt mal alles so gut wie fertig gestellt. Ich hoffe es 
passt alles. Oben meintet Ihr ja ich solle es fertig einstellen damit 
man überhaupt eine Aussage machen kann zu meinem Schema.

In den Anlagen ist:

Speisung:
Dies dient nur zur überprüfung ob auch alle Speisungen vorhanden sind.

Reset:
Erklärt sich von selbst.

Piggyback:
In diesem Dokument sind alle wichtigen Bausteine für die 
Buskommunikation über I2C und deren Node-ID und CAN. Desweiteren noch 
eine Schnittstelle C2 sowie der Controller selbst.


Testpunkte habe ich noch nicht eingezeichnet, die kommen noch!

Es wäre toll wenn Ihr mir Kritik sowie bessere Lösungsvorschläge machen 
könntet. Man lernt bekanntlich am meisten aus Fehlern und guten Ideen 
anderer.

Vielen vielen Dank euch allen.
Angehängte Dateien:
OP #4115824
Lesenswert?

Hallo alle zusammen,

ich habe ein weiteres Schema gezeichnet und bin mir diesmal sehr 
unsicher ob ich das so machen darf und kann.

Ich soll laut Aufgabenstellung den Bus auf Aktivität mit einer LED 
überprüfen. Meine Schaltung ist oben als Bild abgehangen.

CAN-BUS

Idee, ich ermittle die Differenz mittels einem Differenzenverstärker. 
Dabei ergeben sich Werte zwischen 0 und 3,5V. Anschliesend führe ich das 
Differenzensignal auf einen Schmitttrigger welcher eine Schaltschwelle 
von 1,5V hat. Unter 1,5 ist mein Bus inaktiv alles drüber aktiv.



I2C-BUS

Idee, ein ganz normaler invertierender Verstärker da Aktiv  auf Lowpegel 
ist und inaktiv auf Highpegel.


Ich hoffe man kann es so machen. Vielleicht habt ihr mir ja ein 
Denkanstoß zu dieser und zu meiner oben gefragten fertigen Schaltung. 
Vielen Dank euch allen.
Angehängte Dateien:
OP #4117297
Lesenswert?

Aber denkt ihr das so alles Funktionieren würde wie ich es bis jetzt 
geplant habe?

Desweiteren hänge ich gerade an einer weiteren Aufgabe fest (das Projekt 
ist echt heftig merke ich so langsam :D ). Ich soll ein TFT Touch 
Display 7" auf ein Piggyback setzen auf das alle weiteren Piggybacks 
Zugriff bekommen können über den I2C-Bus oder CAN-Bus. Nun habe ich 
"nurnoch" 34 I/O`s frei. Die meisten Display`s haben I2C für das 
Capacitive Touch und 24 Bit (RGB) für das Display. Theoretisch würde das 
reichen für meine Zwecke. Jedoch frage ich mich ob das theoretisch auch 
praktisch umsetzbar ist. Das I2C würde ich halt da es schon vom anderen 
Bussystem benutzt wird selbst auf ausgewählte I/O`s Programmieren das 
sollte nicht das Problem darstellen.


Was meint Ihr??
Angehängte Dateien:
OP #4117384
Lesenswert?

Thomas Forster schrieb:
> Sawyer Ma schrieb:
>> Ich soll ein TFT Touch
>> Display 7" auf ein Piggyback setzen auf das alle weiteren Piggybacks
>> Zugriff bekommen können über den I2C-Bus oder CAN-Bus.
>
> Das ist ein Display ohne Controller. Du brauchst entweder einen
> Displaycontroller oder einen ARM mit eingebautem Display-Controller.

Aber ich habe doch auf dem Piggyback ein c8051f580, würde der das nicht 
schaffen mit noch 34 freien I/o´s?

Haben die Displaycontroller einen Vorteil gegenüber meines uC 
(Geschwindigkeit, Handhabung)? Ich denke mir halt der Displaycontroller 
muss ja nachher auch wieder irgendwie mit meinem C8051 kommunizieren um 
an den Bus angebunden zu sein.
#4117621
Lesenswert?

Sawyer Ma schrieb:
>> Das ist ein Display ohne Controller. Du brauchst entweder einen
>> Displaycontroller oder einen ARM mit eingebautem Display-Controller.
>
> Aber ich habe doch auf dem Piggyback ein c8051f580, würde der das nicht
> schaffen mit noch 34 freien I/o´s?

Hm, also dir fehlt sowas wie eine Grafikkarte.
Das Display erwartet einen Datenstrom mit 40MHz, Datenblatt Seite 8 
oben.

Prinzipiell kann man sowas auch ohne Displaycontroller machen:
Beitrag "Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen"

Ich würde mich da aber nicht dranwagen, mein Respekt an Benedikt!
Angehängte Dateien:
OP #4117697
Lesenswert?

Ok super danke jetzt hab ich es verstanden was du mir sagen wolltest. 
Also brauche ich Theoretisch so ein Board wie oben angehangen. Dieses 
Steuer ich dann über I2C oder sonstiges (kommt ja dann auf das jeweilige 
Board drauf an) an.

Kennt jemand zufällig noch ähnliche Boards mit TFT 7" Display mit Touch 
(am besten Capacitiv) und am liebsten günstig ;) .
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren