Hallo Leute,
ich habe im vergangenen Semester (Maschbau) eine Veranstaltung
"Datenverarbeitung" gehabt und nun die Prüfung erfolgreich absolviert.
In Datenverarbeitung haben wir C-Programme geschrieben, von einfach bis
relativ anspruchsvoll.
Meist waren es mathematische Aufgabenstellungen (Numerik, Folgen &
Reihen..usw), aber keine Hardware Programmierung wie zb Mikrocontroller.
Mir hat das Fach auch wirklich Spaß gemacht und würde mich in diesem
Bereich gerne weiter vertiefen!
Als ich neulich aber in ein Buch über Mikrocontroller Programmierung
reingeschnuppert habe, habe ich festgestellt das dieses C für
Mikrocontroller doch ganz anders ist und mir viele Dinge unbekannt
waren..
Wenn man die Klausur Datenverarbeitung gut besteht, meint man zumindest
das man gut im Programmieren ist, aber ich fühle mich jetzt wieder wie
am Anfang des Sommeremesters als ich mich noch gefragt habe was if &
else bedeuten und wie man eine Schleife programmiert..
Könnt ihr mir vielleicht ein paar Tipps geben wie ich meine Kenntnisse
vertiefen kann und welche Vorraussetzungen man für die Mikrocontroller
Programmierung braucht?
Elektrotechnik, Elektronik & Messtechnik habe ich bereits ganz gut
bestanden und es hat mir auch Spaß gemacht.
@ Eric (Gast)
>Als ich neulich aber in ein Buch über Mikrocontroller Programmierung>reingeschnuppert habe, habe ich festgestellt das dieses C für>Mikrocontroller doch ganz anders
Naja, sooo viel anders ist es nicht.
>Wenn man die Klausur Datenverarbeitung gut besteht, meint man zumindest>das man gut im Programmieren ist, aber ich fühle mich jetzt wieder wie>am Anfang des Sommeremesters als ich mich noch gefragt habe was if &>else bedeuten und wie man eine Schleife programmiert..
Das ist normal.
>Könnt ihr mir vielleicht ein paar Tipps geben wie ich meine Kenntnisse>vertiefen kann und welche Vorraussetzungen man für die Mikrocontroller>Programmierung braucht?
Kauf dir einen Arduino und leg los.
C ist C, ob für Mikrokontroller oder nicht. Was sich ändert sind nur die
Header und Macros je nach uC & Kompielerspezifische erweiterungen, um
Dinge abbilden zu können die es in C nicht gibt.
Deshalb finde ich gerade bei uCs eine gute Abstraktion wichtig. Eine
Platformunabhängige Logik, mit sinvollem Interface, und
Hardwarespezifische Files, auf welche über die Abstraktion zugegriffen
wird.
Also z.B. ein und ausschalten von Motoren & Motorregelung =
Hardwarespezifische implementation. Geschwindigkeit und Richtung setzen
= implementiertes Interface. Fahrzeug steuern, richtung ändern, vor
hindernisen abbremsen = Platformunabhängige Logik.
Da du offenbar Algorithmen usw. gelehrnt hast, benötigst du eventuell
noch etwas Kentnisse in Softwaredesign & funktionsweise von uCs. Beim
ersten geht es vorallem ums Entkoppeln, Abstrahieren und Modularisieren
von Softwarekomponenten. Lezteres ist hauptsächlich Initialisierung &
Ansteuerung von Peripherie, meist über Register, und reagieren auf
Interrupts in ISRs, z.B. für Timer & Pinnänderungen. Und Datenblätter
lesen, ohne das gehts nicht.
Falk B. schrieb:> Kauf dir einen Arduino und leg los.
Ok, damit gehts auch ohne Datenblätter lesen. Nunja, man kann diese ja
auch ohne Arguino IDE & Libraries Programmieren, warum also nicht.
Ansonsten sind AVRs noch recht Simpel, bei denen sollte man aber keinen
zu kleinen nehmen.
Prinzipiell solltest du verstehen wie eine CPU funktioniert und wie dann
die Peripherie wie ADC, PWM, SPI, I2C, ...... funktioniert. Das nennt
man dann einen Mikrocontroller. Sonst ist das C das gleiche C, nur die
Hardware ist anders.
Ja fange mal mit einem Arduino an. Da hast du schnell Erfolgserlebnisse.
Wenn Du Dich schon etwas vertrauter mit C fühlst, würde ich dazu raten
einen Blick ins (noch unfertige) "Modern C" von Jens Gustedt zu werfen:
http://icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf
Dazu empfiehlt sich aber ein Compiler der halbwegs brauchbar die
aktuellen Standards unterstützt. Ein aktueller GCC, ICC oder clang
sollte es tun. Mit aktuellem SDCC wird vieles, aber nicht alles aus dem
Buch möglich sein. Keil, Raisonance und dergleichen kann man aber wohl
vergessen.
Philipp
Falk B. schrieb:> Kauf dir einen Arduino und leg los.
Learning by doing. Und wenn man dann die ersten Projekte machen möchte,
guck dir an wie das andere gemacht haben. Aber nicht nur ein Beispiel.
Dann aber nicht c'n'p sondern selbst schreiben.
Und wenn du es am Ende noch schöner machen möchtest, dann schmeißt du
die ArduinoIDE weg und bastelst dir dein eigenes Makefile und machst
reines C draus.
Hier noch ein kleiner Einstieg:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Eric schrieb:> Wenn man die Klausur Datenverarbeitung gut besteht, meint man zumindest> das man gut im Programmieren ist, aber ich fühle mich jetzt wieder wie> am Anfang des Sommeremesters als ich mich noch gefragt habe was if &> else bedeuten und wie man eine Schleife programmiert..
Hat dir das noch keiner gesagt? Das gilt für jedes Fach im Studium. Dein
Studienabschluss "berechtigt" dich in einem Unternehmen, auf dessen
Kosten, unter Aufsicht eines Chefs, weiterzulernen. Für die Uni bist du
mit dem Abschluss ein Ingenieur, für die Industrie nur ein Anfänger.
> Könnt ihr mir vielleicht ein paar Tipps geben wie ich meine Kenntnisse> vertiefen kann
Programmieren, programmieren, programmieren, anderer Leute Code lesen,
programmieren, programmieren, anderer Leute Code lesen ...
> und welche Vorraussetzungen man für die Mikrocontroller> Programmierung braucht?
Jetzt so zum Lernen?
* Ca. 30 Euro (um sich eines der vielen netten Eval-Boards zu kaufen)
* Eine zugehörige kostenlose Entwicklungsumgebung
* Etwas Talent
* Ein paar Google- und Lesefähigkeiten
* Hohe Frustrationstoleranz
Welches Board man nimmt ist am Anfang ziemlich egal. Alle modernen
Mikrocontroller können so viel, dass man mit jedem für eine ganze Weile
beschäftigt ist.
Beispiele für Serien von Boards:
STM32 Discovery Serie
STM8 Discovery Serie (Wobei die nicht so weit verbreitet sind)
NXP LPC Xpresso (oder war das mbed?) Serie
TI Launchpad TIVA Serie
TI Launchpad MSP430 Serie
Atmel Xplained oder Xplained Mini Serie
Microchip PIC Curiosity Serie
uvam.
Jedes hat so seine Vor- und Nachteile. Fanboys können sich darüber
stundenlang die Köpfe einschlagen.
Was sollte man nicht nehmen?
Alle Varianten von Arduino.
Zumindest nicht wenn man selber denken und etwas lernen möchte, statt
halb nur Code aus dem Netz zu kopieren.
Was braucht man noch?
Möglichst ein Board mit eingebautem Programmer nehmen, sonst braucht man
noch einen separaten Programmer.
Ein paar LEDs, Sensoren, Steckbrett usw. zum Rumspielen sind irgendwann
ganz nett. Hier gibt es aus dem Arduino-Bereich "sorglos" Kits mit
Bauteilen usw. auf eBay, Aliexpress usw. Nur halt keins nehmen das einen
Arduino oder Shields enthält.
Irgendwann später kommt die große Frage nach Messmitteln. Labornetzteil,
billiger Logicanalyser für den PC, Oszilloskop, Multimeter sind so die
ersten Dinge. Über die beste Reihenfolge für einen Kauf kann man sich
trefflich streiten.
@Daniel,
danke für deine Ausführliche Nachricht!
Das sind ein paar sehr nützliche Infos für mich!
Arduinos habe ich mir auch angeguckt, aber ich habe das gefühl das
Arduinos eher was für Personen sind die nicht sonderlich viel mit
Technik zu tun haben und die Anwendung damit nicht "Ingenierursmäßig
professionel" ist.
Wie sieht es mit Boards von TI aus, oder auch AVR, kann mir da jemand
was gutes empfehlen?
Vielleicht auch mit Video Tutorial/Buch oder ähnliches?
Jack schrieb:> STM8 Discovery Serie (Wobei die nicht so weit verbreitet sind)
Die STM8 sind schön. Aber wenn es darum geht, C zu lernen, solltest Du
für STM8 entweder SDCC oder den Compiler von IAR verwenden. Die anderen
Compiler halten sich weniger an den C Standard (wobei Cosmic da auch
schon deutlich besser als Raisonance ist).
Philipp
@Jack (Gast)
>Was sollte man nicht nehmen?>Alle Varianten von Arduino.>Zumindest nicht wenn man selber denken und etwas lernen möchte, statt>halb nur Code aus dem Netz zu kopieren.
Unfug! Mit Arduino KANN man ebenso gut, schnell und direkt programmieren
wie mit "reinem" C, denn niemand MUSS die Arduino-Funktionen bzw.
Bibliotheken nutzen. Aber warum sollte man das tun? Warum das Rad neu
erfinden? Das macht man nur, wenn vorhandenen Funktionen nicht
ausreichen oder zu langsam sind.
@ Eric (Gast)
>Arduinos habe ich mir auch angeguckt, aber ich habe das gefühl das>Arduinos eher was für Personen sind die nicht sonderlich viel mit>Technik zu tun haben und die Anwendung damit nicht "Ingenierursmäßig>professionel" ist.
Unsinn. Wenn gleich eine große Zielgruppe schon Leute sind, welche keine
Elektronik-Cracks sind sondern eher Anwender, die ein kleines bisschen
programmieren können, so kann man mit diesen Boards überaus gut in die
Materie reinkommen.
>Wie sieht es mit Boards von TI aus, oder auch AVR, kann mir da jemand>was gutes empfehlen?
Die meisten Arduinos haben einen AVR drauf . . .
MSP430 ist auch ganz nett, da gibt es die diversen Lauchpads.
Man sollte aber NICHT mit einem fetten 32 Bit Monster anfangen, denn
deren Komplexität und Funktionsumfang hilft dem Anfänger keine Sekunde,
im Gegenteil.
Falk B. schrieb:> Man sollte aber NICHT mit einem fetten 32 Bit Monster anfangen, denn> deren Komplexität und Funktionsumfang hilft dem Anfänger keine Sekunde,> im Gegenteil.
Naja, sofern da in C programmiert wird, ist es dem Anwender und dem
Compiler doch relativ egal, ob die unterlagerte Hardware 8, 16 oder 32
bit breite Register im Controller verwendet, oder ob die interne
Architektur einfach oder kompliziert ist.
Die paar "Besonderheiten" beim nackten, einfachen I/O-handling
(einfaches Bit-Gefummele) verschiedener Controller-Typen sind
überschaubar. Und Interupt-Handler, Timer usw. sind
"Grundfunktionalitäten". die muss man mal verstanden haben, danach
wiederholt sich das alles irgendwie bei den verschiendenen Controllern.
Sofern man das mit "Algorithmen und Datenstukturen" auf Bit-Ebene mal
verstanden hat, fällt der Wechsel von einem Controller zum nächsten
recht einfach. Da ist eher die verwendete Entwicklungsumgebung oder ein
Sack von Bibliotheken dasjenige, welches einen das Leben schwer machen
kann.
@Wegstaben Verbuchsler (wegstabenverbuchsler)
>> Man sollte aber NICHT mit einem fetten 32 Bit Monster anfangen, denn>> deren Komplexität und Funktionsumfang hilft dem Anfänger keine Sekunde,>> im Gegenteil.>Naja, sofern da in C programmiert wird, ist es dem Anwender und dem>Compiler doch relativ egal, ob die unterlagerte Hardware 8, 16 oder 32>bit breite Register im Controller verwendet, oder ob die interne>Architektur einfach oder kompliziert ist.
Dem Anwendner keine Sekunde! Denn DER muss sich in die ganzen Module
einarbeiten! Ob ein Timer 5 oder 50 Register hat macht schon einen
"kleinen" Unterschied!
>Die paar "Besonderheiten" beim nackten, einfachen I/O-handling>(einfaches Bit-Gefummele) verschiedener Controller-Typen sind>überschaubar.
Nein.
>Und Interupt-Handler, Timer usw. sind>"Grundfunktionalitäten". die muss man mal verstanden haben, danach>wiederholt sich das alles irgendwie bei den verschiendenen Controllern.
EBEN! Und um sich erst einmal das Grundverständnis zu erarbeiten, ist
ein EINFACHER Controller deutlich besser geeignet!
>Sack von Bibliotheken dasjenige, welches einen das Leben schwer machen>kann.
Welche vor allem auf aktuellen 32 Bittern nicht gerade klein sind.
>Arduinos habe ich mir auch angeguckt, aber ich habe das gefühl das>Arduinos eher was für Personen sind die nicht sonderlich viel mit>Technik zu tun haben und die Anwendung damit nicht "Ingenierursmäßig>professionel" ist.
Also ich empfehle den PSoc LP5 von Cypress. Der ist günstig und extrem
vielfältig. Da ist ein Debugger drauf, es gibt den Ansatz der
graphischen Programmierung, man kann auch Verilog lernen und wer Lust
hat, kann es auch Arduino-Style mit diesem Code-Beispiel-Projekt
probieren:
http://www.mikrocontroller.net/attachment/304817/sakrileg.cydsn2.zip