Forum: Mikrocontroller und Digitale Elektronik Programmierung eines ATMega - brauche Rat und Hilfe


von Maik O. (tenner21)


Lesenswert?

Hallo uC-Freunde.

An dieser Stelle möchte ich mich auch gleich entschuldigen. Unterwegs 
habe ich nur ein Smartphone, und das kennt kein Micro-Symbol ;).

Zu meinem Anliegen:

Am Freitag bekam ich endlich ein gutes Evaluations-Board, das STK500 von 
Reichelt. Zum.Programmieren habe ich gleich einen entsprechenden 
Programmer mit dazu bestellt, von Diamex oder so glaube ich. Ist ein USB 
to ISP-Programmer. Nach mehreren Stunden vergeblicher Kontaktaufnahme 
mit dem Board über die unterschiedlichsten AVR-Studio-Varianten, 
angefangen von V 4.16 bis V 5 habe ich dann einen Freund kontaktiert.
Mna könne es schon fast einen "epischen Fehler" nennen - steckte doch 
der ISP-Stecker im falschen Port, nämlich in dem weiß hinterlegten "ISP 
6-Pin" anstelle des rot hinterlegten. Naja - die Beschriebung des Boards 
ist englisch, und mein Fachenglisch ist etwas eingerostet.

Naja. Kontakt bekamen wir immer noch nicht. Nach 2 weiteren Stunden 
hatttme ich es dann doch irgendwie geschafft eine dauerhafte Verbindung 
hinzubekommen und nun läuft alles wie geschmiert. Ach ja - nutze 
AVR-Studio 4.18 SP3 auf Win 7 64-Bit.

Nun kann ich noch kein Assembler programmieren. Hab ein Testprogramm 
zwar für meinen ATMega 8515 umschreiben können und es lief auf anhieb, 
jedoch sind meine eigentlichen Kenntnisse gleich NULL.

Nun meine Fragen:

Gibt es irgendwo ein Tutorial für Assembler, bei welchem man quasi im 
Programmieren Lernen kann (mit Syntax-Erklärungen, dass auch ein 
Anfänger alles versteht)? Auch wäre eine komplette Bibliothek nicht 
verkehrt, welchr einem die Benutzung von Timern, Zählern, Ausgängen und 
Eingängen sehr gut erklärt...

Ich bin recht firm in der BASCOM-Programmierung und komme damit 10mal 
besser klar als mit Assembler. Kann man ein bas-Programm in ein Hex 
umwandeln, sodass ich das via AVR-Studio in den Controller flashen kann? 
Auch müsste ein entsprechender Debugger dabei sein...

Übrigens kann ivh seltamerweise den Controller auch via AVR-Studio 
problemlos im EEPROM als auch im FLASH beschreiben. Weiß nicht, warum 
alle immer dieses Ponyprog empfehlen, welches bei.mir eh net läuft 
(Verbindungsfehler ohne Ende)

Wäre echt dankbar für gute und nützliche Antworten. Ich sag das 
deswegen, weil ich auf Antworten wie "Du hast noch ne Menge zu lernen" 
verzichten kann. Das weiß ich nämlich auch selbst.

Wenn es irgendeine Möglichkeit gibt, ein Basom-Proramm zu debuggen und 
dann auch noch in ein HEX umzuwandeln - immer raus damit :D


MFG Maik

von Karl H. (kbuchegg)


Lesenswert?

Maik Schulze schrieb:

> Gibt es irgendwo ein Tutorial für Assembler,

AVR-Tutorial

> bei welchem man quasi im
> Programmieren Lernen kann (mit Syntax-Erklärungen, dass auch ein
> Anfänger alles versteht)?

Wenn du spezifische Fragen hast, stell sie hier im Forum und jemand wird 
dir weiterhelfen

> Kann man ein bas-Programm in ein Hex umwandeln, sodass ich das
> via AVR-Studio in den Controller flashen kann?

BASCOM
(danach googeln)

von Floh (Gast)


Lesenswert?

Maik Schulze schrieb:
> Gibt es irgendwo ein Tutorial für Assembler, bei welchem man quasi im
> Programmieren Lernen kann (mit Syntax-Erklärungen, dass auch ein
> Anfänger alles versteht)? Auch wäre eine komplette Bibliothek nicht
> verkehrt, welchr einem die Benutzung von Timern, Zählern, Ausgängen und
> Eingängen sehr gut erklärt...

guggst du links oben:
AVR -> AVR-Tutorial
:-)

Übrigends, warum brauchst du einen ISP, wenn du das STK500 hast?
Da ist ein viel besserer Progger drauf als bei dem Olimex.

von Gerhard G. (xmega)


Lesenswert?

Hallo,

Maik Schulze schrieb:
> Nun kann ich noch kein Assembler programmieren.

wenn du BASCOM kannst, dann würde ich dir das Programmieren in "C" 
vorschlagen.

Ist es für dich dir Wichtig, in Assembler zu programmieren?

Ein STK500 Board muss nicht unbedingt in Assembler programmiert werden,
das kann auch über das AVR-Studio 4.18 in "C" erledigt werden.

Gruß Xmega

von Maik O. (tenner21)


Lesenswert?

Vielen Dank erst einmal für die Antworten. Fragen habe ich massig - da 
könnt ihr sicher sein, dass ich die auch stellen werde.

Ich hatte vor 2 Jahren mal C ausprobiert, kam damit aber irgendwie nicht 
richtig klar. Lag vielleicht daran, dasa ich jetzt erst AVR Studio zum 
Laufen bekommen habe.

Das Wichtigste ist der Header. Dazu bräuchte ich eine gute Vorlage, am 
Besten mit einer Beschreibung, was die einzelnen Syntax bedeuten.

Außerdem möchte ich in Zukunft auch den internen Taktgeber ansprechen.

Nutzen tue ich folgende Prozessoren:

Vorrangig den Atmaga8515L-8PU
und den Atmega8-16PU.

Für beide brauche ich dann die Header.

Da sich Bascom und C voneinander stark unterscheiden, brauche ich ein 
gutes Tutorial. Ich nehme an, ihr empfehlt mir ebenfalls eines hier aus 
dem Forum, korrekt?

Die ersten Programme zum Einstieg sollen mit den Ausgängen spielen.  Mit 
dem STK500 geht das echt gut umzusetzen. Für weitere kann ich ja 
Add-On-Boards nutzen oder selbst Fertigen (ist ja net sooo schwer).
Ausgabe von Schrift usw. soll erst einmal keine Rolle spielen.

Im AVR-Studio muss ich dann anstelle von Assembler AVR-GCC wählen, 
korrekt?
Wie schaut das aus mit Bibliotheken im Programm selbst? Vorerst möchte 
ich davon Abstand nehmen. Kann ich die Programme auch ohne Bibliothek 
schreiben?

Hoffe, dass die Fragen nicht allzu blöd gesellt sind. Sind wie gesagt 
meine ersten richtigen Erfahrungen. Hatte mir vor 2 Jahren mal das myAVR 
bestellt, aber ohne Testfunktionen ist das einfach nur Mist.


MFG Maik

von keinGast (Gast)


Lesenswert?

Hallo Maik,

wenn du dich mit Basic auskennst - dann nutze doch Bascom.
Mit Bascom kannst du die erstellten Programme kompilieren - so dass du 
als Resultat ein hex-file erhälst und dieses flashst du dann mit WinAVR 
auf den µC im STK500.


Gruß
keinGast

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Maik Schulze schrieb:
> Gibt es irgendwo ein Tutorial für Assembler, bei welchem man quasi im
> Programmieren Lernen kann

Versuch mal das hier:
http://www.avr-asm-tutorial.net/avr_de/beginner/index.html

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Und hier einrichtiger Kurs.
http://www.weigu.lu/a/

von Karl H. (kbuchegg)


Lesenswert?

Maik Schulze schrieb:

> Ich hatte vor 2 Jahren mal C ausprobiert, kam damit aber irgendwie nicht
> richtig klar. Lag vielleicht daran, dasa ich jetzt erst AVR Studio zum
> Laufen bekommen habe.
>
> Das Wichtigste ist der Header.

Nö. Das Wichtigste ist ein C-Buch!

von Maik O. (tenner21)


Lesenswert?

C-Buch hab ich. Ist aber anscheinend nicht das Richtige. Dort geht es 
viel mehr um das Programmieren von Dateien für den Computer. Hab 3 
verschiedene Bücher - alle dasselbe.

Wenn das mit Bascom gut klappen sollte, dann wäre das ja supi. 
Allerdings weiß ich nicht, ob Bascom auf meinem Rechner läuft. Ist ein 
Laptop von Acer mit Win7 64Bit.

Ich hab gehört, dass es bei Bascom-Programmen zu Problemen kommen kann. 
Ich möchte, dass das Prog hinterher läuft. Muss ich im Bascom denn noch 
irgendetwas einstellen? Bisher hab ich nur einfache Programme zur 
Nutzung auf dem heimischen Rechner erstellt. Halt alte Schule... Mein 
erster Rechner war ein Pentium I mit Win95. Da liefen DOS-Programme wie 
Bascom und QBasic noch problemlos...


MFG

von Mike J. (emjey)


Lesenswert?

> "epischen Fehler"
Ich habe mich erst mal schlau gemacht was du damit meinen könntest.

Meinst du damit einen "angedichteten Fehler" oder einen "eingeredeten 
Fehler" ?

Um mit einem AVR umgehen zu können brauchst du:

1. einen AVR und das dazugehörige Datenblatt
2. einen guten isp-Programmer
http://www.fischl.de/usbasp/
3. ein paar Grundlagen zur Programmierung und gute Beispiele
http://www.mikrocontroller.net/articles/AVR
4. ein C - Buch
http://openbook.galileocomputing.de/c_von_a_bis_z/
5. eine Entwicklungsumgebung (AVR-Studio oder Eclipse + AVR-Plugin) und 
WinAVR
6. Die Bereitschaft ein einfaches LED-Blinkprojekt umzusetzen

von ich da (Gast)


Lesenswert?

Du stellst hier viele Fragen, beschreibst das was du bisher gemacht hast 
und willst nun in C einsteigen?

Höre mal, lerne zuerst mal vernünftig mit dem was du hast umzugehen.
Okay, zum proggen über einen Laptop brauchst du einen ISP-Programmer.

Nur solltest du mal das wesentliche vom STK500 verstanden haben, auch 
was beim AVR-Studio einzustellen ist, damit du über Bascom den Progger 
bedienen kannst. Was bei Bascom zu tun ist, um ein Hexfile zu erstellen, 
wie man mit Bascom das Programm debuggen kann usw.

Wenn du das vernünftig kannst, darfst du dich an C trauen.
Also immer schön der Reihe nach.

von Oliver (Gast)


Lesenswert?

Maik Schulze schrieb:
> Ich hab gehört, dass ...

Das ist dein Hauptproblem. Alles, was du bisher zum Thema "weisst", 
basiert auf Gerüchten, falschen Vorstellungen, und Unwissen.

Das ist ja zunächst einmal nicht weiter schlimm, jeder fängt mal an.

Lies halt mal die o.a. links durch, und versuche dir klar zu werden, was 
du eigentlich willst (Assermbler lernen, C lernen, Bascom benutzen, 
eingach nur ein Programm shcreiben, ...) dann klappt das auch mit einem 
AVR.

Um auch mal eine deiner Fragen zu beantworten: Zum Debuggen auf dem AVR 
selber brauchst du einen JTAG-Programmier-Adapter, also einen Dragon, 
oder einen JTAG-ICE II. Das geht mit deinem STK500 nicht, egal, mit 
welchem Compiler du dein Prugramm erstellt hast.

AVR-Studio hat einen Simulator, der simuliert auf Sourcecodelevel 
Assembler oder C.

Oliver

von ich da (Gast)


Lesenswert?

Oliver, alles schön und gut, was du hier beschreibst.

Nur, was nützt einem ein Dragon oder ein anderer JTAG-Programmieradapter 
bzw das was zum debuggen nötig ist, wenn man -außer in englich- 
nirgendwo genau lesen bzw sich informieren kann, was debuggen bedeutet, 
wie es funktioniert, was da genau wie abläuft, wie man das zu 
interpretieren hat usw.

Über vieles kann man sich nur informieren wenn man technisches englisch 
beherrscht. Dann muss man den technischen Krempel auch noch verstehen.

von Karl H. (kbuchegg)


Lesenswert?

ich da schrieb:

> Nur, was nützt einem ein Dragon oder ein anderer JTAG-Programmieradapter
> bzw das was zum debuggen nötig ist, wenn man -außer in englich-
> nirgendwo genau lesen bzw sich informieren kann, was debuggen bedeutet,
> wie es funktioniert, was da genau wie abläuft, wie man das zu
> interpretieren hat usw.

Genau aus diesem (und ähnlichen Gründen) ist es extrem angeraten, seine 
ersten Programmiererfahrungen auf einem PC zu machen. Denn dort 
funktionieren die Dinge genau so, wie sie in den Büchern (für eine 
bestimmte Entwicklungsumgebung auf dem PC) beschrieben sind.

Wechselt man dann auf den AVR, dann
* hat man schon ein gewisses Grundverständnis für die systemunabhängige
  C Programmierung. ALso die Dinge, die in C immer gleich sind, egal
  welche CPU_Betriebssystem_Entwicklungsumgebung man benutzt
* kennt die Begriffe
* braucht sich nur noch auf die Spezialitäten zu stürzen, in denen
  sich die Programmierung eines AVR von der auf einem PC unterscheidet,
  weil ein PC nun mal keine Ports hat, an die man LED anschliesst oder
  einen ADC an dem man Spannungen misst.

Wie eine for-Schleife funktioniert, ist auf allen C Systemen gleich. 
Stringverarbeitung: detto. Variablen, arithmetische Ausdrücke, if, 
Promotion rules, Operatorenreihenfolge, Funktionen, Preprozessor .... 
alles identisch. Das alles kann man (um 3 Größenklassen besser) locker 
auf einem PC unter Anleitung eines Buches (und ganz wichtig: 
Durchexerzieren der Übungen im Buch) lernen.
Und wie die speziellen Dinge eines AVR funktionieren (Zugriff auf 
Hardware) ... dafür gibt es das AVR-GCC-Tutorial.

> Über vieles kann man sich nur informieren wenn man technisches englisch
> beherrscht.

Immer langsam mit den jungen Pferden. Technisches Englisch, gerade im 
Bereich Informatik, ist sehr einfach gehalten. Schliesslich müssen das 
auch die Japaner verstehen. Man benötigt keinen Abschluss in englischer 
Literatur um sowas lesen zu können. Am Anfang wirds ein bischen holpern, 
aber da ohnehin immer die gleichen Begriffe benutzt werden, hat man 
schnell raus was sie bedeuten.

von ich da (Gast)


Lesenswert?

Karl Heinz, deine Antwort ist zwar -für mich- verständlich, aber ich 
kann nicht nachvollziehen was du da am Beispiel lernen von C am PC 
mittels gutem Buch vorschlägst.

Einmal hängt es vom Buch ab, -du hast keines vorgeschlagen, angeraten-
dann ob das Buch verständlich -für normal bedarfte, keine Informatiker 
oder Abiturienten- geschrieben wurde. Also ob zum verstehen vom Buch 
Vorkenntnisse erfoderlich sind.

Dann davon, was im Buch an Lernbeispielen beschrieben ist, umsetzbar 
ist.
Verschiedene Bücher von ELV sind für Normalos unverständlich.

Ich glaube Roland Walter hat in seinem Buch über Mikrocontroller mal 
geschrieben, er hatte aufgrund einer Erfahrung mit Studenten 
geschrieben, er will sein Buch für Anfänger verständlich halten, soweit 
wie möglich Fachbegriffe, Fachwörter weg lassen. Ansonsten sind viele 
Bücher vollgepfropft mit technischen Begriffen in fremder Sprache.
Also nicht gut für Anfänger.

Buchauszug aus meinem Buch "Die C Sprache", alle diese Beispiele -die 
ich hier einfüge- stellen das gleiche Programm dar. Alle Versionen sind 
kompilierbar und laufen richtig. Man sieht aber im extremen Fall Nr. 6, 
dass das Programm auch fast unlesbar geschrieben werden kann.
Der Stil des Programm schreibens ist also sehr wichtig.

1. main() ( int i; for(i=0;i<5;++i) printf("Guten Tag\n"); )

2. main()
   (  int i; for(i=0;i<5;++i)
      printf("Guten Tag\n"); )

3. main()
   (  int i;
      for(i=0;i<5;++i)
      printf("Guten Tag\n"); )

4. main() { int
            i; for(i=0;
            i<5;++i) printf("Guten Tag\n"); }

5. main() { int
            i; for(
            i=0;
            y<5) printf(
            "Guten Tag\n")
            ; }

6.                 main()
     {
       int
               i;
     for(
                          i=0;
                     i<5;
                     ++i)
             printf(
                         "Guten Tag\n"
         )
                            ;
                  }

Beispiele Ende

Das hier zitierte Beispiel ist nur eines von vielen Argumenten die nicht 
gerade für das lernen von C sprechen. Wenn man schon gewaltige Fehler 
beim schreiben eines C Programmes per Stil machen kann, sich dann durch 
das nicht funktionierende Programm bzw die Fehlermeldungen kümmern muss, 
bewirkt das nicht gerade ein lernen wollen von C.

Hinzu kommt ja noch der ganze Wust an Header, Linker usw.
Da leicht ein- bzw durch zu steigen motiviert nicht gerade C erlernen zu 
wollen.

Mein aufgeführtes Buch zum erlernen der Sprache C geht ja noch, weil 
darin wichtige Punkte gut erklärt sind. Andere C Bücher erklären dies 
nicht so ausführlich, steigen schon viel zu schnell in die Materie C 
ein.

Das Problem ist ähnlich als wolle ein Matheprofessor einem Grundschüler 
ein gutes Buch über Mathe empfehlen. Er kann das wohl besser für 
Studenten.

von Krapao (Gast)


Lesenswert?


von Oliver (Gast)


Lesenswert?

ich da schrieb:
> Da leicht ein- bzw durch zu steigen motiviert nicht gerade C erlernen zu
> wollen.

Es zwingt dich ja niemand. Ansonsten gibt es dazu heutzutage so viel 
Infos im Netz, daß man zusammen mit einem guten Buch das schon 
hinkriegt.

Maik Schulze schrieb:
> Ich bin recht firm in der BASCOM-Programmierung

Je nun, dann bleib doch einfach dabei.

Oliver

von Maik O. (tenner21)


Lesenswert?

Jetzt habt ihr mich komplett verwirrt. Ehrlich. Nun weiß ich weder Ein 
noch Aus. Nur, dass mir von C als Anfänger abgeraten wird. Sei's drum - 
ich nehme den Ratschlag dankend an.

Eine Bitte für die Zukunft: Mir ist nicht geholfen, wenn ihr von der 
Argumentation abfallt und anfangt, euch mit Fachbegriffen zu bewerfen, 
die ich nicht verstehe. Streiten ist eh ein NoGo.

Sicher - ich habe keine großartigen Kenntnisse gon Assembler und auch 
keine, wie ich ein Programm mit Bascom debugge, geschweige denn was 
debuggen überhaupt genau ist. Dazu ein großes Lob an den Vorsprecher, 
denn ich habe.mich nicht wirklich getraut, das auszuspechen.

Aus Büchern und simulationen lernt man zwar ne Menge, jedoch kann ich 
auch aus Erfahrung sprechen, dass gerade die direkte Programmierung nach 
1-2 Simulationen ein echtes Erfolgserlebnis dar stellt und das Interesse 
am Programmieren versteift. Ich meine - wozu habe ich das 
Programmer-Board, wenn ich es eh nicht nutzen darf... Wenn die Ausgänge 
genau das tun was sie sollen - DAS ist ein Erfolgserlebnis, welches man 
quasi auch anfassen kann.

Ich bin sehr gut in der Erstellung/Programmierung von SPS-Steuerungen, 
nur kann man das leider nur ansatzweise mit der AVR-Prorammierung 
vrgleichen. Wäre echt zu schön, würde ein Controller mit der gleichen 
Syntax programmiert werden wie eine SPS. Naja - man kann nicht alles 
haben :D

Werde mich am Freitag mit dem Assembler-Tutorial befassen. Bin derzeit 
auf Montage, da hab ich wenig Zeit. Wenn Bascom so schwierig bei der 
Programmerstellung in Bezug auf Comlilieren und Simulieren ist, dann 
sollte ich wohl doch Assembler komplett lernen. Man wird ja nicht jünger 
und wächst eh mit seinen Aufgaben.


MFG Maik

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.