Forum: Mikrocontroller und Digitale Elektronik AVR Atmega 8 in C programmieren lernen


von Fynn V. (e-nick)


Lesenswert?

Hallo,

ich hab mir als Ziel gesetzt AVR's mit C programmieren zu lernen. In 
meinem Fall der Atmega8.
Mein großes Problem ist, dass ich einfach nicht auf den richtigen Pfad 
komme. Als erstes habe ich mir ein Bausatz mit Buch gekauft um einen 
strukturierten Einstieg zu erlangen. Das Buch war eher für 
Fortgeschrittene und die Platine mit dem AVR war auch eher schlecht als 
recht.

Dann hab ich viel im Internet nach Tutorials gesucht und mithilfe dieser 
dann versucht zu programmieren. Leider fand ich meistens nur Bascom 
Tutorials oder welche, bei denen man C schon können sollte. Ich hab hier 
im Forum und überhaupt auf mikrocontroller.net viel gesucht gelesen und 
ausprobiert, aber ich bekomm es einfach nicht hin.

Da viele mir auch geraten haben erst C am PC zu lernen und dann später 
mit dem hier bereitgestellten Tutorial an die AVR's ran zu gehen, hab 
ich mir ein Buch (Einstieg in die Programmiersprache C und C als erste 
Programmiersprache) besorgt. Ich hab mich jetzt auch damit beschäftigt, 
aber irgendwie ist das komplett von µC entfernt. Wie ich  jetzt einzelne 
Ports, Pins, ... ansteuere wird ja in solch einem Buch nicht erwähnt.
Das einzige was ich aus den Büchern gelernt hab ist ,wie ich bestimmte 
Algorithmen für z.B ein Zinsrechner aufstellen kann.

Ich wollte nochmals mit AVR's durchstarten und
hab mir eine Programmierplatine komplett selbst gebaut:
- stabile Spannungsversorgung
- Atmega 8
- 2x16 LC Display mit Standartcontroller
- 4 LED
- 2 Taster

Aber mehr als eine blinkende LED oder ein Lauflicht bekomm ich nicht 
hin.
Ich hab kein Anhaltspunkt wie ich was machen kann. Es heißt immer 
programmieren, programmieren, programmieren und dann wirds schon, aber 
ich brauche ja irgendwas, dass mir sagt wie ich was anfange. Es ist z.B 
auch nicht möglich, wenn ich mich in ein Raum setze ohne Internet und 
Wörterbuch, nur mit einem Stift und Blattpapier und jetzt diesen Text in 
chinesisch übersetzen soll.
Was könnt ihr mir für einen Weg zum Ziel vorschlagen?
Ich muss wissen, welche Bibilotheken ich brauch und wo her ich sie 
bekomme.
Wie kann ich einzelen PIN als Ein oder Ausgänge definieren?
Wie spricht man ein LCD an?
So könnte es bücherweise weiter gehen.
Ich hoff ihr hab einen Rat für mich.

E-Nick

von Christian B. (chbalnuweit)


Lesenswert?

Also ich halte es auch für den richtigen Weg, erstmal etwas C/C++ am PC 
zu lernen. Da hast du bessere Debug-Möglichkeiten und weniger 
Stolperfallen.

Pins und Ports ansteuern ist nichts anderes, als bestimmte Bits in einer 
Binärzahl (im Atmega ein "Register") zu verändern.

Wenn du mit C halbwegs klarkommst, sprich Funktionen schreiben, 
Bit-Manipulation etc. dann kannst du das AVR-GCC-Tutorial durcharbeiten.

LEDs blinken lassen, Timer verwenden, AD-Wandler benutzen, LCD ansteuern 
etc. Das wird da alles erklärt. Grundkenntnisse in C sind aber 
vorraussetzung um auch zu verstehen was da passiert!

Dann entwickeln sich auch ganz schnell eigene Ideen und 
Anwendungsbeispiele.

Viele Grüße

Christian

von Cshape (Gast)


Lesenswert?

Hey,

sehe dir auf Youtube vll mal die Tutorials von Patrick Hood-Daniel an.
Einfach mal Atmega32 eingeben, dann müste man ihn schon finden.

Zwar konnte ichz vorher schon etwas C programmieren, aber ich fand seine 
Videos trotzdem sehr hilfreich.
Sollte man kein abgeschlossenes Studium haben, oder sonst gute 
Grundlagen haben, hilft einem das sicher enorm. So erklärt er beim UART 
oder bei PWM Steuerung nicht nur dne Code, sondern auch dne Hintergrund, 
was es damit überhaupt auf sich hat.

Hoffe das hilft dir in die richtige Richtung zu finden

von Uwe (Gast)


Lesenswert?

Öffne gleichzeitig diese Dokumente bzw. Seiten:
http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
http://www.mikrocontroller.net/articles/HD44780
Und fang an das Tutorial zu lesen.
Hinten im Datenblatt vom Mega gibt es noch eine Tabelle mit Registern 
die kannst du dir schon mal ausdrucken (zusätzlich solltest du jedoch 
noch die Header Datei für den Mega8 öffnen bzw. Ausdrucken)
Im Datenblatt stehen in den Einzelnen Kapiteln der Harware drinne wie 
diese aufgebaut ist und wie man sie benutzt. Das Tutorial ist für Leute 
die kein Englisch können einfacher zu verstehen.

von Fynn V. (e-nick)


Lesenswert?

und wie lange braucht man so im Schnitt bis man halbwegs C programmieren 
kann? Ich mach eine Ausbildung und hab nur abends Zeit.
Und sollte ich mit den Büchern weiter arbeiten oder auf eine andere Art 
mein Glück probieren?

Nick

von Yalu X. (yalu) (Moderator)


Lesenswert?

Nico V. schrieb:
> Da viele mir auch geraten haben erst C am PC zu lernen und dann später
> mit dem hier bereitgestellten Tutorial an die AVR's ran zu gehen, hab
> ich mir ein Buch (Einstieg in die Programmiersprache C und C als erste
> Programmiersprache) besorgt.

Richtige Entscheidung!

> Ich hab mich jetzt auch damit beschäftigt, aber irgendwie ist das
> komplett von µC entfernt.

Das ist auch in Ordnung, sonst würdest du den zweiten Schritt vor dem
ersten tun.

> Wie ich  jetzt einzelne Ports, Pins, ... ansteuere wird ja in solch
> einem Buch nicht erwähnt. Das einzige was ich aus den Büchern gelernt
> hab ist ,wie ich bestimmte Algorithmen für z.B ein Zinsrechner
> aufstellen kann.

Das Buch dient vor allem dazu die Grundlagen von C zu lernen. Wenn du
das durch hast, kommt als nächstes das AVR-GCC-Tutorial. Darin gibt es
u. a. das Kapitel "Zugriff auf Register", wo genau das mit den Ports und
Pins drin steht.

Wenn du aber zu früh auf dem Mikrocontroller herumexperimentierst,
passiert die das, was vielen hier passiert: Sie haben mittels Copy-Paste
aus den Beispielen im Tutorial ein Programm zusammengezimmert und
stellen fest, dass es keinen Mucks von sich gibt. Sie fragen dann nach
Details zu Timern oder ADCs, in Wirklichkeit haben sie aber einfach nur
ein Array falsch definiert oder die Funktion einer Switch-Anweisung
nicht richtig verstanden. Solche Dinge sollte man aber im Schlaf
beherrschen, sonst ist man bei der Mikrocontrollerprogrammierung ewig
auf der Fehlersuche.

Du kannst natürlich, wenn du ungeduldig bist, mit der Mikrocontrollerei
schon beginnen, bevor du das C-Buch ganz durchgearbeitet hast. Um eine
LED zum Blinken zu bringen, brauchst du schließlich nicht den kompletten
C-Sprachumfang. Wenn du dann aber auf Probleme stößt, solltest du nicht
gleich das Forum scheu machen, sondern erst einmal überlegen, ob die
Ursache dafür nicht in deinen noch unvollständigen C-Kenntnissen liegen
könnte.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Nico V. schrieb:
> und wie lange braucht man so im Schnitt bis man halbwegs C programmieren
> kann? Ich mach eine Ausbildung und hab nur abends Zeit.

Kannst du schon in einer anderen Sprache (Basic, Pascal ...) 
programmieren?

Dann solltest du in zwei Wochen (jeden Abend 1 Stunde, am Wochenende 
etwas mehr) schon ziemlich weit kommen.

Der Titel deines Buchs "C als erste Programmiersprache" lässt allerdings 
darauf schließen, dass du bei Null anfängst. Dann wird die Sache wohl 
etwas länger dauern. Wie lange genau, kann ich mangels Erfahrung schwer 
sagen, da ich selber C als vierte Programmiersprache (nach Basic, 
Assembler und Pascal) gelernt habe. Da ging das Lernen von C natürlich 
sehr viel leichter von der hand.

von Trolloge (Gast)


Lesenswert?

Yalu X. schrieb:
> da ich selber C als vierte Programmiersprache (nach Basic,
> Assembler und Pascal) gelernt habe. Da ging das Lernen von C natürlich
> sehr viel leichter von der hand.

Kennst du eine, kennst du alle. Nur ein paar andere Schlüsselwörter 
sonst nix.
Programmieren findet auf einer höheren abstrakten Ebene statt. Ein 
entworfenes Programm in irgendeiner Sprache runterschreiben ist nur 
Fleißarbeit.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Trolloge schrieb:
> Kennst du eine, kennst du alle. Nur ein paar andere Schlüsselwörter
> sonst nix.

Ganz so einfach ist es leider nicht, aber der Sprung von Pascal nach C 
(oder umgekehrt) ist wirklich nicht groß, und auch Basic ist nicht weit 
davon entfernt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Noch etwas zum Lernen von C auf dem PC:

Ich bilde mir ein, C ziemlich gut zu können (nutze es immerhin schon
seit über 20 Jahren). Trotzdem:

Wenn ich einen Algorithmus für einem Mikrocontroller schreiben möchte,
der etwas komplizierter als Berechnung von ein paar Formeln ist,
implementiere ich ihn erst auf dem PC. Da habe ich die Möglichkeit
größere Datensätze reproduzierbar von einer Datei zu lesen und die
Ergebnisse wieder in eine Datei zu schreiben, um diese Daten bspw.
anschließend mit einem Plot-Programm grafisch darzustellen.

Erst wenn der Algorithmus mehrere Tests erfolgreich durchlaufen hat,
wird er in ein Mikrocontrollerprogramm eingebaut, das dann die
Eingangsdaten nicht von einer Datei, sondern bspw. von einem Sensor
liest. Wenn dann etwas nicht funktioniert, kann ich mir wenigstens
halbwegs sicher sin, dass der Fehler nicht in meinem Algorithmus liegt.

Debuggen auf dem Mikrocontroller ist nicht nur umständlicher, sondern
auch schwieriger als auf dem PC. Deswegen sollte ein Programm, bevor man
es auf den Mikrocontroller spielt, wenigstens zu 95% fehlerfrei sein.
Sonst macht die Mikrocontrollerei überhaupt keinen Spaß.

von Fynn V. (e-nick)


Lesenswert?

Naja zu der Frage ob ich schon eine Programmiersprache kann, kann ich 
nur mit "eher nicht" antworten. Ich mach eine Ausbildung zum 
Elektroniker für Automatisierungstechnik und habe auf der S7 FUP also 
eine grafische Sprache gelernt. Wie es so in der Ausbildung ist 
natürlich nur Grundlagen.
Mikrocontroller find ich viel interessanter und auch C ist besser wie 
das FUP, welches aus Quadrate und Stiche aufgebaut ist.
So das heißt ich muss leider von 0 anfangen bzw. ich hab ja jetzt schon 
ein paar Sachen gelernt, dann halt ein paar Seiten weiter.

Wenn ich die ganzen Tipps mal zusammenfasse:
- als erstes C lernen
- und dann erst AVR's
- selbst Projekte verwirklichen und mich tierisch freuen das ich das 
Ziel erreicht hab!

Nico

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.