Welche Programmiersprache für meine spez. Interessen?

Tellurium

Cadet 1st Year
Registriert
Apr. 2014
Beiträge
11
Hallo,
vor 15 Jahren habe ich an der Uni mal eine Java-Vorlesung mit Übungen angefangen, nach einigen Monaten aber abgebrochen. Hängengeblieben ist so gut wie nichts, außer daß ich noch weiß welche Variablentypen es gibt, paar Schleifenkonstrukte sind noch im Hinterkopf, aber natürlich nichts mehr von der Java-Syntax. Nun möchte ich mit dem Programmieren wieder anfangen.

Als Anfänger wären möglichst schnelle Erfolgserlebnisse natürlich schön. Die Sprache sollte nicht zu exotisch sein, so daß ein späteres Lernen einer oder gar mehrere weiterer Sprachen maximal erleichtert wird.

Was mich besonders interessiert sind zwei Themen:

1) Mustererkennung/maschinelles Lernen. Ich hatte eine zeitlang mit Spezialsoftware für automatiserte Mikroskopiesysteme zur automatischen Analyse histologischer Präparate zu tun hatte. Die Möglichkeiten automatisierte Suchen nach definierten Objekten/Mustern ablaufen zu lassen fand ich faszinierend. Eigentlich auch ganz allgemein das Thema maschinelles Lernen. Ich weiß, daß dies ein hochkomplexes sehr mathematisches Thema ist und in Richtung neuronale Netze geht. Mir geht es nur darum ein wenig zu lernen, welche Algorithmen solcher Software zur Mustererkennung bzw. selbstlernenden Systemen eigentlich zugrunde liegen.

2) Hardwaresteuerung. Steuerung von Sensoren, Meß- und Regeltechnik, Relais, Elektromotoren, einfachen Robotern, etc...
Sensoren auslesen und das ganze in einem Graphen darstellen wäre vielleicht mein erstes Ziel. Aber eben auch direkte Steuerungsaufgaben.

Oje, zwei seeehr verschiedene Bereiche. Und dann soll die Sprache auch noch halbwegs anfängerfreundlich sein. Was wäre da der beste Kompromiss?

Aus den Antworten zu allgemeinen Fragen nach geeigneter Anfängersprache liest sich Python oft als gute Wahl heraus. Bin schon drauf und dran damit anzufangen. Aber wie sieht es da mit Potential zur Hardwaresteuerung aus? Java als eine der Standard Einstiegssprachen an der Uni ist dafür aber wohl noch wesentlich schlechter geeignet, oder? Vielleicht doch mit C++ anfangen, zumal dies neben der hohen Verbreitung auch noch extrem universell ist? Aber dafür ist C++ für Anfänger wohl eine der schwereren Sprachen?
Ich hatte auch schon daran gedacht mir einen Raspberry Pi zu kaufen und wenn ich Spaß dran finde evtl. danach noch einen Arduino. Bei beiden ginge es erstmal weniger um konkrete Projekte als um dem Modellcharakter als Lernsystem.
 
Also du definierst dir zwei gar nicht so einfach Problemgebiete.

1.) Mustererkennung: Super schwer, da ist die Programmiersprache erst mal egal, du brauchst die Algorithmen.
2.) Hardwaresteuerung: Am einfachsten via Lego Mindstorms, falls du so was daheim hast, sind da die ersten Schritte echt einfach -> schnelles Erfolgserlebnis. Raspberry Pi hat das Problem, dass du irgendwas an die GPIO ranbauen musst. Solltest du kein Hobbyelektrobastler sein, wird das für dich nicht so einfach.

Für RPi wird oft Python empfohlen. Java ist da glaub nicht so gut, da dort die GPIO-Schnittstelle nicht/nicht gut implementiert ist.
C++ ist in der Gesamtheit komplex, das stimmt, wenn man sich aber bei den Grundlagen nicht gleich auf alles konzentriert, schafft man schon einiges.
Für schnelle Ergebnisse hab ich persönlich mit PHP in Verbindung mit einem Webserver gute Erfahrungen gemacht, da man mit HTML/CSS schnell das ganze auch schön bunt bekommt.

Mein Tipp:
Schau, was du hast, maschinelles Lernen ist ein sehr schweres Thema. Robotik ist teuer.
Die Programmiersprache ist erst einmal egal, sollte aber eine oft benutzte sein (bessere Doku im Internet und mehr Laien mit Problemen :) ).
Ich denke, du wirst mit einer Hochsprache (wie Java, Python, PHP) gut fahren, da dort es schwer ist, schwer zu entdeckende Fehler zu machen. Am Anfang würde ich mir kleine Ziele stecken (Tic-Tac-Toe z.B.). Wenn du erfahrener bist, kannst du dann besser einschätzen, was du schaffst und was zu groß für dich ist.
 
Für den ersten Punkt eignet sich eventuell MatLab. Das hat auch eine relativ einfache Syntax. Der Funktionsumfang erschlägt einen aber, dafür sind aber auch schon einige Dinge wie Mustererkennungsalgorithmen und grafische Auswertung eingebaut. Man muss das nur noch sinnvoll zusammenbringen. Von der Programmierung erinnert es etwas an Java.

Btw, ein neuronales Netz ist einfach aufgesetzt. In Java sind das nur anderthalb Seiten Code. Man kann bei Perzeptrons aber generell die reale Verarbeitung nur schwer nachvollziehen. Ab 20, 30 Neuronen ist man schlicht überfordert.


Für Sensortechnik usw. kann man Arduino verwenden. Es gibt da auch Software, wie man einen Arduino mit MatLab verbindet. Das klingt nach dem, was du brauchst. Mit Arduino solltest du recht schnell Erfolgserlebnisse haben. An einem Samstag hast du den Schaltplan zusammengeklöppelt und am Sonntag ist es zusammengelötet.
Wenn du nicht mit Schaltplänen und Löten klarkommst, kannst du auch auf Komplettsysteme wie TinkerForge zurückgreifen. Da ist alles fertig und du muss es nur noch Lego-artig zusammenstecken. Ein Binding für MatLab gibt es da auch. Natürlich ist das teurer als ein Arduino mit ein paar Kabeln und Sensoren.
 
Ich würde mal so sagen, die Kernelemente jeder Programmiersprache sind vergleichbar, übertragbar und im Grunde genommen relativ identisch.

Kern jeder Programmiersprache bilden u.a.: Variablen / Konstanten Deklaration und -Zuweisung, (bedingte), Operationen, Vergleiche, Schleifen, Prozedur- oder Unterprogrammaufrufe.
Wendet man OOP (objektorientierte Programmierung) an dann noch Objekt- bzw. Klassenbau

Hier mal am Bespiel einer Zählschleife gezeigt:

Java
for(int i=0; i<10; i++)
{
// Befehlsfolge, die öfters ausgeführt werden soll
}

C++
for(int i=0; i<10; i++)
{
// Befehlsfolge, die öfters ausgeführt werden soll
}

Pascal / Delphi
for i := 1 to 10 do begin
{Befehlsfolge, die öfters ausgeführt werden soll}
end;

BASIC
FOR i = 1 TO 10 STEP 1
REM Befehlsfolge, die öfters ausgeführt werden soll
NEXT i

Python
for i in range(1,10):
# Befehlsfolge, die öfters ausgeführt werden soll

Im Grunde unterscheiden sich die Sprachen durch ihre Anwendung u.a. bestimmt durch Zielplattform und Compiler sowie Bibliotheken. Bibliotheken machen dem Programmierer das Leben leichter, insbesondere wenn es um grafische Oberflächen geht. Da man nicht alles selbst neu "erfinden" muss sondern bestehende Standardfunktionen einfach einbinden und nutzen kann.

Zum Thema Bild- / Mustererkennung. Dies ist, wie mein Vorredner und du selbst schon sagten, sehr Algorithmen-lastig.
Hier kommt es darauf an was man vor hat. Will man z.B. neuronale Netze oder Klassifikatoren und insbesondere deren Algorithmen verstehen ist es sicher sionnvoll anhand von Beispielen diese selbst zu testen und versuchen den Algorithmus zu verstehen.
Möchte man jedoch eine Anwendnung schreiben kann man auch fertige Bibliotheken nutzen und diese für die individuelle Anwendung anpassen. Dafür sollte man grob das Wirken des Algorithmus und besonders der Zusammenhänge verstehen, aber man muss ihn nicht selbst Programmieren. Hier empfielt sich sicher MATLAB / Octave wegen der mächtigen wissenschaftlichen Bibliotheken.

Hardwarenahe Programmierung ist nun wieder ein anders Thema. Kleine Hardwarenahe Applikation auf µC's (Mikrocontrollersystemen) ohne Betriebssystem kann man auch heute noch in Assembler schreiben, dadurch lernt man die Hardware sehr gut kennen. Timer, LED's Blinken lassen, ADC und DAC alles das geht auch in Assembler. Etwas leichter wird es, wenn man C nutzt (nicht C++). Hier geht es auch ohne OOP (objektorientierte Programmierung)

MSR (Messen - Steuern - Regeln) ist aber ein weites Thema, das kann eine SPS sein, die über spezielle Tools zu programmieren ist oder aber auch PC-Karten zum Messen, Steuern, regeln. Hier gibt es z.B. Labview, welches es ermöglicht auf grafischem Wege zu Lösungen zu kommen.

Raspberry Pi / Arduno sind Embedded Systeme mit Betriebssystem. Ich denke hier ist man am besten in C++ aufgehoben. Ist ja viel Linux "drin" hier. ;)

Aber wie gesagt der Kern von "Allem" ist gleich bzw. relativ ähnlich. Daher sage ich immer, wer einmal das Prinzip des Programmierens verstanden hat, für den ist ein ein Leichtes, statt Programmiersprache A halt Programmiersprache B zu nutzen.
Unterschiede würde ich eher im Ziel des fertigen Programms ausmachen wollen. Hardwarenahe Programmierung bedeutet meistens ein fundiertes Wissen über die Hardwarefunktionen. Hier hat i.d.R. ein Elektrotechniker / Elektroniker Vorteile gegenüber einen "reinen "Informatiker. Geht es um wirkliche Algorithmen und Mathematik-lastige Algorithmen punkten Mathematiker aber auch Physiker. Und der Informatiker kennt halt (oder sollte dies) die hohe Schule des "sauberen" Programmierens.
Das nur am Rande als Tendez zu den Leuten, die sich insgesamt auf dem großen Gebiet so tummeln (Schnittmengen und Quereinsteiger gibt es aber auch immer). ;)
 
Zuletzt bearbeitet:
Für solche(eher akademischen) Sachen ist Python eigentlich prädestiniert. Schnell zu lernen, kaum Fußangeln und leichter Zugriff auf Fremdbibliotheken. Außerdem ist es unter Akademikern momentan ziemlich verbreitet, so dass du potentiell viele Quellen findest.
 
Die Ingenieure stehen scheinbar auf MatLab, einfacher geht's wirklich nicht. Ist fast wie Pseudocode.
 
Ich hab auf der Uni eine LVA Mustererkennung gemacht. Wir haben dabei MatLab verwendet und das war echt perfekt dafür geeignet. Kann ich nur empfehlen.
Als Buch für die Algorithmen Pattern Classification
 
Für Matlab/Octave besteht bei mir i.d. Tat Interesse und ich werde mich damit wohl auf jeden Fall mal ein bißchen beschäftigen, da ich unabhängig vom Programmieren über meine Mathematik-Auffrischung (bißchen Differential-/Integralrechnung mal wiederholt, lineare Algebra und Statistik-Kenntnisse sind hingegen leider völlig verschüttet) und damit verbundenem Einstieg in einfache Computeralgebrasysteme darauf kam. Habe bereits ein bißchen mit Octave rumgespielt, aber quasi nur als "Taschenrechner" genutzt, um die Bedienung ein wenig kennenzulernen. Bei meiner bisherigen Recherche zum Thema Mustererkennung/maschinelles Lernen bin ich dann auch ständig darauf gestossen.

Hier fiel das Stichwort "Klassifikatoren". Genau um deren Verständnis geht es mir u.a. In der erwähnten Spezialsoftware zur automatisierten Analyse histologischer Präparate habe ich gelegentlich Klassifikatoren über die grafische Bedienoberfläche erstellt: in unzähligen Beispielfotos von Zellpräparaten die gesuchten Objekte umrahmen, paar Parameter in Dropdown-Menüs anpassen und daraus errechnete die Software dann selbstständig einen Klassifikator. Die Resultate waren bei der für Laien bestimmten Vorgehensweise natürlich sehr durchwachsen und es war nur schwer nachvollziehbar, aus welchen Gründen ein Klassifikator dann gut oder schlecht wurde. Die von der Firma selbst im Rahmen des Supports gelieferten Klassifikatoren waren stets um Längen besser und offenbarten das wahre Potential der Software. Der Umgang mit derartiger Software war also ohne Kenntnis der zugrundeliegenden Algorithmen sehr unbefriedigend. Alles lange her, aber daraus entspringt mein Interesse hierfür. Und beim recherchieren zu dem Thema stößt man ja auch auf andere interessante Anwendungsbereiche von maschinellem Lernen/neuronalen Netzen.

Beim Thema Hardwaresteuerung geht es mit v.a. auch um ein grundsätzliches Verständnis der Funktionsweise von Elektronik, Mikrocontrollern und Prozessoren. Mich stört es irgendwie, daß ich in allen Lebensbereichen von mikroprozessorgesteuerter Elektronik umgeben bin aber praktisch nichts über deren Funktionsweise weiß.
Daß ich mir für Raspberry Pi- und/oder Arduin-Experimente auch einen Lötkolben und ein Grundset an Elektronikbauteilen anschaffen müsste ist mir natürlich klar. Dürfte aber momentan leider nicht viel kosten. Aber es ginge es ja wie gesagt erstmal nur um ganz einfache Programmier-/Elektronikexperimente mit Modellcharakter um grundsätzliches Funktionsverständnis zu schaffen. Bin da grad nur am Schwanken, ob lieber den universelleren Raspberry Pi oder den Arduino mit seinen speziellen Stärken.

Daß Python im akademischen Bereich unter Naturwissenschaftlern sehr verbreitet ist habe ich schnell gemerkt. Daher nochmal explizit die wichtige Frage => wie sieht es bei Python als Interpretersprache mit dem Potential zur Hardwaresteuerung aus?

Kann man bei Bedarf eigentlich umkompliziert C++-Code und Bibliotheken in Python Programme "einbauen", um bspw. auf dessen Stärken bei speziellen hardwarenahen Aufgaben zurückzugreifen, für die übrigen Programmteile hingegen die Stärken (und vlt. auch den u. Umständen geringeren Programmieraufwand) von Python nutzen?
Falls ja könnte ich vielleicht Python als einfach zu erlernende Einstiegssprache wählen (mit dem Gedanken damit schneller kleine Erfolgserlebnisse zu erzielen um die Motivation aufrechtzuerhalten) und nach Aneignung eines zumindest soliden Anfängerwissens parallel dazu in C++ einsteigen, mich dort aber erstmal auf die Bereiche zu beschränken, die als Ergänzung zu Python dienen können.

Die Möglichkeit auf umfangreiche Bibliotheken für die zwei genannten Interessengebiete zurückgreifen zu können wäre super. Wäre dann ja auch ein klares Signal, daß die Sprache für diese Bereiche gut geeignet ist und daß es eine große User-Community mit ähnlich gearteten Interessen und entsprechend guten Austauschmöglichkeiten in Foren und Dokumentationen zu speziell diesen Themen gibt. Letzteres für mich als absolutem Dummie natürlich extrem wichtig.

Also sollte hardwarenahe Programmierung (zumindest vorerst mit Betonung auf exemplarischem Lerncharakter, einfache Sachen, angeeignetes Wissen sollte später mit geringen Modifikationen aber auch in anderen Sprachen verwendbar sein) auch mit Python einigermaßen realisierbar sein und dort nicht zu sehr von der Vorgehensweise der hardwarenäheren Programmierprachen abweichen, dann würde ich jetzt wohl der Einfachheit halber erstmal Python wählen.
Sollte das Interesse wachsen später dann wohl zusätzlich C++. Oder würdet ihr mir doch den unmittelbaren Einstieg in C++ empfehlen?
 
Ich klinke mich hier noch mal ein zum Thema hardwarenahe Programmierung und Mikrocontroller bzw. Embedded Systeme. Wie du schreibst, ist man von Embedded Systemen umgeben. In der Regel laufen aber die meisten (Waschmaschinen, Rollläden-Steuerung, Heizungsregler, u.v.a.m) autark, d.h. ohne Betriebssystem. Aus diesem Grund würde ich eher das schon angesprochene Arduino-System empfehlen. Raspberry Pi ist zwar auch ein Embedded System arbeitet aber mit einem Betriebssystem, was vieles erleichtert, einiges aber auch erschwert (bzw. unnötig verkompliziert). Und wenn es um Basis-Verständis geht, geht IMO nichts über direkte Portansteuerung ohne "Umwege".
http://www.mikrocontroller.net/articles/Arduino

Arduino basiert auf AVR/ARM Chips mit entsprechenden Mikrocontrollerplatinen.
http://www.mikrocontroller.net/articles/AVR
http://www.mikrocontroller.net/articles/AVR-Tutorial

Zur IDE von Arduino kann ich leider nichts konkretes sagen, da ich damit noch nicht gearbeitet habe.
Es gibt aber neben Arduino auch eine ganze Reihe weiterer Systeme ...
http://microcontrollershop.com/default.php?cPath=110_58

Eventuell kann jemand hier auch noch eine Empfehlung geben, eventuell auch mögliche Alternativen zu AVR/ARM.
 
@Tellurium
Du müsstest deine Anforderungen genauer spezifizieren.

Einerseits sagst du, dass du dich mit KI auseinandersetzen willst. Die erfordert oft immense Rechenleistung (neuronales Netze, genetische Algorithmen, etc.). Ein Arduino kann die nicht bieten, ein Raspberry dürfte in begrenztem Umfang damit gerade noch klar kommen. Erwarte aber keine Wunder.
Andererseits sagst du, dass du gerne einen kleinen Mikrocontroller für ein paar Sensorexperimente haben willst. Der Arduino reicht hierfür völlig aus. Der Raspberry ist aber in etwa genauso geeignet, wirkt aber oft so, als würde man mit Kanonen auf Spatzen schießen.
Entscheide dich für einen, oder hole dir einfach beide. Arduino und Raspberry können oft via I2C-Bus (und oft auch anderen Verbindungen) direkt miteinander kommunizieren.

Einen Arduino programmiert man meist in einer BASIC-ähnlichen Sprache. Die ist kinderleicht. Der Raspberry sollte ursprünglich hauptsächlich mit Phyton-Skripten arbeiten. Linux sei dank, frisst er aber so ziemlich jede halbwegs verbreitete Sprache.
 
Zum Thema Datenanalyse, Fuzzy-Logik und Neuronale Netze habe ich vor einigen Jahren mit dem Buch
"Datananalyse: Anwendungen von DataEngine mit Fuzzy Technologien und Neuronalen Netzen" (VDI-Buch) [Taschenbuch] von Hans-Jürgen Zimmermann (Autor) gearbeitet. Dazu hatte ich ein grafisches Tool im Einsatz, welches sich DataEngine nannte.
http://www.dataengine.de/german/sp/de/de_index.htm
Vorteile hierbei waren, man kann sofort einige Verfahren Algorithmen von Computational Intelligence anwenden auf Datenreihen, ohne die Algorithmen selbst erstellen und ohne Programmieren zu müssen. DataEngine ist daher eher ein Anwendungswerkzeug. Zum Testen welche Art von neuronalem Netz oder Klassifikator für die Aufgabe am besten geeignet ist, oder aber auch zum Verstehen, wie der jeweilige Algorithmus auf die entsprechend übergebenen Datensätze wirkt, hat sich das Tool gut geeignet.
Ich weiß aber nicht, wie dort aktuell der Entwicklungsstand ist. Meine Arbeiten damit liegen schon 7 Jahre zurück.
 
Schiller72 schrieb:
Hardwarenahe Programmierung ist nun wieder ein anders Thema.
es handelt sich vor allem gar nicht um ein einziges Thema, sondern um zwei recht unterschiedliche Themen, nämlich einmal die Embedded Entwicklung, wie du sie hier beschreibst:
Schiller72 schrieb:
Kleine Hardwarenahe Applikation auf µC's (Mikrocontrollersystemen) ohne Betriebssystem kann man auch heute noch in Assembler schreiben, dadurch lernt man die Hardware sehr gut kennen. Timer, LED's Blinken lassen, ADC und DAC alles das geht auch in Assembler. Etwas leichter wird es, wenn man C nutzt (nicht C++). Hier geht es auch ohne OOP (objektorientierte Programmierung)
sprich: die Entwicklung von Software, die auf der betreffenden Hardware-Plattform selbst laufen soll, und andererseits die Entwicklung einer Software, die auf einem gewöhnlichen PC läuft und lediglich Remote auf die Hardware zugreift, z.B. auf einen Sensor, um einen Messwert auszulesen, oder auf ein Robotersystem, um diesem den Befehl zu geben, z.B. einen Arm um x Grad zu schwenken.

So wie ich den Threadersteller verstehe, geht es ihm eher um letzteres. Dafür ist z.B. auch das von dir genannte LabVIEW zu gebrauchen.
 
Steht jedoch das algorithmische im Forderung hätte ich auch noch eine Buchempfehlung. Das Buch ist schon älter, mir hat es seinerzeit recht viel geholfen. "Neuronale Netze. Einführung, Programmierbeispiele, praktische Anwendungen" von Ernst-Dieter Schmitter (Autor)
Dort werden eine Reihe von Algorithmen Neuronaler Netze und auch Klassifikatoren (statistische) behandelt. Sehr gut fand ich, dass zu jedem Algorithmus ein relativ übersichtlicher und kurzer Code mit abgedruckt ist. Dieser Code in C gehalten ist, also ohne aufbauschende OOP-Klassenstrukturen. Einige Beispieldatensatze waren auch Bestandteil des Buches, z.B. FFT-Daten für eine Lauterkennung auf Basis von Klassifikatoren.
 
@E-Laurin:
Ich will mit Mustererkennung, neuronalen Netzen und KI keine konkreten Projekte realisieren. Da gehts wirklich nur um den Modellcharakter zum Lernen. Wobei ich solche Sachen dann eh auf dem PC programmieren würde. Raspberry PI und Arduino wären hingegen dafür da zu lernen, wie man Hardware/Elektronik per Software steuert und über Schnittstellen mit externen Komponenten kommuniziert. Sind also i.d. tat zwei getrennte Geschichten. Mein Wunsch wäre halt dafür (sofern möglich) erstmal nur eine Programmiersprache lernen zu müssen. Das ist der Knackpunkt.

Ich war beruflich eine zeitlang in einem Unternehmen aus dem Bereich Opto-Elektronik tätig und jammer der Zeit noch ein bißchen hinterher. Da ging es um beides: Mustererkennung, KI aber auch die davorgeschaltete Optik, Meßtechnik, Sensorik. Daher mein Interesse für die aus Sicht des Programmierers zwei recht unterschiedlichen Felder.

Beim Arduino sprichst Du eine Sache an, die ich nebenbei noch fragen wollte. Ist die Art und Weise in der er in Processing programmiert wird weitgehend exemplarisch für Mikrocontrollerprogrammierung? Also zugrundeliegenden Prozeduren grundsätzlich die gleichen wie mit C, nur die Syntax anders bzw. einfacher, Befehle heissen halt hier und da anders und alles ein bißchen auf den Arduino optimiert optimiert, so daß man das gelernte gut als Transferwissen nutzen kann für vielleicht später mal erforderliche hardwarenahe Programmierung in C? Oder schränkt der Einsatz von Processing den Modellcharakter für die ganz allgemeine Frage "wie spricht man Hardware über Software an" stark ein? Mir geht es ja besonders um das "wie realisiere ich dies oder jenes" und nicht nur das fertige Ergebnis.

Unabhängig von Raspberry Pi und Arduino neige ich bislang dazu evtl. erst mal mit Python anzufangen, da eine anfängerfreundliche objektorientierte Programmiersprache, die zudem in den Naturwissenschaften stark verbreitet ist und dann vielleicht für spezielle hardwarenahe Programmierung "selektiv" C dazuzulernen um bei Bedarf dann C-Code zur Hardwaresteuerung mit einzubinden, sofern ich es benötige. Also bei C dann wirklich nur Rosinenpickerei, nur das lernen, was ich mit Python nicht umsetzen kann. Falls so ein "selektives" Lernen von Teilbereichen einer Programmiersprache nur für spezielle Aufgaben denn einigermaßen geht und sich der zusätzliche Aufwand dabei in Grenzen hält?

Sollte ein Arduino mein Interesse befriedigen würde C hingegen erstmal entfallen.
Ergänzung ()


Ergänzung ()

Sculletto schrieb:
sprich: die Entwicklung von Software, die auf der betreffenden Hardware-Plattform selbst laufen soll, und andererseits die Entwicklung einer Software, die auf einem gewöhnlichen PC läuft und lediglich Remote auf die Hardware zugreift, z.B. auf einen Sensor, um einen Messwert auszulesen, oder auf ein Robotersystem, um diesem den Befehl zu geben, z.B. einen Arm um x Grad zu schwenken.

So wie ich den Threadersteller verstehe, geht es ihm eher um letzteres. Dafür ist z.B. auch das von dir genannte LabVIEW zu gebrauchen.
Stimmt, ich werfe hier teilweise die Begriffe Mikrocontrollerprogrammierung und Schnittstellenprogrammierung durcheinander, sorry. Reine Mikrocontrollerprogrammierung würde mich eigentlich auch interessieren, aber ich ich bin ja absoluter Dummie und möchte erstmal kleine Brötchen backen um möglichst schnell an Ergebnissen Spaß zu haben. Also mit hardwarenaher Programmierung meinte ich in der Tat eher Elektronik remote über einen PC oder vielleicht den Raspberry Pi ansteuern. Einsteiger- und bastlerfreundliche Mikrocontroller wie den Arduino finde ich aber auch sehr interessant. Ich würde ihn dann aber erstmal als harwareseitige Funktionserweiterung für einen PC oder Raspberry Pi nutzen und irgendwie über diese mit ihm kommunizieren.
Ich vergaß zu erwähnen: eigentlich habe ich währned meines Studiums an der Uni schon mal an ein Messgerät mit Infrarotsensorik konstruiert. Die Software zur Ansteuerung hat mir damals aber jemand anders nach meinen Wünschen auf einem alten Macintosh als Steuerrechner zur Relaissteuerung der Infrarotdioden und zum Auslesen der Sensoren programmiert. Ich glaube damals steuerten wir alles über die serielle Schnittstelle und ließen die Messdaten im Pseudotabellenformat in eine Textdatei schreiben, die wir in Excel importierten um die Daten dort dann auszuwerten.
 
Zuletzt bearbeitet:
Tellurium schrieb:
Beim Arduino sprichst Du eine Sache an, die ich nebenbei noch fragen wollte. Ist die Art und Weise in der er in Processing programmiert wird weitgehend exemplarisch für Mikrocontrollerprogrammierung?

Arduino wird in C(++) programmiert. Das Arduino-Projekt hat sich nur von Processing die IDE kopiert, sonst hat es nichts damit zu tun.
Und ja es ist exemplarisch für die Mikrocontroller-Entwicklungen, du kannst erstmal deren vereinfachtes Modell nutzen, solltest du dich irgendwann rein knien wollen, lässt du die Arduino-Libraries einfach weg und programmierst direkt für den AVM-Mikrocontroller.
 
Ok, dann ist ein Arduino zum reinschnuppern in die Mikrocontrollerprogrammierung ja ganz gut geeignet. In der Mikrocontrollergemeinde scheint es da ja einen richtigen Grabenkrieg pro-/contra-Arduino zu geben. Zumindest habe ich gestern einen seeehr langen Faden im Forum von mikrocontroller.net gelesen bzw. angelesen in dem recht viel gestritten wurde.

Aber nochmal zurück zur Wahl der Einstiegsprogrammiersprache. Mit C++ könnte ich ja beide genannten Interessengebiete abdecken und würde so mit einer Sprache auskommen deren Syntax zudem für objektorientierte Programmiersprachen sehr exemplarisch ist. Dafür lese ich überall, daß man damit als Anfänger recht lange braucht, bis man motivierende Ergebnisse erzielt.
Aus den in meinem letzten Beitrag (dort im 4. Absatz) genannten Gründen neige ich aber nach wie vor eher zu Python und sobald ein solides Anfängerwissen vorhanden ist dann selektiv ein wenig C lernen, aber nur zur Ergänzung für die wirklich hardwarenahen Aufgaben, also zur Einbindung in Pythonprogramme.
Haltet ihr dies auch für die sinnvollste Entscheidung?
 
Meiner Meinung nach ist Mikrocontroller-Programmierung = C-Programmierung. Warum denke ich so? C wird seit Urzeiten dafür verwendet. Dafür gibt es einen Grund: Man kann damit schnell und simpel programmieren. Auf einem µC laufen nur simple Programme, für mehr sind eh keine Ressourcen da. Man braucht da in den meisten Fällen nicht das schweizer Taschenmesser C++.

Jetzt könnte man sagen, mit C++ kann man auch einfache Programme schreiben. Das ist richtig, aber von den vielen Konzepten, die man damit umsetzen kann, werden die meisten nicht benötigt oder können mangels Systemressourcen nicht eingesetzt werden. Wenn man zB nur 8 KB Speicher hat, muss man damit haushalten.


Btw, ich bin der Meinung, dass Akademiker eher in C++, C# und Java als in Python programmieren. Zumindest war das in meiner Hochschule so. Es kann sein, dass es woanders anders ist.
Leider ähneln sich Python und die C-artigen Sprachen nicht besonders. Es ist schade, dass man beim Lernen von Python nicht automatisch ein wenig der anderen Sprachen mitlernt.
 
e-Laurin schrieb:
Meiner Meinung nach ist Mikrocontroller-Programmierung = C-Programmierung. Warum denke ich so? C wird seit Urzeiten dafür verwendet. Dafür gibt es einen Grund: Man kann damit schnell und simpel programmieren. Auf einem µC laufen nur simple Programme, für mehr sind eh keine Ressourcen da. Man braucht da in den meisten Fällen nicht das schweizer Taschenmesser C++.

Überwiegend ist das wahrscheinlich so, aber ich versichere dir, daß es auch bedeutende, kommerzielle Projekte gibt, in denen Mikrocontroller in C++ programmiert werden (ich war Jahre lang selbst in einem solchen tätig).
Davon abgesehen frage ich mich aber: welche C++-Features brauchen deiner Meinung nach mehr Resourcen als eine entsprechende Umsetzung in C?
 
Tellurium schrieb:
Ok, dann ist ein Arduino zum reinschnuppern in die Mikrocontrollerprogrammierung ja ganz gut geeignet. In der Mikrocontrollergemeinde scheint es da ja einen richtigen Grabenkrieg pro-/contra-Arduino zu geben. Zumindest habe ich gestern einen seeehr langen Faden im Forum von mikrocontroller.net gelesen bzw. angelesen in dem recht viel gestritten wurde.

gegen einen Arduino als Dev-Board haben die nicht viel, eher gegen die Arduino-Library. Du kannst bei der Arduino-Library eben sofort loslegen, da die komplexen Dinge vor dir versteckt werden und es somit einfacher zu nutzen ist. Du hast damit aber eben nicht die ganze Kontrolle, wie wenn du direkt für den Mikrocontroller entwickeln würdest. Aber in den allermeisten Fällen ist es eben vollkommen ausreichend.
 

Ähnliche Themen

Antworten
47
Aufrufe
190.675
D
Antworten
35
Aufrufe
3.847
Zurück
Oben