Forum: Mikrocontroller und Digitale Elektronik I²C und CAN Bus auslesen und auf einem Monitor (C#) ausgeben


von Stefie (Gast)


Lesenswert?

Hallo, ich hoffe mir kann hier jemand helfen, meine Note steht am Spiel 
:(. Meine Programmierkenntnisse sind zwar nicht schlecht (bin in einer 
Ausbildung(Schule) zur diesem Gebiet), aber mit µControllern werde ich 
einfach nicht warm.

Wir müssen als Projekt einen I²C- und einen CAN-Bus auslesen und diese 
Daten per USB auf ein C#-Programm übertragen, wo diese Daten dann 
angezeigt werden und gleichzeitig in einem LOG-File gesichert werden.

Wir arbeiten mit einem Atmega 2560, falls das jemandem hilft.

Nun zu meinem Problem: Ich habe keinen blassen Schimmer, wie das 
funktionieren soll und auch durch gründliche Recherche bin ich keinen 
Punkt weiter gekommen. Meine Teamkollegen sind auch keine große Hilfe, 
die haben noch weniger Ahnung wie ich.

Würde mich über jede noch so kleine Hilfe wahnsinnig freuen :)

Liebe Grüße einer verzweifelten Schülerin!

von Horst (Gast)


Lesenswert?

Stefie schrieb:
> Wir müssen als Projekt ...

Irgendwie scheint sich die Schule in den letzten Jahren sehr geändert zu 
haben. Zu meiner Zeit wurden die Grundlagen gelehrt und man hatte 
Schulbücher zum Nachschlagen bevor irgendwelche Aufgaben gestellt 
wurden.
Und für den Einstieg waren es selten so komplexe.
I2C läßt sich z.B. auf einem ATMega der die Adressierung in der Hardware 
auswertet nicht so einfach mitlesen, dafür muß man sich eine 
SoftwareEmulation schreiben oder einenn anderen Prozessor nehmen, die 
Tinys mit USI-I2C können das z.B.

von Stefie (Gast)


Lesenswert?

Schon mal danke für die Antwort :)

Wir haben zwar im Vorjahr mal ganz kurz über I²C gesprochen, aber nie 
wirklich Projekte dazu gemacht. Dieses Jahr mach ich meinen Abschluss 
und plötzlich glauben alle Lehrer wir müssten wissen, wie all das geht. 
Bücher haben wir schon seit 3 Jahren nicht mehr. Wer etwas wissen will, 
muss es im Internet finden oder jemanden kennen, der es weiß.

Laut Lehrkraft sollen die ausgelesenen Daten einfach über die 
USB-Schnittstelle an das C#-Programm gesendet werden. Dort sollen diese 
dann in einer RichTextBox ausgegeben werden.

Die Anwendung mit C# dürfte nicht so schwer sein, nur leider weiß ich 
einfach nicht, wie ich die Daten bekomme :/

von H.Joachim S. (crazyhorse)


Lesenswert?

Wie sieh es denn mit deinen Mitschülern aus? Auch alle keine Ahnung? Zu 
zweit oder dritt kann man oft besser arbeiten.

CAN ist im Prinzip einfach. Nimm einen Transceiverbaustein für die 
physikalische Ankopplung und einen CAN-Controller (MCP2551 und MCP2515 
z.B.)
Der CAN-Controller hört nur zu, löst einen Interrupt aus, wenn eine 
vollständige Nachricht empfangen wurde und du kannst sie per SPI 
auslesen und weiterverarbeiten. Ich würde an deiner Stelle nicht 
versuchen, es mit Softwareemulation zu versuchen.

Die Problematik beim I2C wurde schon angesprochen. Auch da einen 
geeigneten Baustein vorschalten. Oder, bei moderater Busgeschwindigkeit, 
mit Software-I2C.

Wenn dir das alles aber gar nichts sagt, wird dir schnell die Zeit 
ausgehen.

von Timo N. (tnn85)


Lesenswert?

Ganz einfach:


Du brauchst:

- Einen CAN Transceiver (z.B von NXP)
- Einen CAN Controller (sofern der ATmega keinen hat. Der 2560 hat 
keinen. Die AT90xxx oder ATmegaxxM1 haben einen integriert.)
- Den ATmega als Schnittstellenkonverter
- Einen UART<->USB IC (z.B einen FTDI FT232 )

Dann bekommst du die Daten am PC über eine COM-Schnittstelle. Diese 
kannst du leicht mit C# lesen und brauchst dich um Treiber nicht zu 
kümmern. Die Treiber liefert der FTDI.

von Felix F. (wiesel8)


Lesenswert?

Es wurde ja schon ein bisschen was geschrieben...

I2C: Entweder per Software (langsam) oder per extra IC (extra Aufwand + 
IC)
CAN: externer Controller @crazyhorse
USB: FTDI Baustein (Virtueller Comport)

mfg

von W.A. (Gast)


Lesenswert?

H.Joachim S. schrieb:
> Wie sieh es denn mit deinen Mitschülern aus? Auch alle keine Ahnung? Zu
> zweit oder dritt kann man oft besser arbeiten.

Wenn es selbst bei den Älteren schon am Leseverständnis scheitert ...

Stefie schrieb:
> Meine Teamkollegen sind auch keine große Hilfe,
> die haben noch weniger Ahnung wie ich.

von Häkelnadel (Gast)


Lesenswert?

@ Stefie

Drei Hypothesen:

- dein Name ist nicht Stefie
- es gibt keine Schulaufgabe
- du bist ein Troll

von Stefie (Gast)


Lesenswert?

Wow, vielen Dank für die vielen Antworten!

Bezüglich meiner Klasse: Wir sind alle am selben Niveau, paar verstehen 
zwar was sie machen sollen, aber haben eben auch keine Anhaltspunkt, was 
sie da eigentlich machen sollen. Unsere Lehrkräfte sind der Meinung wir 
müssen es ohne sie schaffen.

Mir sagen die ganzen Sachen sehr wenig, aber ich werde mal probieren, ob 
ich mit den Schnipseln etwas anfangen kann.

Ich weiß es klingt jetzt etwas dümmlich, aber welche Funktionen würde 
ich denn brauchen, damit ich irgendwas zum Laufen bringe? I²C benötigt 
irgendwas mit SCL und SDA, wenn ich das richtig verstanden habe.

CAN: gibt es da auch Funktionen, die man allgemein verwenden kann? z.B. 
CANRead?

Timo N. schrieb:
> Dann bekommst du die Daten am PC über eine COM-Schnittstelle. Diese
> kannst du leicht mit C# lesen und brauchst dich um Treiber nicht zu
> kümmern. Die Treiber liefert der FTDI.

Brauch ich für FTDI irgendeine library oder ist das etwas vorgefertigtes 
von Microsoft? (C# programmieren wir im Visual Studio 2015)

von Stefie (Gast)


Lesenswert?

Häkelnadel schrieb:
> @ Stefie
>
> Drei Hypothesen:
>
> - dein Name ist nicht Stefie
> - es gibt keine Schulaufgabe
> - du bist ein Troll

-Doch, mein Name ist Stefie
-Doch die gibt es. Sitze in einer HTL und hab noch 3 Stunden 
Projektunterricht und bin genauso weit wie vor zwei Wochen :/
-kein Troll --> Mädchen ^^

von W.A. (Gast)


Lesenswert?

Stefie schrieb:
> Brauch ich für FTDI irgendeine library oder ist das etwas vorgefertigtes
> von Microsoft?

Der Treiber zum USB-Seriell Adapter stellt auf dem PC gewöhnlich einen 
virtuellen Seriellen Port bereit, der wie jeder andere COM-Port vom 
Programm angesprochen werden kann und auch im Gerätemanager beim 
Einstecken des Adapters so auftaucht.

von Felix F. (wiesel8)


Lesenswert?

Der FTDI ist ein Baustein. Du hängst einfach den USART des AVR an den 
FTDI und schickst am USART einfach "ABC" raus. der FTDI gibt sich am PC 
dann als (virtueller) Serieller Port aus. In C# öffnest du einfach 
diesen seriellen Port 
([[https://msdn.microsoft.com/de-de/library/system.io.ports.serialport(v=vs.110).aspx]]) 
und liest ihn aus und erhälst dann "ABC". Damit kannst du ganz leicht 
Daten zwischen AVR und PC austauschen.

Am besten liest du dir überhaupt einmal durch, was I2C etc ist.
[[https://de.wikipedia.org/wiki/I%C2%B2C]]
[[https://de.wikipedia.org/wiki/Controller_Area_Network]]

mfg

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Die Aufgabe ist ganz großer Quatsch.
I2C arbeitet mit 100kBit, CAN mit 1MBit, d.h. die Daten rauschen nur so 
am Bildschirm vorbei und man kann nichts erkennen.
Der ATmega2560 hat kein CAN und kein USB, ist also der völlig falsche MC 
dafür und bei den nötigen Datenraten auch zu schwach.

Eh man einen Bus sniffen kann, muß man erstmal eine funktionierende 
Punkt zu Punkt Verbindung programmiert haben. Sniffen ist sozusagen die 
hohe Schule der Kommunikation.

Ein guter Lehrer stellt nur solche Aufgaben, von denen er auch selber 
mindestens eine Lösung parat hat.
Schade, daß ihr solche schlechten Lehrer habt, die sollten sich was 
schämen.

von Horst (Gast)


Lesenswert?

Stefie schrieb:
> Ich weiß es klingt jetzt etwas dümmlich, aber welche Funktionen würde
> ich denn brauchen, damit ich irgendwas zum Laufen bringe?

Du brauchst erstmal einen Prozessor, der dafür geeignet ist I2C und Can 
mitzulesen.
Dann mußt Du nur alles, was über diese Busse läuft, lesen und per USB an 
den Rechner schicken und hoffen, daß es schnell genug klappt, daß auch 
alles ankommt.

Stefie schrieb:
> I²C benötigt
> irgendwas mit SCL und SDA, wenn ich das richtig verstanden habe.

So heissen die Datenleitungen bei I2C.

Sorry, aber ich hab daß Gefühl, daß Du entweder die Aufgabenstellung 
falsch rüber gebracht oder zwei Jahre geschlafen hast.
Mit dem Wissen, das Du hier zeigst, ist die Aufgabe nicht lösbar.

von Stefie (Gast)


Lesenswert?

Horst schrieb:
> Sorry, aber ich hab daß Gefühl, daß Du entweder die Aufgabenstellung
> falsch rüber gebracht oder zwei Jahre geschlafen hast.
> Mit dem Wissen, das Du hier zeigst, ist die Aufgabe nicht lösbar.

Nein, ich glaub ich hab sie richtig rübergebracht. Aber ich probier es 
gerne nochmal.
-> Es gibt zwei Busse: -CAN und I²C
-> Hardware wird uns zur Verfügung gestellt, also geht es rein um die 
Softwarelösung (hab ich gerade erfahren)
-> Auslesen der Daten der beiden Busse mit C und Übertragung von 
µController an PC (C#-Programm) per USB-Schnittstelle
-> Ausgabe auf C#-Anwendung

2 Jahre hab ich nicht geschlafen, nur für mich ergibt C-Programmierung 
bzw. µController Programmierung keinen Sinn. Ich versteh das einfach zu 
wenig, wenn ich ehrlich bin. Für mich steht auch nur mehr im 
Vordergrund, dass ich dieses Jahr abschließe und endlich etwas anderes 
anfangen kann, weil ich selbst weiß, dass dies nicht meine Zukunft 
werden wird. Zur Verteidigung: Ich breche nicht im 4. oder 5. Schuljahr 
ab, wenn ich so kurz vor der Matura stehe!

von timermensch (Gast)


Lesenswert?

Stefie schrieb:
> Horst schrieb:
>> Sorry, aber ich hab daß Gefühl, daß Du entweder die Aufgabenstellung
>> falsch rüber gebracht oder zwei Jahre geschlafen hast.
>> Mit dem Wissen, das Du hier zeigst, ist die Aufgabe nicht lösbar.
>
> Nein, ich glaub ich hab sie richtig rübergebracht. Aber ich probier es
> gerne nochmal.
> -> Es gibt zwei Busse: -CAN und I²C
> -> Hardware wird uns zur Verfügung gestellt, also geht es rein um die
> Softwarelösung (hab ich gerade erfahren)
> -> Auslesen der Daten der beiden Busse mit C und Übertragung von
> µController an PC (C#-Programm) per USB-Schnittstelle
> -> Ausgabe auf C#-Anwendung
>
> 2 Jahre hab ich nicht geschlafen, nur für mich ergibt C-Programmierung
> bzw. µController Programmierung keinen Sinn. Ich versteh das einfach zu
> wenig, wenn ich ehrlich bin. Für mich steht auch nur mehr im
> Vordergrund, dass ich dieses Jahr abschließe und endlich etwas anderes
> anfangen kann, weil ich selbst weiß, dass dies nicht meine Zukunft
> werden wird. Zur Verteidigung: Ich breche nicht im 4. oder 5. Schuljahr
> ab, wenn ich so kurz vor der Matura stehe!

Dass du mit diesem Wissen überhaupt bestehen kannst sagt so ziemlich 
alles...

Scheine sagen noch lange nicht, dass jemand etwas kann.

von Felix F. (wiesel8)


Lesenswert?

Welche Hardware wird euch zur Verfügung gestellt? Eine die genau auf die 
Aufgabe ausgelegt ist oder einfach irgendein sonstwas Eval-Board mit dem 
ihr mal machen sollt...?

Was ist schon an Software vorgeben? Was genau ist mit USB-Schnittstelle 
gemeint? Wenn ihr hierfür einen kompletten USB-Treiber programmieren 
müsst, dann wird das mit dem Abschluss wohl noch ein paar Jahre 
dauern...

mfg

von Stefie (Gast)


Lesenswert?

timermensch schrieb:
> Dass du mit diesem Wissen überhaupt bestehen kannst sagt so ziemlich
> alles...
>
> Scheine sagen noch lange nicht, dass jemand etwas kann.

4 gewinnt, mit der Einstellung leben sehr viele in meiner Klasse, weil 
wir alle wissen, dass wir nicht wirklich was gelernt haben bisher.

Ich hab auch nicht vor in dieser Sparte zu bleiben.

von Stefie (Gast)


Lesenswert?

Felix F. schrieb:
> Welche Hardware wird euch zur Verfügung gestellt? Eine die genau auf die
> Aufgabe ausgelegt ist oder einfach irgendein sonstwas Eval-Board mit dem
> ihr mal machen sollt...?
>
> Was ist schon an Software vorgeben? Was genau ist mit USB-Schnittstelle
> gemeint? Wenn ihr hierfür einen kompletten USB-Treiber programmieren
> müsst, dann wird das mit dem Abschluss wohl noch ein paar Jahre
> dauern...
>
> mfg

Wir bekommen einen Atmega 2560 mit MCP2515 für CAN und über einen Port 
mit einem I²C Bus verbunden (keine Ahnung wie diese Hardware aussieht)

Software ist nicht vorgegeben. Es sollen eigene Funktionen geschrieben 
werden, die das Auslesen ermöglichen.
USB-Schnittstelle: USB zwischen µController und PC: über diesen werden 
die Daten gesendet. Brauchen keinen Treiber laut Lehrer, Serial Port 
lässt sich mit einer Anweisung anscheinend auslesen.

Ich brauch den Abschluss leider, noch ein Jahr schaff ich hier drinnen 
echt nicht :/

von Horst (Gast)


Lesenswert?

Stefie schrieb:
> -> Auslesen der Daten der beiden Busse mit C und Übertragung von
> µController an PC (C#-Programm) per USB-Schnittstelle

Auslesen als Master, Slave oder passiv mitlesen?

Stefie schrieb:
> Wir bekommen einen Atmega 2560 mit MCP2515 für CAN

Und so nach und nach kommen auch die wichtigen Informationen.

Und der Mega 2560 sitzt nicht zufällug auf einem Arduino Mega 2560 und 
wird mit der Arduino-IDE programmiert?

von Stefie (Gast)


Lesenswert?

Horst schrieb:
> Auslesen als Master, Slave oder passiv mitlesen?

passives mitlesen.

Horst schrieb:
> Und so nach und nach kommen auch die wichtigen Informationen.
>
> Und der Mega 2560 sitzt nicht zufällug auf einem Arduino Mega 2560 und
> wird mit der Arduino-IDE programmiert?

Keine Ahnung, kann aber leicht sein. Wenn Arduino-IDE das AVRStudio ist, 
wo man in C programmiert, dann ist es das, sonst nicht.

Tut mir leid, wegen meinem extremen Nichtwissen :/

von Horst (Gast)


Lesenswert?

Stefie schrieb:
> Tut mir leid, wegen meinem extremen Nichtwissen

Naja, auf dem Stand bleibt nur, daß jemand diese Aufgabe komplett für 
Dich erledigt.
Das ist nichts für mich.

von Felix F. (wiesel8)


Lesenswert?

Nein, das AVR Studio ist etwas anderes.
Ganz grob gesagt:
Arduino -> Anfänger
AVR Studio -> Fortgeschritten/Experten

Sagt dir SPI, I2C, Flash, Debuggen, RAM, GPIO, (USART, Serielle 
Schnittstelle, RS232), Programmer, Protokoll, Interrupts etwas??

Wenn dir nicht mindestens 80% der Begriffe geläufig sind, kannst du es 
ohne umfangreiche Hilfe vergessen.

Wie viel Zeit ist für das Projekt überhaupt vorhanden?

mfg

von Peter D. (peda)


Lesenswert?

Stefie schrieb:
> nur für mich ergibt C-Programmierung
> bzw. µController Programmierung keinen Sinn.

Das lernt man auch nicht von jetzt auf gleich.
Die Aufgabe sinnvoll in einzelne Module zu unterteilen und diese dann zu 
implementieren, braucht viel Erfahrung.

So ein Sniffer ist nicht ohne. Und dann noch 2 verschiedene Busse 
gleichzeitig. Da hätten selbst Profis dran zu knabbern.

Stefie schrieb:
> USB-Schnittstelle: USB zwischen µController und PC: über diesen werden
> die Daten gesendet. Brauchen keinen Treiber laut Lehrer, Serial Port
> lässt sich mit einer Anweisung anscheinend auslesen.

Das riecht stark nach UART-USB Konverter. Also noch ne weitere 
Schnittstelle mit Protokoll darüber stülpen. Die UART ist damit 
hoffnungslos überfordert.
Ne, sowas unünberlegtes würde ich als Aufgabe ablehnen.

von Horst (Gast)


Lesenswert?

Peter D. schrieb:
> Die UART ist damit hoffnungslos überfordert.

Naja, zumindest für I2C bis 100kHz geht das mit nem Tiny45, stammt, 
glaub ich, sogar von Dir das Projekt.

von Felix F. (wiesel8)


Lesenswert?

Mit CAN funktionierts auch, sofern nur wenige Nachrichten pro Sekunde 
kommen. Und praktischen Nutzen muss so ein Schulprojekt ja sowieso nicht 
haben.

Und so als prinzipielles Anschauungsprojekt finde ich die Idee jetzt gar 
nicht so schlecht, nur hat unsere liebe Stefie im Unterricht nicht 
aufgepasst oder die Lehrer haben zu hohe Anforderungen....

mfg

von Timo N. (tnn85)


Lesenswert?

Hallo Stefie,

mit den nun erhaltenen Hintergrundinformationen möchte ich eine Sache 
anmerken.

Deine Ehrlichkeit ist zwar löblich, aber strategisch um hier Hilfe im 
Forum zu bekommen geradezu schädlich. Niemand ist motiviert dir zu 
helfen, wenn du nur irgendeine "vier gewinnt" Aufgabe zu lösen hast, um 
danach etwas anderes zu machen.

Die Lösung deines Problems schaut ganz anders aus:

1) Dein Lehrer hat den Lehrauftrag verfehlt und man müsste man ein 
Wörtchen mit ihm reden. Sowas kann keiner von euch verlangen, wenn das 
Wissen nicht vorher gelehrt wurde.
oder
2) Du hast absolut nichts aus dem Kurs mitgenommen und versuchst nun mit 
minimalem Aufwand 5 vor 12 irgendetwas zu retten. Hier wäre eher 
angebracht schon jetzt sich mit der alternativen beruflichen Zukunft in 
einem anderen Gebiet zu beschäftigen. Der Abschluss in diesem Fach wird 
dir für diese sowieso nichts bringen.

Versteh mich nicht falsch, aber man kann das aus der Ferne nicht 
einschätzen wie die Lage ist. Auf jeden Fall werdet ihr mit deinem uns 
vermittelten Wissen in absehbarer Zeit nichts auf die Beine stellen 
können. Das weiß ich aus eigener Erfahrung. Das ist kein Vorwurf, nur 
eine Tatsache. Ich glaube die meisten hier im Forum werden mir da 
zustimmen.

Ich bin absolut keiner Dauerpessimisten hier im Forum, aber da ich nun 
von deiner Motivation gehört hab, weiß ich, dass es dir auch nicht so 
wichtig ist.

von Felix F. (wiesel8)


Lesenswert?

Kleiner Nachtrag:
Für ein Schulprojekt finde ich die Aufgabe auch ein bisschen zu Hoch 
gegriffen. Sowas ist eigentlich schon ein nettes Projekt für Studenten 
der entsprechenden Fachrichtung.
Zudem sollte hier im Team gearbeitet werden. Z.B. 1 PC SW, 1 I2C Teil, 1 
CAN Teil oder so...
Hier ist man locker im Bereich von mehreren Hundert Stunden.

mfg

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
Noch kein Account? Hier anmelden.