Guten Tag,
ich bin ein 18-jähriger Htl-Schüler (Abteilung Informatik) und mache
dieses Jahr meine Matura. Außerdem habe ich vor nach diesem Schuljahr im
Bereich Automotive Computing zu studieren. Doch bis dahin, möchte ich
mich alleine schon sehr gerne in das Programmieren im Bereich Autos
stürzen und weiß leider nicht wie ich damit anfangen kann.
Im Internet finde ich leider nichts, wie ich ohne irgendeine Erfahrung
in diesem Bereich lernen kann diverse Sachen zu programmieren, z.B.:
Programmieren eines automatischen Lichts an der Tür, welches beim Start
des Auto automatisch angeht.
Deswegen die Frage an euch. Habt Ihr irgendwelche Vorschläge für mich,
wie ich damit anfangen kann? (Ich habe Grundkenntnisse in Java/C#).
Vielen Dank für jede kommende Hilfe,
Liebe Grüße.
Hallo,
das Programmieren im Auto ist nichts wesentlich anderes als anderswo.
Das einzige, was (für Fortgeschrittene) kommt, ist der CAN Bus. Aber bis
dahin sieht alles genau so aus wie anderswo.
Dein automatischeas Licht im Auto bekommt eine Information, aus der
hervorgeht, dass das Licht angehen soll, und das befiehlt sie dann. Im
Grunde also nichts besonderes.
Falls du üben willst, beschaffe dir eines der Arduino-Hardware kits und
installiere den AVR-GCC und die erforderlichen Bibliotheken auf dem
Rechner und fange einfach an mit dem Auslesen eines LDRs, oder mit dem
Ansteuern eines Motors. Beispiele und Hilfe hierzu fondest du übrigens
auch in den Artikeln auf dieser Seite.
Grüsse
Robert
Als Literaturempfehlung kann ich dir das Buch: „Bussysteme in der
Fahrzeugtechnik“ von Ralf Schmidgall und Werner Zimmermann ans Herz
legen.
Es ist meines Erachtens gut verständlich und ziemlich breit gefächert,
am besten die aktuellste Auflage, ich habe vor einigen Jahren mit einer
sehr alten Auflage gearbeitet und war erstaunt, wie stark sich die
Inhalte unterschieden haben.
Wenn es aber um Details geht, müssen andere Informationsquellen
herhalten. Alleine schon über CAN können komplette Bücher geschrieben
werden.
R. F. schrieb:> Das einzige, was (für Fortgeschrittene) kommt, ist der CAN Bus.
Der CAN-Bus ist so alt dass er schon langsam wieder weggeht;-)
Es kommt Automotive Ethernet. Nichtsdestrtrotz ist CAN Grundwissen und
man muss diesen verstehen.
Drew schrieb:> Im Internet finde ich leider nichts, wie ich ohne irgendeine Erfahrung> in diesem Bereich lernen kann diverse Sachen zu programmieren
Natürlich findest du nichts. Die Hersteller geben ihren Quellcode nicht
heraus. Und ohne Erfahrung nützt dir das sowieso nichts.
Sieh dir mal Assembler an un zu verstehen wie Controller arbeiten. Lerne
C. Kein C#, C++, Arduino. Und dann bastel selber was. In einem Jahr
kannst du dann wieder nachfragen:-)
dummschwaetzer schrieb:> geh mal zum schrottie deines vertrauens und hole dir alte Steuergeräte,> mach sie auf und schau was in denen so werkelt: Infineon, ...
Dein Name sei Programm... :-)
Automotive ist m.E. zweigeteilt: Einmal so Dinge wie ein ABS-Sensor oder
ein Regensensor mit einem internen µC die relativ autark arbeiten und
ein paar Daten raushauen/bekommen. Das ist näher an Bare Metal C oder
Assembler.
Und dann das Steuergerät in der Liga von Autosar. Das ist eher Arduino.
Ja, Autosar ist eher C, aber als Privatmensch macht das wenig Sinn. Mit
Arduino gewöhnst Du Dich daran, komische Frameworks unhinterfragt
zusammen zu stöpseln.
Und dann gibt es natürlich noch Vektor und Co die quasi den
Autosar-Unterbau liefern, da bist Du dann eher auf der Ebene ein
Free-RTOS oder so in Betrieb zu nehmen und anzupassen.
Im Automotive Bereich wird nicht programmiert, im Automotive Bereich
betreibt man Software Engineering.
Also setzte Dich unabhängig von der Programmiersprache deines
Vertrauens/Naivität mit Themen wie "Requirement Capturing", "Software
testing" "model driven development", "configuration managment" etc. pp.
auseinander.
Hallo Drew,
ich würde mit einem konkreten Projekt beginnen, das Dich motiviert, bei
dem Du was lernst, und das in nicht allzu langer Zeit auch machbar ist.
Du hast ja schon eine konkrete Projektidee genannt mit der Beleuchtung.
Nimm eine bekannte Hardwareplattform. Zum Beispiel Arduino und lese den
Schaltzustand der Klemme KL15 ein. Spannung liegt bei 12V +-4V. Dazu
einen entsprechenden Spannungsteiler dimensionieren, so dass es zu den
0..5V des Arduinos passt und einlesen.
Zur Ansteuerung des Lichts würde ich ein Smart-Fet nehmen. Oder einen
kleinen Transistor und Relais.
Nimmst Du einen (Smart)-Fet, kannst Du das Licht später auch dimmen. Zum
Beispiel beim Öffenen langsam faden.
Wie R.F. schon erwähnt ist auch der CAN Bus interessant. Wird Dich im
Studium auch begleiten. Aber dazu brauchst Du eine Hardware die CAN
kann. STM32 Board zum Beispiel und Du brauchst einen CAN-USB Adapter,
damit Du auch am PC mal mitlesen kannst. Wenn Du aber tatsächlich an den
CAN Bus des Autos willst wirds schon sehr schwierig. Mitlesen wird
gehen. Aber Du wirst nur schwer Infos über die Signale finden. CAN ist
erst mal was für einen Laboraufbau.
Fang lieber mit einem überschaubaren Projekt an.
... und später kann man die Komplexität ja erhöhen. Du bekommst in
diesem Forum viel Hilfe weil hier viele sind, die so was beruflich
machen. Es gibt aber auch viele Pappnasen. Kleine Trumps. Lass Dich von
denen nicht verwirren.
luux schrieb:> Nimm eine bekannte Hardwareplattform. Zum Beispiel Arduino und lese den> Schaltzustand der Klemme KL15 ein.
Und der Dijkstra rotiert leise im Grab, hat der nicht schon damals
gewettert:
“It is practically impossible to teach good programming to students that
have had a prior exposure to BASIC: as potential programmers they are
mentally mutilated beyond hope of regeneration.”
Ersetz Basic mit Arduino und dieser Seitenhieb wird wieder aktuell,
insbesonders für sicherheitskritische Applikationen.
luux schrieb:>>Lass Dich von denen nicht verwirren.> Kuck - die meinte ich.
Naja, der Wirrkopp bist eher Du.
Da schau ,der TO will was machen, womit er bei einem Bewerbungsgespräch
im Automobilbereich punkten kann. Und wenn der TO auf die Ansage:
"Also wir suchen hier nicht Programmiere von der Stange oder ein Herrn
Österreicher von der HTL, wir suchen schon Bewerber mit Expertise im
Automobilen und ihren ganz speziellen Gemeinheiten " anfängt, er hat mit
einen Arduino für die Chinesische Grundschule schon mal per Klemme 15 an
Spannungsteiler einen Scheinwerfer flackern lassen - da wird er ganz
schnell mit einem Stück Zwetschgendatschi mit Butterstreuseln als
Trostpreis heim geschickt.
Weil, an dem ist so garnichts Automotive, das ist Niveau Partyleuchte im
Diskostadl. Automotive programmieren heisst nun mal automotive Normen,
Prozesse und Arbeitsteilung zu kennen. Und die Hardware so auszulegen,
das sie 10 Jahre Spannungsüberschläge im dreckigen Bordnetz anstandslos
überlebt.
https://mk4-wiki.denkdose.de/artikel/kfz-bordnetz/start
Wenn ich bei meinem Auto die Tür aufmache, schließt ein Schalter einen
Stromkreis und das Licht geht an. Da kann man weder in Assembler noch in
C dem Schalter oder dem Licht etwas anderes erklären. Liegt aber
vielleicht daran das so ein E-Auto zu modern für so altertümliches Zeugs
ist ;-)
MfG
Michael
Klaus Knall schrieb:> Weil, an dem ist so garnichts Automotive, das ist Niveau Partyleuchte im> Diskostadl. Automotive programmieren heisst nun mal automotive Normen,> Prozesse und Arbeitsteilung zu kennen. Und die Hardware so auszulegen,> das sie 10 Jahre Spannungsüberschläge im dreckigen Bordnetz anstandslos> überlebt.
Aber wie kommt man dahin? Indem man die Grundlagen studiert, also
gaaaaaanz unten anfangen. Ich empfehle daher den Anfang mit einer
Hardware vom Arduino und eine Programmierumgebung für C, damit kann man
die Grundlagen lernen.
Das Automotive mit Safety, Störungen im automobilen Umfeld und ähnlichem
kommt dann später.
Grüsse
Robert
R. F. schrieb:> Aber wie kommt man dahin? Indem man die Grundlagen studiert, also> gaaaaaanz unten anfangen. Ich empfehle daher den Anfang mit einer> Hardware vom Arduino und eine Programmierumgebung für C, damit kann man> die Grundlagen lernen.
Die Grundlagen für die Automotive Entwicklung ist nicht arduino sondern
ein sauberes SystemKonzept, strukturierte Entwicklungsprozesse
(Konzeption, Implementierung, Verifikation) und störfeste Kanäle (bspw.
CAN).
Also ein CAN-Board + Framework besorgen, erst mal planen (Requirements
aufschreiben, Betriebszustände definieren, Testplan,-konzept,-umgebung
etc.pp.) und nicht einfach loshacken.
Das Holzschnitzen lernt man auch nicht vom Baumfäller oder aus der
Bedienungsanleitung eines 3D druckers sondern an der Kunstschule durch
Nachahmung der grossen Meister.
Und der Dijkstra hat in seinem bitteren Sarkasmus nicht ganz unrecht,
wer es von Anfang an 'gewöhnt ist', wild ungeprüften Fremdcode
umzuhacken, ist später nur noch schwer in einem
sauberen/nachvollziehbaren Entwicklungsprozess integrierbar:
https://cloudogu.com/images/blog/2018/CleanCode_TheartofProgramming.jpg
Frank Fragmentus schrieb:> erst mal planen (Requirements aufschreiben, Betriebszustände definieren,> Testplan,-konzept,-umgebung etc.pp.) und nicht einfach loshacken.
Das ist doch absurd. Ein HTL-absolvent sollte erst Mal eine
Programmiersprache flüssig sprechen, bevor er Dichtkunst betreibt.
Basic wurde verteufelt, weil es die damals entstandenen Strukturierungen
nicht bot. Sondern z.b. Zeilennummern statt Funktionsnamen.
A. S. schrieb:> Das ist doch absurd. Ein HTL-absolvent sollte erst Mal eine> Programmiersprache flüssig sprechen, bevor er Dichtkunst betreibt.
Nein, er soll erst mal was zu sagen haben. Ob das nun im elegant
gedrechselten Hochdeutsch der Baroquè-Zeit oder im schnoddrigen
'Säksch' über die Lippen perlt, ist zweitrangig.
> Basic wurde verteufelt, weil es die damals entstandenen Strukturierungen> nicht bot. Sondern z.b. Zeilennummern statt Funktionsnamen.
Das verteufelte (Dartmouth) Basic (1964) soll wohl so garnix mit den
heutigen gemein haben:
-Variables names were one letter long with an optional digit
-Although FOR was present - while loops, break and other niceties were
implemented with unrestricted goto.
-Whitespace was optional between expressions.
-Subroutines were available. GOSUB line number and RETURN.
-All parameter passing had to be done with the existing global
variables.
26 user defined functions could exist FNA-FNZ, which could contain one
line of code.
-IF statements were also limited to one line of code.
Dijkstra war ausgebildeter Mathematiker, klar das er da mehr Achtung vor
dem Algo resp. dem Konzept hat, als der Notation.
Frank Fragmentus schrieb:> Im Automotive Bereich wird nicht programmiert, im Automotive Bereich> betreibt man Software Engineering.
Ja, die unheimlich kreativen Software Engineers. Ein mit Arduino
bastelnder Hauptschüler wäre niemals auf folgenden Code gekommen:
if VORDERACHSE == DREHEN and HINTERACHSE == STEHEN:
UMWELTFREUNDLICH()
else:
DIESELSAU()
Karl schrieb:> if VORDERACHSE == DREHEN and HINTERACHSE == STEHEN:> UMWELTFREUNDLICH()> else:> DIESELSAU()
Das ist unbeabsichtigt sogar ein gutes Beispiel. Den Fehlererkennung
„VORDERACHSE == DREHEN and HINTERACHSE == STEHEN“ und Fehlerbehandlung
„UMWELTFREUNDLICH()“ machen 90% von sicherheitskritischer Software aus.
Die reine Funktion „DIESELSAU()“ für den Normalfall sind 10%.
In welche Richtung möchtest Du genau gehen? ADAS, Infotainemtsystem und
dann z.B. Applicationengineer, Embedded Engineer oder HMI Engineer?
Ich empfehle Dir C/C++ und das Qt Framework zulernen, weil das Framework
realtiv oft im Automotive Application, HMI etc. genutzt wird, siehe
Mercedes MBUX. Natürlich gibt es noch Automotive Android Auto als
Betriebssystem, aber auch da kann man Native programmieren.
Zusätzlich ist vom Vorteil CAN, LIN, AUTOSAR und natürlich Automotive
Ethernet zu kennen, aber es kommt wirklich darauf an wo genau du landen
möchtest, weil die Automotivewelt ist riesig bis hin zur
Treiberprogrammierung und eigene OS.
Du solltest dich bei Automtoivezulieferer in deinem Interesserenbereich
für eine Bachelor/Masterarbeit/Praktikumsplatz/Werkstudent bewerben.
Drew schrieb:> Im Internet finde ich leider nichts, wie ich ohne irgendeine Erfahrung> in diesem Bereich lernen kann diverse Sachen zu programmieren, z.B.:> Programmieren eines automatischen Lichts an der Tür, welches beim Start> des Auto automatisch angeht.
Programmieren beim Auto ist auch nicht anderes als irgendetwas anderes
zu programmieren. Bei Fahrzeugen hast du halt CAN-Bus für die
Übertragung.
Ich würde kleinere Mikrocontroller Projekte mit µC deiner Wahl
empfehlen.
Das macht Spaß und man lernt eine Menge.
Afug-Info hat bei ihrem vorletzten Video (8 Leds an 4 Ports) einen evtl.
Programmierkurs auf ihrem Kanal angekündigt, vielleicht da auch mal ab
und zu nachsehen.
https://www.youtube.com/channel/UCmWsa7k8HAGCUhrfPesO77w
Batman schrieb:> Programmieren beim Auto ist auch nicht anderes als irgendetwas anderes> zu programmieren.
Doch ist es. Einer LED tut es nicht weh, wenn man ein IRQ vom Taster
'verklemmt', einem Auto-Insasse stirbt dagegen u.U. wenn die Bremse erst
nach einem 'Watchdog-Reboot' des controllers wegen dem verklemmten IRQ
verzögert aktiv wird.
Und selbst Lampen mit ihren geringen Verbrauch können bspw. übers
wochenende oder länger die Batterie 'leerlutschen' so das gerade Winter
der Motor nicht startet. Und das nur weil das Programmierhansel
vergessen hat alle verbraucher sauber auszuschalten. OK, dieses Problem
sollte von den e_autos an der heimischen Steckdose gelöst sein.
Probleme erst zu lösen, wenn sie erkannt werden ist im Automobil mit
seinen knappen Entwicklungsterminen nicht sinnvoll. Da muss man auf
Automatisierte Tests hin entwickeln, damit in der HIL-gestützten
Verifikationsphase die vollständigen Fehlerreports quasi über Nacht
rauspurzeln.
PS:
Der TO ist an einer Berufsschule für Informatiker, der hat 'irgentwas
programmieren' bereits als Fach im Klassenzimmer.
Klaus Knall schrieb:> Probleme erst zu lösen, wenn sie erkannt werden ist im Automobil mit> seinen knappen Entwicklungsterminen nicht sinnvoll.
Der Umgang mit Asynchronen Events bzw. dessen Tücken gehört zum zwingend
erforderlichen Erfahrungsschatz.
Besser mit einer LED als später im Automobilbau nicht wissen, warum dass
keine gute Idee ist.
A. S. schrieb:> Der Umgang mit Asynchronen Events bzw. dessen Tücken gehört zum zwingend> erforderlichen Erfahrungsschatz.>> Besser mit einer LED als später im Automobilbau nicht wissen, warum dass> keine gute Idee ist.
Ja, ich gehe aber davon aus, das die meisten Besitzer von Boards zum
Programmieren auf LED-Niveau von "Asynchronen Events" und den Umgang mit
anderen Schweinerein kennen und die dimat professionell umgehen können
das nicht vom spielerischen Umgang mit einem LED-Board gelernt haben.
TO schrieb:
> Im Internet finde ich leider nichts,
das stimmt wohl eher nicht, höchstens das das was man findet nicht
Deinem Erwartungen an 'Automotive Programmieren' antspricht:
ISBN: 978-3834824691
ISBN: 978-3658024185
ISBN: 978-1502751522
ISBN: 978-1107183223
Ansonsten mal in professionelles Embedded reinschauen:
Der TO ist an einer Berufsschule für Informatiker, der hat 'irgentwas
programmieren' bereits als Fach im Klassenzimmer.
Das hatten wir am Gymnasium auch. Das Level ist aber derart niedrig, daß man damit noch nicht viel anfangen kann, weil das im Prinzip jeder kann.
Dabei wäre es wichtig, sich durch Qualität von der großen Programmierhorde zu differenzieren. Leider gehen viele den entgegen gesetzten Weg: Schnell, knapp, billig!