Forum: Mikrocontroller und Digitale Elektronik Assembler oder C?


von Markus G. (markusggg)


Lesenswert?

Hallo leuet,

ich habe vor einen Microcontroller zu programmieren. Da ich aber 
keinerlei erfahrung damit habe ergibt sich erstmal die Frage welche 
Programmiersprache soll ich wählen? Programmieren will ich mit AVR 
Studio einen:

Atmel ATEMega8A-PU

Es sollen nur die Ausgänge verschaltet werden. Praktisch will ich mit 
jedem Port eine andere LED ansteuern.Insgesamt 8 unterschiedliche, dazu 
kommen noch 2 LED anzeigen, die Zahlen von 0-99 ausgeben können sollen. 
Die anzeigen besitzen auch jeweils einen Microcontroller.

Kann mir da jemand helfen?

Gruß Markus
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Mit sehr hoher Wahrscheinlichkeit ist C hierfür eine geeignete Sprache. 
Für einen Anfänger kann auch Bascom sinnvoll sein.
von alt (Gast)


Lesenswert?

Gehen tut beides, Assembler ist gut um die grundlegende Funktionsweise 
eines µPs kennen zu lernen und die Frage führt hier regelmäßig zu 
kriegerischen Auseinandersetzungen...
von asm (Gast)


Lesenswert?

Ich würde so beschreiben:
Zu Fuß gehen oder Bus fahren?
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

asm schrieb:
> Ich würde so beschreiben:
> Zu Fuß gehen oder Bus fahren?

Motorrad :-)

Lerne beides, es lohnt sich. Mit Assembler (viel Arbeit) kannst Du
aus dem Chip alles herausholen, mit C (erheblich weniger Arbeit) nur
"fast" alles. Je besser Du in Assembler bist umso besser wird auch
Dein C.
von Noname (Gast)


Lesenswert?

Vielleicht macht es umgekehrt noch mehr Sinn.

C ist leicht lesbar für Leute die ohnehin die mathematische 
Ausdrucksweise drauf haben und jetzt noch programmieren lernen.
ASM leichter fassbar für Leute die sich die Hardware (ALUs, Rechenwerk, 
etc.) vorstellen.

Lernen sollte man sicher beides. Beginnen aber mit dem, wo man nach 5 
Minuten draufgucken irgendeine Idee davon hat, was da geschieht (auch 
wenn die dann letztlich nicht stimmt). Stimmt man dem zu, dann kann die 
erste eigentlich eine beliebige Sprache sein.
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

5 min halte ich für recht optimistisch :-)))
von Noname (Gast)


Lesenswert?

>5 min halte ich für recht optimistisch

Ich bin nicht sicher ob wir uns recht verstehen.
Es geht nicht darum, beim ersten Anblick eines Textes eines Programmes 
innerhalb von 5 Minuten zu verstehen, was da läuft. Schon garnicht wenn 
man die Sprache garnicht kennt.

Ich zitiere mich mal selbst:
>wo man nach 5 Minuten draufgucken irgendeine Idee davon hat, was da >geschieht

Es geht um "irgendeine Idee", oder sagen wir eine Intuition, ein vages 
Bild; darum ob der Code eine Vorstellung erweckt. Ob das Angucken nun 5 
Minuten oder drei Wochen dauert ist eigentlich egal.

Betrachten wir es mal von der Warte des Kenners: Wer ein gewöhnliches 
C-Programm anschaut und nach 5 Minuten keine mathematischen Ausdrücke 
(mit so komischen doppelten Kaufmans-Und) und englische Ausdrücke wie 
"if" und "else" erkannt hat und damit nicht "wenn" und "sonst" und deren 
Relevanz für die Idee des Programmierens an sich verbunden hat für den 
ist halt C als erste Sprache nichts.
Bei Assembler ist das sicher weniger wahrscheinlich. Trifft aber doch 
die Menschen, die sich auf der Register-Transfer-Ebene dem Thema 
genähert haben und was von Microcode etc. gehört haben.

(OK. Wenn ihm das mit 5 anderen Sprachen auch so geht, dann fehlt ihm 
Vor- und Allgemeinbildung. Aber dennoch kann er sicher programmieren 
lernen, wenn er das nachholt).
von W.S. (Gast)


Lesenswert?

Markus G. schrieb:
> ich habe vor einen Microcontroller zu programmieren.

Also hast du - schließe ich mal messerscharf - noch keine Ahnung, was 
für einen uC du programmieren willst, kennst noch nicht dessen Innereien 
und fragst dann so eine Frage.

Mein Rat:
1. Guck dir einen uC aus
2. Lies dessen Manual - und zwar gründlich
3. Lerne dabei auch, wie es mit den Registern, Speicher-Räumen, 
Taktzeiten, Maschinenbefehlen usw. bei diesem Typ aussieht
4. und dann entscheide dich, mit welchen Tools du das Programmieren 
dieses Chips angehen willst.

W.S.
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Die Sprachen sind sich alle irgendwie ähnlich - klar gibt es
Besonderheiten. Assembler ist da halt total anders. Eigentlich
die "Macht" über den Rechner ;).

Es dauert bis man es draufhat.

Ein fremdes Programm zu verstehen ist nicht ganz einfach, jeder
Programmierer hat seinen eigenen Stil, seine eigene Art an Probleme
heranzugehen.

Das kommt halt viel später wie eine LED mal blinken zu lassen.

C ist nach oben offen - mit Assembler kommt man irgendwann an eine
Grenze, der Sourcecode ist kaum noch überschaubar (mach mal eine
Assemblerprojekt mit 100 kB Sourcecode. Das macht man nur einmal
im Leben).

Ich hatte mal mit C als Ersatz für Assembler angefangen, mittlerweile
benutze ich C eigentlich für alles. Ich kann ein SQLite einhängen,
Websites damit bauen und einen kleinen ATTiny damit programmieren.

Immer wieder erstaunlich wie weit man damit kommt ...
von Jobst M. (jobstens-de)


Lesenswert?

Lerne C - auf dem PC!

Lerne Assembler auf dem uC den Du Dir ausgesucht hast. Insbesondere 
Register, Timer, Interrupts.

Lerne das in Assembler gelernte in C einzufügen.


Joachim Drechsel schrieb:
> mach mal eine Assemblerprojekt mit 100 kB Sourcecode. Das macht man
> nur einmal im Leben

Wie viele Leben habe ich denn?


Gruß

Jobst
von Ralph (Gast)


Lesenswert?

Für das was du machen willst ist Assembler nicht notwendig.

Also willst du schnell ein Erfolgserlebnis ==> C
Bist du leidensfähig und hast viel Zeit bis das funktioniert ==> 
Assembler.

Im Endeffekt wenn du das programmieren von C mal wirklich auf Dauer und 
ernsthaft weiterführen willst, brauchst du beides.

Programmieren wirst du dann später wahrscheinlich zu 99% in C und nur 
wenige Subfunktionen in Assembler.
Aber zumindest zum debuggen , oder zum optimieren deines C-Codes 
solltest du dann Assembler lesen und verstehen können.
von Jens (Gast)


Lesenswert?

Suche dir zur gewählten µC-Familie ein passendes Tutorial oder ein gutes 
Einsteigerbuch und arbeite es durch. Lerne wenigstens die Grundlagen der 
Assemblerprogrammierung, denn nur so steigst du wirklich dahinter, was 
der µC intern wirklich macht. Danach kannst du dich mit C beschäftigen. 
Es geht natürlich auch ohne Assemblerkenntnissen, wenn aber der Compiler 
oder du mal Mist machen, dann ist die Fehlersuche um so komplizierter, 
einfach deshalb, weil du den erzeugten ASM-Code nicht verstehst.

Als ich mit der µC-Programmierung angefangen habe, gab es für diese 
Familie noch keine sinnvollen / kostenlosen C-Compiler. Deshalb war 
Assembler das Mittel der Wahl und auch heute mache ich vieles in 
Assembler. Doch spätestens wenn es etwas komplexere Sachen werden 
sollen, wo vielleicht noch eine fertige Lib des Controllerherstellers 
verwendet werden soll, komme ich nicht mehr um C herum.
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.