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.
:
Verschoben durch User
@ 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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.