Forum: Mikrocontroller und Digitale Elektronik Progrmmierung in C


von Johannes (Gast)


Lesenswert?

Hallo,



ich wollte mit der Mikrocontroller-Programmierung in C anfangen. Dafür 
musste ich erstmal C lernen und habe das Buch "C Programmieren von 
Anfang an" gekauft. Gleichzeitig lese das Tutorial auf diese Webseite.

Irgendwie habe ich das Gefühl das sind total 2 unterschiedliche Welten. 
Das was in dem Buch erklärt wird, bringt mich nicht weiter mit dem 
Mikrocontroller Programmieren.

Ich wollte wissen ob es ein Buch gibt, wo nur C für 
Mikrocontroller-Programmierung behandelt wird? oder soll ich weiter das 
Buch zu Ende lesen und dann mit dem Tutorial weitermachen?

Danke

von Bitte füllen Sie dieses Feld aus. (Gast)


Lesenswert?

Erst am Computer lernen, dann auf µP umsteigen.

Grund: Am PC hat man weit mehr Debugmöglichkeiten und deutlich weniger 
potentielle Fehlerquellen.

von Karl H. (kbuchegg)


Lesenswert?

Johannes schrieb:

> Irgendwie habe ich das Gefühl das sind total 2 unterschiedliche Welten.
> Das was in dem Buch erklärt wird, bringt mich nicht weiter mit dem
> Mikrocontroller Programmieren.

Richtig.

Trotzdem ist es empfehlenswert, die ersten SChritte (ungefähr das erste 
Drittel bis ca. die Hälfte) erst mal auf einem PC durchzuackern und sich 
dort das Grundgerüst und die Grundlagen der C-Programmierung an sich zu 
holen.

µC Programmierung ist dann die Spezialisierung davon. Dort tauchen die 
gleichen Grundlagen wieder auf, aber auch spezielle Problemkreise, die 
es so auf einem PC nicht gibt.

> Ich wollte wissen ob es ein Buch gibt, wo nur C für
> Mikrocontroller-Programmierung behandelt wird? oder soll ich weiter das
> Buch zu Ende lesen und dann mit dem Tutorial weitermachen?

Ich würde dir raten, dir ein Entwicklungssystem für den PC zu besorgen 
und dort erst mal mit dem allgemeinen C-Buch die Basis von C 
durchzukauen. Der Umstieg auf den µC fällt danach wesentlich leichter.
Der genaue Grund liegt darin, dass du am PC erst mal eine komplett 
funktionioerende Infrastruktur hast. Ein printf auf dem PC gibt auf der 
Konsole aus, ohne dass du dich darum kümmern musst. Auf einem µC 
hingegen fängst du bei 0 an. Da 'funktioniert' von alleine erst mal gar 
nichts. Selbst für das kleinste Lebenszeichen, das der µC von sich gibt, 
musst du schon eine Menge wissen.

>
> Danke

von Rolf M. (rmagnus)


Lesenswert?

Johannes schrieb:
> Irgendwie habe ich das Gefühl das sind total 2 unterschiedliche Welten.

Das ist richtig.

> Das was in dem Buch erklärt wird, bringt mich nicht weiter mit dem
> Mikrocontroller Programmieren.

Naja, ganz so extrem würde ich das nicht sehen. Die C-Syntax ist immer 
die gleiche. Man nutzt halt weniger Standard-Bibliothek und mehr direkte 
Hardware-I/O und Bitgefummel, aber die Grundlagen sind trotzdem gleich. 
Wenn du dir die mal am PC angeeignet hast, ist der µC-Einstieg deutlich 
einfacher.

> Ich wollte wissen ob es ein Buch gibt, wo nur C für
> Mikrocontroller-Programmierung behandelt wird? oder soll ich weiter das
> Buch zu Ende lesen und dann mit dem Tutorial weitermachen?

Das wäre empfehlenswert.

von Micha S. (promicha)


Lesenswert?

Empfehlen würde ich zum Start, erst einmal zu studieren, wie ein 
Computer funktioniert, vom Programmieren her, dabei spielt die Sprache 
keine Rolle, erst dann wählt man die Sprache, da ein PC und ein uC sich 
da gar nicht verschieden sind, wird so das Verständnis beim 
Programmieren von uC wesentlich einfacher.
C Programmierung unter Windows für Anfänger behandelt selten die 
Hardwarenahe Programmierung, welche für uC wichtig ist.

von Johannes G. (gutenberg)


Lesenswert?

Ja, bitte lern erst solides C Grundwissen am PC. Du tust dir selber und 
den Leuten hier im Forum damit einen grossen Gefallen. Du musst nicht 
bis in die exotischsten Kapitel der C Programmierung vorstossen, aber 
die Basics sind halt superwichtig egal was du programmierst. Danach 
brauchst du nur noch 15 Minuten um hier im Tutorial die 
Bitmanipulationen anzuschauen und du kannst µc programmieren (die 
eigentliche Arbeit ist dann die Infos aus den Datenblättern zu holen, 
aber C-technisch hast dus im Griff).

von SNR (Gast)


Lesenswert?

Micha Schweizek schrieb:
> C Programmierung unter Windows für Anfänger behandelt selten die
> Hardwarenahe Programmierung, welche für uC wichtig ist.

In jedem besseren Buch stehen auch Bitmanipulationen u.ä. drin.
Und dann ist C eben C, ob auf dem uC oder PC.


Kann meinen Vorrednern nur zustimmen.
Erst auf dem PC Grundlagen lernen, dann ein kleines Eval-Board kaufen 
(fertige Hardware-->keine/wenig Fehler) und damit die ersten Schritte in 
Richtung Embedded machen. Wenn man da dann fit ist, kann man sich auch 
noch mit der Hardware beschäftigen wenn man will.

Typisch für den uC Einstieg sind Atmel oder Microchip.
Vom Preis lohnt sich auch TI (LaunchPad).

Grüße

von Johannes (Gast)


Lesenswert?

Dankeeeeeeeeeeeee!

Jetzt kann ich mich auf ein Thema konzentrieren

von Micha S. (promicha)


Lesenswert?

SNR schrieb:
> Micha Schweizek schrieb:
>> C Programmierung unter Windows für Anfänger behandelt selten die
>> Hardwarenahe Programmierung, welche für uC wichtig ist.
>
> In jedem besseren Buch stehen auch Bitmanipulationen u.ä. drin.
> Und dann ist C eben C, ob auf dem uC oder PC.


Dann versuche mal unter Windows ab 2000 den PC internen Lautsprecher 
direkt über die Hardware einen Ton zu entlocken, wie es unter Win98 noch 
ging, das ist Hardware nah, so bleibt nun nur noch Beep();

Systembits kann man nicht mehr, oder nur sehr schwer direkt manipulieren 
unter aktuellen Betriebssystemen, von daher würde es auch kein Author 
beschreiben, da keiner was erklärt, was nicht geht.

Was ich damit sagen will ist, das kein Buch mehr beschreibt, wie man 
Systemnah Bits und Bytes setzt, da jedes Betriebssystem seine Routinen 
dazu liefert, also nicht mehr Systemnah. Was wiederum bei uC der Fall 
ist

von Andreas D. (rackandboneman)


Lesenswert?

http://books.google.de/books/about/Expert_C_programming.html?id=4vm2xK3yn34C

Unbedingt zu empfehlen als Nachschlagewerk, da sind eine Unmenge 
Hintergründe drin erklärt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Micha Schweizek schrieb:
> Was ich damit sagen will ist, das kein Buch mehr beschreibt, wie man
> Systemnah Bits und Bytes setzt, da jedes Betriebssystem seine Routinen
> dazu liefert, also nicht mehr Systemnah.

Um C zu lernen, kann man die Bits auch erst einmal systemfern manipulie-
ren. Es gibt genügend Übungsbeispiele, die man problemlos auf dem PC
programmieren kann, z.B.:

Analyse von IP-Adressen:
  http://www2.hs-fulda.de/~klingebiel/c-uebung/ueb08/index.htm

Gewinnstrategie für Nim-Spiel:
  http://de.wikipedia.org/wiki/Nim-Spiel

Grafikroutinen (Linien, Kreise, Textzeichen usw.) für Bitmap-Grafiken:
  Man baut die Grafik bitweise im Speicher auf und speichert sie zu.
  Kontrolle als BMP-Datei ab.

    http://de.wikipedia.org/wiki/Windows_Bitmap

  Das Erfolgserlebnis ist groß, wenn diese Datei tatsächlich in einen
  Imageviewer geladen werden kann und das erwartete Bild angezeigt wird.

...

Und ein C-Buch, das die dazu benötigten Operationen nicht beschreibt,
gehört schlichtweg auf den Müll.

Wenn man das alles kapiert hat, ist das Setzen und Löschen von Bits in
I/O-Registern eines Mikrocontrollers überhaupt nicht mehr magisch. Der
wesentliche Unterschied zu den PC-Variablen besteht darin, dass von den
I/O-"Variablen" Drähte nach außen gehen, was die ganze Sache natürlich
noch etwas spannender macht, aber keinesfalls schwieriger.

von SNR (Gast)


Lesenswert?

Yalu X. schrieb:
> Wenn man das alles kapiert hat, ist das Setzen und Löschen von Bits in
> I/O-Registern eines Mikrocontrollers überhaupt nicht mehr magisch. Der
> wesentliche Unterschied zu den PC-Variablen besteht darin, dass von den
> I/O-"Variablen" Drähte nach außen gehen, was die ganze Sache natürlich
> noch etwas spannender macht, aber keinesfalls schwieriger.

Danke, so hatte ich das auch gemeint.
Dass der Einstieg auf dem PC geeigneter ist, haben wir ja Einstimmig 
festgestellt. Eben aus dem Grund weil man sich um viele Dinge nicht mehr 
kümmern muss (Systemlautsprecher über Bits ansteuern), sondern die 
fertigen Bibliotheken oder Klassen auf viel höherer Ebene verwenden kann 
(und sei es nur dass man die Frequenz und die Dauer angeben kann).
Aber so wie Yalu schon sagte, wenn man mal die Grunddinge wie 
Variablendeklaration/definition, Funktionsaufrufe u.ä. Dinge beherrscht 
dann ist der Umstieg auf uC (zumindest aus Sicht der reinen 
Programierung) nicht mehr schwer.

Grüße

von Karl H. (kbuchegg)


Lesenswert?

SNR schrieb:

> Aber so wie Yalu schon sagte, wenn man mal die Grunddinge wie
> Variablendeklaration/definition, Funktionsaufrufe u.ä. Dinge beherrscht
> dann ist der Umstieg auf uC (zumindest aus Sicht der reinen
> Programierung) nicht mehr schwer.

Ich würde sagen, wünschenswert wäre

* Variablendefinitionen, Datentypen
* zumindest grundlegende Kentnisse in Type-Promotion
* die C Sprachelemente if, while, do - while, for, switch - case
* Funktionen, Argumentpassing, Prototypen
* Arrays
* Strings
* Strukturen
* die wichtigsten Dinge mit dem Präprozessor: #include, #define
* Casting
* Basics in Pointer
* Verständnis dafür, wie eigentlich der Prozess des Compilierens,
  Links abläuft bzw. was dabei geschieht - Projektverwaltung
* arithmetische Operationen, boolsche Operationen, logische Operationen

für den Umstieg nicht so wichtig (wenn dann natürlich auch in der 
C-Weiterbildung notwendig), die schwierigeren Themen
* dynamische Allokierungen
* komplexere dynamische Datenstrukturen wie Listen, Bäume, Maps, ...
* dynamische Strings
* Files


Wenn der erste Teil so einigermassen sitzt, hat man ein ganz gutes 
Grundgerüst, so dass einem auf einem µC C-technisch nichts mehr so 
schnell erschüttert oder vor unüberwindliche Probleme stellt. So in etwa 
umfasst der erste aufgezählte Teil in einem durchschnittlichen C-Buch so 
ca. die erste Buchhälfte.

von Micha S. (promicha)


Lesenswert?

@Yalu X. und Alle,

Es ging mir im Wesentlichen nicht um das Werkzeug, also das „Wie“, 
sondern um das, dass man auch versteht was man später tut. Das wird 
nicht beschrieben, daher mein erstes Posting hier, das man sich mit der 
Computer Architektur zunächst befassen sollte. Wie man Bits setzt und 
löscht kann man sogar locker so verstehen, aber das Warum sollte eine 
Rolle spielen.
Der Beste C Programmierer unter Windows, welcher kein Plan hat wie ein 
Computer intern funktioniert, wird ohne Rückfragen dazu nicht klar 
kommen. Weiter sollte man verstehen, dass nicht alle CPU’s  gleich sind, 
gerade uC haben einen abgespeckten RISC Befehlssatz, die meisten Bücher 
über C, beziehen sich auf die gängigsten Bibliotheken, welche unter 
nahezu jedem Betriebssystem tauglich ist, auf dem uC nicht.

Um C als Grundstock zu lernen ist es natürlich OK, aber mit dem Ziel 
Systemnah, sollte man zunächst lernen, unabhängig von einer 
Programmiersprache, wie ein Computer funktioniert und Unterschiede 
kennen lernen.
Was nützen mir Grafikoperationen im Binärbereich, wenn im Buch nur 
beschrieben ist, wie ich diese auf ein Win-Canvas zeichne, besser wer, 
wenn man sagen könnte (wie damals unter C64 oder AMIGA), ab speicher 
Adresse xxx abspeichern.

Daher eben meine Empfehlung, nicht nur die Sprache lernen, sondern 
Grundlegend und unabhängig wie eine Computer Architektur aufgebaut ist, 
damit man auch weiß, was man da macht, wenn man an Systembits rumspielt.

Im Übrigen habe ich Hunderte kennen gelernt, welche der Überzeugung 
waren, wenn ich C lerne, kann ich auch uC programmieren und K.I.T.T 
bauen. Persönlich schreibe ich lieber Assembler und bleib im Rahmen des 
Befehlssatz des jeweiligen uC.

Daher, wie funktioniert ein 8, 16, 32 Bit Rechner, was ist ein 
Befehlssatz, was ist RISC, was wird Unterstützt (läuft fopen() auf 
ATmel) etc. etc. etc. PP

Nichts für Ungut, aber nur durch eine Sprache lernt man nicht gleich die 
Kultur mit…

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.