Hallo Besucher, der Thread wurde 7,1k mal aufgerufen und enthält 18 Antworten

letzter Beitrag von turion87 am

Ping Pong spiel umprogrammieren

  • Hallo Community,
    ich bin neu hier im Forum und bin blutigster Anfänger was Mikrocontroller angeht.
    Wir haben an der Uni die Aufgabe bekommen das Retrogame "Ping Pong" von Conrad umzuprogrammieren. Am Ende soll eine binäre Uhr entstehen, die energiesparend arbeitet. also mit sleepmode usw.


    Dort ist ja ein ATMega8 drauf und als Programmer nutzen wir einen AVRISP mkII.
    Als SW sollen wir das AVR Studio 4 benutzen.
    ----------
    Jetzt stellt sich mir die Frage, wie fange ich überhaupt an?
    Was muss ich beachten.
    Mir fehlen wirklich alle Grundlagen und ich würde mich freuen, wenn ich hier einen guten Einstieg oder Tutorial finden würde. Ich will nicht den blanken Quellcode geliefert bekommen, sondern wissen, wie ich ein simples Programm erstmal entwickel und es compilieren kann und auf den Mikrocontroller bekomme.


    wissen muss ich auch, was ich alles mit #define definieren muss bzw. welche header dateien ich includen muss usw.


    Vielen Dank schonmal vorab.
    -Turion

  • Google mal nach. Da gibt es fertige Programme für.
    Kannst evtl. was kupfern. Sohnemann hat auch das Ding und wir wollten mal ein anderes Programm drauf packen.
    Gibts z.B. auch Tetris für.
    Als blutiger Anfänger was Atmel angeht wird das nicht einfach.
    Wenn du keine C Kenntnisse hast, dann wäre die Programmiersprache Bascom die erste Wahl für dich. Einfach zu lernen. Ich kann dir auch ein sehr gutes Buch empfehlen. Muss zu Hause mal schauen wied heißt.

  • Früher (tm) hat man sich erst mal an den zuständigen Betreuer gewandt. Das soll jetzt keine Abfuhr sein; aber es hilft Dir ja nichts, wenn Dir jetzt z.B. Bascom statt C empfohlen wird, und am Ende stellt sich heraus, dass das gar nicht zulässig ist (weil das Erlernen von C Teil der Aufgabe ist). Also frag erst mal den, der dafür da ist.

  • Hi,
    und von den Erfindern ist hier eine Menge an Projekten basierend auf den Ping Pong.


    http://www.elo-web.de/elo/mikr…-programmierung/ping-pong


    Und hier von einen der Autoren:
    http://ralf-geske.de/Breakout/Breakout.html
    Oder vom anderen:
    http://www.b-kainka.de/Weblog/Logbuch121025.html


  • erst einmal vielen Dank für eure Antworten.
    Vielleicht hab ich mich ein wenig ungeschickt ausgedrückt.


    c beherrsche ich schon, zumindest soweit, dass ich glaube mir die notwendigen Kenntnisse für die Controller anzueignen, dafür gibts ja gute Beispiele im Netz.


    Mir geht es hier speziell darum, wie ich meinen Quellcode in das Pongspiel bekomme, dafür fehlen mir leider die Infos. Dass ich dafür das AVR Studio nutzen soll, hatte ich ja schon geschrieben. Aber wie ich genau vorgehe, weiß ich nicht.
    Ich schau mir morgen mal eure Links an.


    gruß turion

  • Mir geht es hier speziell darum, wie ich meinen Quellcode in das Pongspiel bekomme, dafür fehlen mir leider die Infos. Dass ich dafür das AVR Studio nutzen soll, hatte ich ja schon geschrieben. Aber wie ich genau vorgehe, weiß ich nicht.


    Nur keine Angst vor der Materie, großartig kaputt machen wirst du durch herumprobieren schon nix. ^^ Da ich den ganzen Kram selber hier herumliegen habe hab ich's gerade mal versucht, und es ging auf Anhieb.


    1) AVR Studio starten (hab hier Version 6.2, hoffe mal bei Version 4 heissen die Menupunkte ähnlich)


    2) -> File -> New Project
    GCC-C Executable auswählen, Projectname und gewünschtes Verzeichnis angeben
    ap01.png


    3) Microcontroller auswählen, für den das Programm kompiliert werden soll (kann man später noch ändern). Bei dem PingPong dürfte das der ATmega8A sein.
    ap02.png


    4) Jetzt wird ein rudimentärer Programmrumpf erstellt, den man verwenden kann. Ist halt ganz normales C.
    ap03.png
    Man mag sich darüber wundern, das der Rumpf eine Endlosschleife enthält anstatt das Programm mit return oder so zu beenden. Aber das ist schon sinnvoll so, denn wohin sollte ein return auch zurückspringen? Auf dem AVR gibt's per se ersteinmal kein Betriebssystem, an welches man die Kontrolle zurückgeben kann (es sei denn man schreibt sich selber eins und kompiliert es mit ein). Eine Beendigung eines Programms auf einem Microcontroller wird in der Regel "einen Sprung ins Gemüse" zur Folge haben, also entweder einen Absturz oder einen Reset (wodurch das Programm neu gestartet wird). Von daher sollte man Programme halt gleich selber so schreiben das sie "niemals" enden.


    5) Um zu testen ob soweit alles klappt kann man das Programm jetzt mal kompilieren. -> Build -> Build Solution
    Falls er sich beschwert das noch kein Zielmicrocontroller (ATmega8A) eingestellt ist kann man das unter -> Project -> Projectname Properties nachholen. Dort lässt sich auch schonmal das Programmiergerät einstellen (AVRISP mk II).
    Nach dem kompilieren findet man irgendwo in den Ausgabemeldungen auch die Angaben wieviel Speicher das Programm benötigt (dynamisch verwendetes RAM natürlich nicht mit eingerechnet).


    Kurz zur Info - der AVR hat drei verschiedene Speicher:
    Flash: Hier werden Programmcode und Konstanten abgelegt
    Eeprom: Ist ein nicht flüchtiger Speicher, der von einem Microcontrollerprogramm selber beschrieben werden kann. Eignet sich daher um zur Laufzeit z.B. Benutzereinstellungen zu speichern, kann aber auch als "ROM" verwendet werden, etwa um konstante Texte, Tabellen, Zeichensätze etc. abzulegen.
    SRAM: Ist halt das RAM, das ein Programm verwenden kann. Der ATmega8 hat 1kb SRAM, was schon relativ viel ist. Allerdings sollte man beim Programmieren in C daran denken, das man sich das RAM mit dem C-Programm teilt. In dieses RAM werden also auch alle Variablen abgelegt die man in seinem Programm verwendet, ebenso der Laufzeitstack und ähnliches. Man sollte sich also angewöhnen nicht verschwenderisch mit RAM umzugehen, sonst steht man eines Tages vor unerkärlichen Programmabstürzen (die daher rühren, das man unbeabsichtigt den Stack überschreibt).


    6) Falls das kompilieren funktionierte ist das schon die halbe Miete. Die andere Hälfte ist das Flashen des Controllers. Dazu ersteinmal den AVRISP mk II an den USB-Port vom PC anschließen. Da sollte jetzt eine rote LED leuchten (um anzuzeigen das das Programmiertgerät gerade keine Verbindung zu einem Controller hat).


    7) -> Tools -> Device Programming
    Falls noch nicht geschehen kann/muss man hier nun definitiv einige Einstellungen angeben:
    Tool: AVRISP mk II
    Device: ATmega8A
    Interface: ISP
    und auf apply klicken. Wenn das soweit alles klappt den sechspoligen Wannenstecker vom mk II in die Buchse auf dem PingPongBoard stecken. Die LED am mk II müsste nun grün leuchten. Anschließend sollte man mal den Punkt Device Information wählen und schauen ob der dort verbaute ATmega8A korrekt erkannt wird.
    ap04.png


    Mögliche Probleme:
    - falls der AVRISP mk II gar nicht erst vom AVR Studio erkannt wird, dann könnte das an den USB-Treibern liegen. Da muss man mal nach passenden Treibern googeln (Stichwort: Jungo USB), die gibt's auch irgendwo bei Atmel zum download.
    - falls das PingPongBoard bzw. der dortige Controller nicht erkannt wird: Möglicherweise vergessen die Batterien anzuschließen? Im Gegensatz zu anderen Programmern versorgt der AVRISP mk II die Schaltung nicht mit Strom. Darum muss man sich selber kümmern. Der mk II kann lediglich die in der Schaltung anliegende Spannung messen.
    - falls das flashen nicht klappt kann man versuchen die Geschwindigkeit (Frequenz) des flashens herabzusetzen. Möglicherweise hatte ja vorher schonmal irgendjemand an dem Board herumgespielt und dessen Taktfrequenz dauerhaft heruntergesetzt. Die kann man durch entsprechende Einstellungen in den Fuses auch wieder heraufsetzen, allerdings sollte man sich vor dem herumspielen an den Fuses ersteinmal darüber informieren was genau man da tut. Sonst kann es passieren das man sich selber vom Controller aussperrt und ihn infolgedessen nicht mehr programmieren kann (was man zwar auch rückgängig machen kann, allerdings nicht mit einem AVRISP mk II so weit ich weis).


    8 ) Der letzte Schritt: Das Programm auf den Controller flashen. Dazu den Punkt Memories auswählen. Dort im Feld Flash das zuvor erzeugt kompilat auswählen (Format elf oder hex, sollte aber schon voreinbgestellt sein). Mit einem Klick auf Program wird der Controller nun mit unserem Programm geflasht und resetet, so das unser Programm auch gleich startet. Fertig. ^^
    ap05.png


    Schritt 8 sollte man aber vorläufig mal bleiben lassen, denn dadurch wird das momentan auf dem Controller befindliche Programm (das PingPong Spiel) gnadenlos überschrieben. Und da unser bisheriges Programm genau gar nichts tut wird auch der Controller genau gar nichts (sichtbares) mehr tun. Solange, bis wir ein sinnvolleres Programm aufspielen.



    Dann mal viel Spaß damit! Falls noch Probleme auftauchen sag Bescheid

  • Im Gegensatz zu anderen Programmern versorgt der AVRISP mk II die Schaltung nicht mit Strom. Darum muss man sich selber kümmern. Der mk II kann lediglich die in der Schaltung anliegende Spannung messen.


    Um Missverständnissen vorzubeugen: Das bezieht sich auf den original AVRISP mk II von Atmel (wie der Rest meines Geschreibsels auch). Gerade eben habe ich festgestellt das es von Olimex einen Programmer namens AVRISP mk 2 gibt, und dieser kann die Schaltung offenbar schon über USB mit Strom versorgen.

  • Hallo,


    bin heut doch noch dazu gekommen :)
    Musste erst noch eine Toolchain installieren, weil ich im AVR Studio 4 programmieren will.
    Eingestellt hab ich bis Step 7 soweit alles. Aber den Punkt Device Programmierung gibt es in der Version 4 wohl nicht.


    ich hab mal 2 screens gemacht, wo ich vermute, dass ich hier vielleicht richtig bin:


    bzw.


    Könnt ihr mir sagen, wie ich in Version an dieser Stelle weitermache?


    Danke!

  • ok danke,


    ich hab nebenbei auch schon nach code bzw. tutorials gegooglet und natürlich einiges gefunden. aber die codes sind halt fix und fertig und es ist sehr schwierig als anfänger da durchzusteigen.
    hier ein paar beispiele:
    DDRB = 0x1f;
    PORTB &= ~0x1f;
    DDRC = 0x0f;
    PORTC &= ~0x0f;
    DDRD = 0xf0;
    PORTD &= ~0xf0;


    oder sowas PORTB &= ~(1 << 2); ..
    PORTD |= 0b11000000;
    PORTB |= 0b00000000;


    habt ihr gute anlaufstellen, um die grundlagen für die mikrocontrollerprogrammierung in c zu erlernen?


    habt vielen dank schonmal!