Forum: Projekte & Code Tetris auf dem AtMega8


von Bartholomäus S. (sam_vdp)


Angehängte Dateien:

Lesenswert?

Hallo,

eigentlich ist das Folgende eher eine Projektvorstellung, aber da es
für sowas ja kein Board gibt und ich auch Code habe, poste ich's mal
hier.

Das Ganze soll, wenn es fertig ist, mal so eine Art selbst-gebastelter
Gameboy (Your Own Do-it-yourself Avr Handheld :) )  werden, das
vorliegende Tetris (http://paranoidsoftware.de/yodah.jpg) ist eher ein
Prototyp.
Hardware ist ein AtMega8, der mit 8 Mhz läuft, fünf Kurzhubtaster und
ein Grafikdisplay (128x64) von Pollin (Best. Nr. 120 292)
Schaltpläne habe ich leider noch keine gemacht, aber was wo rankommt
ist eigentlich aus dem Code ersichtlich. Apropos Code,  das Ganze ist
sehr unaufgeräumt, weil es an einem Tag und bis kurz vor Mitternacht
entstanden ist...

Ein Video gibts hier:
http://paranoidsoftware.de/yodah.avi

Beste Grüße,
Bartl

von Läubi (Gast)


Lesenswert?

Ich find das Projekt Geil!
Doof das ich grad bei Pollin bestellt hatte, sosnt hätt ichs glatt mal
nachgebaut :(

von Lupin (Gast)


Lesenswert?

tetris ist toll, hab ich schonmal mit nem ARM und dem S65 display
gemacht. eigentlich gibt es bei tetris aber nur blöcke aus 4
Klötzchen.

Wenn du es richtig machen willst solltest du die spiele auswechselbar
machen. ein modulschacht im 2,54mm raster wäre eine möglichkeit, auf
den modulen sitzt dann ein flash speicher der an das externe memory
interface eines AVRs angeschlossen ist. Aber ich glaube man kann keinen
code im externen speicher ausführen, dann müsstest du eine virtuelle
maschine bauen - ein art Java interpreter wäre cool :)

ich hatte das ganze mal mit nem großen ARM controller, einem SRAM und
SD-Karte vor, bin aber zu unmotiviert :(

von Frank E. (erdi-soft)


Lesenswert?

@Lupin:

Da kannste dir auch nen GamePark 32 kaufen. Der besteht aus nem ARM mit
SDRAM, Farb-TFT und SD-Card-Slot :) Und lässt sich wohl auch relativ
einfach selber programmieren.

Oder du wartest auf den Nachfolger (kann sein, dass der auch schon da
ist. Habe mich schon länger nicht mehr informiert.)

von Tobias S. (tobias)


Lesenswert?

>>Apropos Code,  das Ganze ist
>>sehr unaufgeräumt, weil es an einem Tag und bis kurz vor Mitternacht
>>entstanden ist...

Also soviel Code an nur einem Tag zu hacken ist nicht schlecht!

Du solltest mal zu einem Programmierwttbewerb auf Zeit gehen und den 1.
PLatz belegen :)

Tolles Projekt!

Gruss Tobias

von Bartholomäus S. (sam_vdp)


Lesenswert?

> Aber ich glaube man kann keinen
> code im externen speicher ausführen, dann müsstest du eine virtuelle
> maschine bauen - ein art Java interpreter wäre cool :)

Ich hatte mir einen Bootloader vorgestellt, der Spiele von einer SD
Karte liest, aber da wäre halt das Problem, das a) der SD Zugriff zu
aufwendig für einen Bootloader ist und b) man nur 10000 mal das Spiel
wechseln könnte. Aber stimmt schon, eleganter wäre es allemal von einem
externen Speichermedium.

> Oder du wartest auf den Nachfolger (kann sein, dass der auch schon
> da ist. Habe mich schon länger nicht mehr informiert.)
Ja, den gibts auch schon. Heißt GP2X, aber kostet halt soviel wie ne
PSP, was ich doch ziemlich teuer finde.

Vielen Dank für die netten Kommentare und beste Grüße,
Bartl

von Steven Kienast (Gast)


Lesenswert?

Sehr cool :). Will dieses Display demnächst auch ansteuern mit nem
Mega8. Vielleicht aber seriell. Aber irgndwie weiss ich nicht wie
schnell das Display daten empfangen kann, der controller da läuft ja
nur mit 33khz.

Ich selbst dachte da so an Snake, oder auch ein langsames oszi^^

von Läubi (Gast)


Lesenswert?

Wenn jemand bei Pollin bestellt, kann er mir dan ne kleine Nachricht
zukommen lassen?
Würde dann ggf ein Display mitbestellen :)

von Tobias S. (tobias)


Lesenswert?

@Steven Kienast
Aus dem Datenblatt geht hervor, dass um das serielle Interface zu
benutzen der Pin P/S auf 0 gelegt werden muss. Da dieser Pin vom Modul
aber garnicht nach ausen gefuehrt wird nehme ich mal an, dass man es
auch nur im 8bit Betrieb verwenden kann.

Gruss Tobias

von Steven Kienast (Gast)


Lesenswert?

Achso, verdammt ^^.

Der Controller ist auch für größere Displays (132*35) wenn ich das
richtig sehe. Fängt das vom pollin nun auch ganz vorn an und bei 128 is
schluss?

von Lupin (Gast)


Lesenswert?

wie hast du das display denn angeschlossen? im bild sieht man zwar ein
paar kabel aber das ding hat ja eigentlich einen Folientecker für den
man ja eine Platine braucht :(

von Tobias S. (tobias)


Angehängte Dateien:

Lesenswert?

Hi,
man kann den Folienstecker auch direkt auf eine Platine loeten. Das
habe ich gestern mal gemacht und es funktioniert im Prinzip auch.
Leider habe ich aber die Folie wohl zu oft in der Naehe des Steckers
gebogen und jezt hat sie dort einen Wackelkontakt...
Das naechstemal werde ich vorsichtiger sein, wenn ich den
Kunststoffstreifen entferne, der dem Ende mehr Stabilitaet geben soll,
aber der Hitze beim Loeten nicht stand haellt.

Gruss Tobias

von Steven Kienast (Gast)


Lesenswert?

Ich hab den Folienstecker jetzt einfach abgezogen und werd da morgen nen
Flachbandkabel dranlöten :)

von Läubi (Gast)


Lesenswert?

Optimal wäre natürlich so ein Steckverbinder wie er auf der
Adapterplatine drauf ist, wie sit die eigentlich beschaltet?
Könnte man nicht die Adapterplatine sozusagen als Steckverbinder
nutzen?

von Läubi (Gast)


Lesenswert?

Ich seh gerade das das nen Bausatz ist.. also im Prinzip optimal um an
so einen Stecker zu kommen, die Platine kann sogar recht leicht als
Adapter umgebaut werden.

von Philipp Karbach (Gast)


Lesenswert?

beim durchlesen fand ich das interessant, als ich das bild gesehen hab
fand ich es toll ;). Und nachdem ich das video gesehen hab bin ich
recht begeistert! wirklich ne schöne sache geworden, ich bin vor allem
überrascht wie stabil das ganze mit dem wenigen code schon läuft! was
mich aber hauptsächlich interessiert ist die ansteuerung des displays
am mega8. ich hab das gleiche gekauft weil ich hier mal den code dazu
gefunden hab, allerdings benutzte derjenige die ganze platine von
pollin und ziemlich viele ports. ich hab das nie zum laufen gebracht.
deine ansteuerung sieht ziemlich einfach aus, nur 5 ports dran und es
geht. ich würd das jetzt sofort testen aber dieses blöde display hat
diesen folienstecker, wie zum teufel krieg ich da kabel oder sowas
dran? vielen dank :)

von Philipp Karbach (Gast)


Lesenswert?

achja noch ne frage, wenn ich das kompiliere ist die main.hex 20kb groß,
wie passt denn das in den mega8 rein?

von Tobias S. (tobias)


Lesenswert?

@Philipp
Dir ist wohl nicht aufgefallen, dass der komplette PORTB fuer D0-D7
verwendet wird und die restlichen 5 PINs nur zusaetzliche
Steuerleitungen sind.

Gruss Tobias

von Philipp Karbach (Gast)


Lesenswert?

oh, natürlich nicht... dann komm ich damit auch nicht so ganz weiter,
danke für den tipp ;). meine platine belegt nämlich leider die PB6/7.

von Bartholomäus S. (sam_vdp)


Lesenswert?

@Display anlöten:
> Ich hab den Folienstecker jetzt einfach abgezogen und werd da morgen
> nen Flachbandkabel dranlöten :)
Hab ich auch gemacht. War ein bisschen fummelig, weil mein
Flachbandkabel nen zu großes Rastermaß hatte, aber mit 0.8mm und nem
feinen Lötkolben sollte es eigentlich gut gehen.

> oh, natürlich nicht... dann komm ich damit auch nicht so ganz
> weiter, danke für den tipp ;). meine platine belegt nämlich leider
> die PB6/7.
Du kannst natürlich beliebige Portpins für die Steuerleitungen nehmen,
insbesondere wenn du keine Daten vom Display lesen willst, kommst du
auch mit zwei Steuerleitungen (A0 und E) und den acht Datenleitungen
aus. Wenn du für die Datenleitungen einen kompletten Port nimmst hat
das allerdings den Vorteil, dass du ein Byte ohne Overhead an das
Display schicken kannst. Andernfalls musst du das Datenbyte eben auf
die verschiedenen Ports aufteilen.

Allgemein ist die Ansteuerung vom Display wirklich simpel, beim
Download von Pollin (http://www.pollin.de/shop/downloads/D120292D.RAR)
sind Datenblätter vom Controller und dem Display sowie ein
Beispielprogramm in Delphi dabei.

> achja noch ne frage, wenn ich das kompiliere ist die main.hex 20kb
> groß, wie passt denn das in den mega8 rein?
Bei mir (avr-gcc 3.4.3, -Os [auf Größe optimieren]) sieht's so aus:

Program:    7484 bytes (91.4% Full)
(.text + .data + .bootloader)

Kann mir eigentlich nur vorstellen, dass es an der Optimierung liegt.

> Aber ich glaube man kann keinen code im externen speicher ausführen,
> dann müsstest du eine virtuelle maschine bauen - ein art Java
> interpreter wäre cool :)
Über die Idee hab' ich nochmal nachgedacht und eigentlich ist sie
nichtmal abwegig. NanoVM ist denke ich für diese Zwecke etwas zu
langsam und eigentlich auch überdimensioniert. Ich hätte an LUA
gedacht, aber die ist auch nicht kleiner.
Kennt jemand von euch eine einfache Scriptsprache mit C als Host, die
sich für einen uC anpassen ließe?

Beste Grüße,
Bartl

von MNR (Gast)


Lesenswert?

>achja noch ne frage, wenn ich das kompiliere ist die main.hex 20kb
>groß,
>wie passt denn das in den mega8 rein?


>Program:    7484 bytes (91.4% Full)
>(.text + .data + .bootloader)

>Kann mir eigentlich nur vorstellen, dass es an der Optimierung
>liegt.

Ihr redet über verschiedene Dinge. Die main.hex ist 20kb, *.hex ist
aber kein Binärfotmat.

BTW, schönes Projekt.

Gruß Matthias

von Sebastian (Gast)


Lesenswert?

Irgendjemand hat oben gesagt, wenn man das Programm jedesmal über einen
bootloader vom externen Flash in den MC lädt, kann man nur 10.000 mal
Spiel wechseln.
Ich bin jetzt grad zu faul rauszusuchen wer's gesagt hat. Aber meint
ihr nicht auch, dass bei 10.000 Spielewechseln der Stecker schon längst
aufgegeben hat? Ausserdem hatte ich irgendwie sowas von 100.000 mal
programmierbar im Kopf beim Flash. Kann sein dass ich mich irre, aber
wenn nicht, dann gibt ziemlich sicher erst der Stecker auf.

Oder du verlagerst gleich einen Teil der Intelligenz auf das Speil. Im
Gerät selbst wird nur noch das Display angesteuert, die Tasten
ausgewertet und und der Ton produziert. Jedes Spiel hat dann seinen
eigenen MC der das eigentliche Spiel laufen lässt und nur noch Bild und
Ton info an den anderen MC schickt und die Tastenbefehle von ihm
empfängt.

Ansonsten natürlich: Respekt vor so einer Leistung. Hast du das
Programm komplett von der Pike auf an einem Tag geschrieben, oder
standen teile (z.B. die Displayansteuerung) schon vorher?
Sebastian

von Bartholomäus S. (sam_vdp)


Lesenswert?

> Irgendjemand hat oben gesagt, wenn man das Programm jedesmal über
> einen bootloader vom externen Flash in den MC lädt, kann man nur
> 10.000 mal Spiel wechseln.
> Ich bin jetzt grad zu faul rauszusuchen wer's gesagt hat.
Das hab ich gesagt :)

> Ausserdem hatte ich irgendwie sowas von 100.000 mal programmierbar im
> Kopf beim Flash.
100000 mal ist beim EEPROM.
Aber ich denke eigentlich, das die Kontakte 10.000 mal stecken schon
aushalten sollten, außerdem könnte ein SD-Karte ja im Slot bleiben und
es würde nur das gewählte Spiel geladen.

> Oder du verlagerst gleich einen Teil der Intelligenz auf das Speil.
Das hab ich mir inzwischen auch gedacht. Ich hab mich mal ein wenig
umgesehen und ich denke die einfachste Möglichkeit wäre eine sog.
"stack machine" auf dem uC
(http://www.gamasutra.com/features/19971003/huebner_01.htm, muss man
sich leider kostenlos anmelden) und ein einfacher Compiler mit
FLEX/BISON auf der PC-Seite. Das sollte auch einigermaßen schnell sein,
da der uC direkt Opcodes bekommt, von denen nur sehr wenige benötigt
werden. Hat von euch schonmal jemand sowas gemacht, bzw. wie stark
unterschätze ich den Aufwand? :)

> Hast du das Programm komplett von der Pike auf an einem Tag
> geschrieben, oder standen teile (z.B. die Displayansteuerung) schon >
vorher?
Die Tastenentprellung war schon fertig (was man ihr auch ansieht, für
das Tetris ist sie eigentlich ziemlich unpassend) und die
Displayansteuerung war vom Abend davor, aber mit dem ganzen Material
vom Pollin hat das Anlöten vom Display länger gedauert als das
ansteuern.

Beste Grüße,
Bartl

von Benjamin S. (b_sieber)


Lesenswert?

ich sag nur eins: respekt!!!!!!!!

von Lupin (Gast)


Lesenswert?

hab jetzt auch das display... ich habe mal versucht zu lesen, dazu habe
ich das gleiche gemacht wie beim schreiben auf das display nur das ich
RW high gemacht habe und danach das PIN register eingelesen habe - ist
doch richtig oder?

Aber da kommt nix sinnvolles bei raus.

Dein code ist außerdem sehr gut, ich glaube du solltest aber die PGM
funktionen benutzen um vom flash zu lesen. Was passiert eigentlich wenn
man die Daten nicht mit PROGMEM definiert? Gehen die dann ins RAM (da
passt das ja gar nicht hin)?

von Bartholomäus S. (sam_vdp)


Lesenswert?

> hab jetzt auch das display... ich habe mal versucht zu lesen, dazu
> habe ich das gleiche gemacht wie beim schreiben auf das display nur
> das ich RW high gemacht habe und danach das PIN register eingelesen
> habe - ist doch richtig oder?
Lesen habe ich noch nicht ausprobiert, allerdings musst du vorher den
Port als Eingang schalten (DDRX) und das Display liefert, nachdem du
eine bestimmte Speicherstelle ausgewählt hast, erst beim zweiten
Lesebefehl sinnvolle Daten ("Dummyread", siehe Datenblatt vom SED).

> ich glaube du solltest aber die PGM funktionen benutzen um vom flash
> zu lesen.
Kann gut sein. Allerdings funktioniert meine jetzige Lösung gut und die
PGM Funktionen tun soweit ich weiß auch nichts groß anderes.

> Was passiert eigentlich wenn man die Daten nicht mit PROGMEM
> definiert? Gehen die dann ins RAM (da passt das ja gar nicht hin)?
Ja, genau. Wobei man sich den Demobildschirm natürlich sparen könnte,
aber bisschen flashig soll's auch sein ;)
Falls du deinen eigenen Titelschirm haben willst, kann ich dir das
Delphiprogramm zum Konvertieren mailen.

Beste Grüße,
Bartl

von Michael (Gast)


Lesenswert?

Hallo,

gratuliere zu diesem Code.
Kannst Du mir bitte das Programm zum konvertieren mailen?

info@verbrennerheli.de

Gruß Michael

von Bartholomäus S. (sam_vdp)


Lesenswert?

Ich hab' das Programm mal auf meine Webspace geladen:
http://paranoidsoftware.de/bmp2crle.zip
(Quelltext ist enthalten)

Das Programm ließt Windows-Bitmaps, die möglichst n*8 Pixel hoch sein
sollten. Ausgegeben wird eine .h-Datei, in der das Bild als char array
abgelegt ist, so dass es direkt an das Display geschickt werden kann.
Das erste Byte ist hierbei die Breite des Bilds, die der AVR-Code aber
bisher nicht benötigt, muss also noch entfernt werden.
Wahlweise kann die ausgegebene Datei noch Run-Length enkodiert werden
(kA wie das in deutsch heißt), das dekodieren ist aber auf dem AVR noch
nicht implementiert.

Beste Grüße,
Bartl

von Philipp Karbach (Gast)


Lesenswert?

hat einer von euch schonmal versucht eine putpixel funktion für dieses
display zu schreiben? ich versuche das gerade mit den einzelnen
pixelspalten gestaltet sich das aber etwas schwieriger..

von Bartholomäus S. (sam_vdp)


Lesenswert?

Hab ich bisher noch nicht gebraucht und ist auch meiner Meinung nach von
der Performance her nicht sinnvoll.
Aber im Prinzip musst du doch nur den entsprechenden Pixelblock laden
(siehe Zeug aus dem RAM lesen, Datenblatt), den Pixel verändern und den
Block wieder schreiben.
Das Problem dabei ist meiner Meinung nach der Overhead: Du musst dem
Display sagen, welchen Block du willst, dann einen Dummyread machen,
dann den richtigen Wert lesen und bearbeiten dem Display dann nochmal
den Block mitteilen (weil der Controller ja eine Spalte weiter rückt,
wenn du den Wert ließt) und dann den neuen Wert schreiben.
Falls du die Funktion unbedingt brauchst, würde ich einen größer µC
nehmen einen Backbuffer im RAM lassen.

Für was bräuchtest du die Funktion denn?

Beste Grüße,
Bartl

von Philipp Karbach (Gast)


Lesenswert?

jo das mit dem backbuffer hab ich mir auch gedacht, könnte man aber rein
theoretisch auch mit nem mega32 hinkriegen. Ich glaub ich probier das
mal, hab nur irgendwie angst dass es total lahm ist ;).

von Philipp Karbach (Gast)


Angehängte Dateien:

Lesenswert?

so hab das ganze jetzt mit einem backbuffer auf dem mega32 realisiert!
Klappt super, ich finds auch nicht lahm :). Im Anhang ist der code!

Ein beispiel könnte so aussehen:

int main()
{
lcd_init();
glcdinitscreen();

while(1) {
glcdclearscreen();
glcdprintf(0,0,"Das ist ein Test!");
int x=rand()%128;
int y=rand()%64;
glcdputpixel(x,y);
glcdrefresh();
}
return 0;
}

Es wird die Font aus dem anderen Beitrag über dieses Display in der
Codesammlung benötigt! Viel Spaß.

von Laeubi (Gast)


Lesenswert?

Wie groß ist eigentlich die (sichtbare" Größe des Displays?
Bei Pollin ist soweit ich gesehen hab ja nur die gesammtgröße
angegeben.
Weil ichwollte mir auch son Display holen udn ggf in nen Rahmen
einseztenaber deswegen wärs mal gut zu wissen wieviel "Rand" das teil
hat (nen Fertigen passenden Rahmen wirds ja warscheinlich nicht geben)

von Philipp Karbach (Gast)


Lesenswert?

moment ich messe mal eben (ungenau ;)): 53x28mm (BxH).

von Philipp Karbach (Gast)


Lesenswert?

achja und vorsicht beim löten des flachbandkabelsteckers wenn man sich
die platine holt, die übrigens SEHR nützlich ist. Das ding hat leider
SMD größe. Graue haare vorprogrammiert :(.

von Sebastian Heyn (Gast)


Lesenswert?

Ich habe mal gesehen dass jmd einen AVR in nem CPLD nachgebaut hat.
vielleicht könnte man die sources verwenden und so nen AVR mit externem
speicher "bauen"

von Bartholomäus S. (sam_vdp)


Lesenswert?

Wäre eventuell eine Option, aber einerseits müsste ich mich dann mit
CPLDs auseinander setzen, was finanziell und auch sonst ein
Riesenaufwand ist und außerdem wenn man schon eine Maschine emuliert,
kann man ja auch eine einfache Stack-Maschine auf dem AVR laufen
lassen.

Ich bin momentan ein bisschen mit Abi und dem zugehörigen Spiel
beschäftigt, aber in zwei Wochen ist alles vorbei, dann schau ich mal
weiter.

Beste Grüße,
Bartl

von Gernot Frisch (Gast)


Lesenswert?

Hi Bartholomäus,

ich hab ein paar Fragen zu dem Program/Display - bin totaller Newbie.
1.Bei Textausgabe:
  memcpy_P(&temp, &font[charx*5+x], 1);
  LCD_Write(1,temp);

  warum nicht einfach
  LCD_Write(1, font[charx*5+x]);

2. Du schreibst:
SIGNAL(SIG_OVERFLOW2)
und packst hier die Tastaturabfrage 'rein. Ich hab nirgends gefunden
was "SIG_OVERFLOW2" bedeutet. Ist evtl. nicht so schlimm, ich schau
halt wie ich das auf meinem AVR Butterfly dann machen muss - aber wo
kann ich über signal/interrupts lesen. Und was ist der Unterschied?

3. Gibt es key-bouncing noch, also wenn ich Taste drück', dass dann
eine Flut von 1-0-1-0-1-1-1-1-1 kommt, bis der Taster wirklich unten
ist? Und: reicht da ein "SIGNAL" Abstand dazu aus (Keys[i].delay) um
das zu kompensieren?

4.Das Display steuerst Du in x-richtung per Pixel an, in y-Richtung per
"zeile" also 1/8 mit je 8px Höhe. Seh' ich das Richtig?

5.Wenn ich einen Pixel setzen will, kann ich das Display modifizieren,
und dann einen Befehl schichen "jetzt den Speicher darstellen", oder
wird die Änderung sofort übernommen - sprich: brauche ich meinen
eigenen Display-Speicher zum "wursteln" und schick den dann komplett
geändert zum Display?

6. Wenn ich das byte (0x01) an das Display schicke, ist das dann der
obere, oder der untere Pixel der Zeile den ich setze?

7.Wie schnell wäre ein kompletter 1024byte transfer zum Display?

Ich bau' dann mal eine linien und per-pixel-grafik engine für das
Display. Poste ich dann hier, dass es alle haben können.

von Gernot F. (gernotfrisch)


Lesenswert?

ich poste mal als neuen Thread - hier schaut wohl keiner mehr ;)

von Gernot F. (gernotfrisch)


Lesenswert?

Wegen Spiel aus dem Speicher laden: Könnte man nicht einen Bootloader
mit fester Größe machen, der dann erstmal prüft ob der Flash schon mit
der MMC übereinstimmt, und wenn nicht dann eben diesen in den Flash
Speicher nach dem Bootloader reinpackt und ausführt?
Man müsste das Programm dann irgendwie so schreiben, dass der
Bootloader evtl immer mit drin sein muss... oder so.

von Bartholomäus S. (sam_vdp)


Lesenswert?

Wäre auch eine Option, aber ich finde eine kompakte virtuelle Maschine
(z.B. eine Stack Machine) momentan verlockender. Zumal eben der FAT
Code schon relativ groß ist, womit dann der Bootloader auch wieder sehr
groß werden würde und für das eigentliche Programm kaum noch Platz wäre.
Bei einer virtuellen Maschine wäre die Größe des ausgeführten Programms
eigentlich nur durch den Adressraum begrenzt, d.h. 64 kByte wären drin,
soviel kann sonst kein AVR.

Beste Grüße,
Bartl

von Lupin (Gast)


Lesenswert?

diese begrenzung muss aber nicht sein. Kann man natürlich so
programmieren, dass beliebig viel addressiert werden kann.

Hast das LPC2103 bzw LPC2124 board im shop gesehen, die sind jetzt sehr
günstig? Damit könntest du deiner virtuelle maschine etwas mehr leistung
verpassen

von Bartholomäus S. (sam_vdp)


Lesenswert?

Also "beliebig viel" halte ich für unmöglich :) Die Sache ist halt
die, dass eine 32-Bit Adressierung wahrscheinlich die Sache recht
langsam macht. Und 64 kByte ist immerhin noch acht mal soviel wie ein
Mega8, ich denke des sollte für die meisten Spiele schon reichen.
Insbesondere wenn FAT-Funktionen zur Verfügung stehen, sodass Daten
nicht in das Programm mit rein müssen.

Der LPC210x sieht wirklich sehr schick aus. Ist halt nicht gerade schön
zum Löten, aber den werde ich mir in jeden Fall bei Gelegenheit mal
genauer zu Gemüte führen. Allerdings wäre bei soviel Rechenpower schon
fast ein besseres Display eine schöne Sache...

Viele Grüße,
Bartl

von Lupin (Gast)


Lesenswert?

problem ist nur, dass deren serielles interface zu lahm ist um ein
besseres display schnell genug zu füttern. Bei meinem Tetris mit dem
S65 display hab ich bei minimalen rechenaufwand nur 17 FPS geschafft
(war der LPC2106). Dafür sind die atmel ARMe besser geeignet (finde ich
allgemein besser)

Momentan entwerfe ich ein board mit einem atmel ARM, hatte erst das
3310 display im sinn werde mich aber wohl um entscheiden auf das gute
alte S65 display ;)

von Bartholomäus S. (sam_vdp)


Lesenswert?

Was hat das S65 Display denn eigentlich für Daten? So groß dürfte die
Auflösung da ja auch nicht sein, oder? Und mir fallen halt auf einem
128x64 Pixel S/W Display nicht so viele Spielekonzepte ein, die soviel
Rechenleistung wirklich brauchen.

von Gernot F. (gernotfrisch)


Angehängte Dateien:

Lesenswert?

Bartl, kannst Du das mal anschauen?
Ich hab' mal ein Win32 Projekt gemacht, das man schnell in ein ATmega
programm umschreiben kann. Ich hab' leider noch keinen Prozessor für
mein Display. Könnest Du mal schauen, ob der Code grobe Fehler hat,
oder ob das so geht? Evtl. mal auf deinem Yodah probieren?
Such einfach nach #NEED, das ist wo man was ändern müsste.

von Bartholomäus S. (sam_vdp)


Lesenswert?

Im großen und ganzen siehts gut aus auf den ersten Blick.
Bei
> int avr_main(int argc, char* argv[])
> {
> char dir;
sollte "char dir;" aber eins eingerückt sein ;)

Die Textausgabefunktionen solltest du 1:1 aus meinem Code übernehmen
können. "In echt" kann ich's leider gerade nicht ausprobieren, weil
die untere Hälfte von meinem Display seit einiger Zeit nix mehr anzeigt
(Pollin halt...) und ich noch nicht dazu gekommen bin, das zu reparieren
oder ein neues Display ranzulöten.

Beste Grüße,
Bartl

von Gernot F. (gernotfrisch)


Lesenswert?

Danke. Dann warte ich bis ich mein Board zusammenbau und teste's da.

von Bartholomäus S. (sam_vdp)


Angehängte Dateien:

Lesenswert?

Falls es noch irgendwen interessiert:
Ich hab' noch eine neue Version gemacht, die einige Bugs behebt und
außerdem die Möglichkeit vorsieht, eine Highscore im eeprom zu
speichern und -ganz wie '70- drei Initialen zu hinterlassen.

Beste Grüße,
Bartl

von Gernot F. (gernotfrisch)


Lesenswert?

yo! Cool!

von Nico Sachs (Gast)


Lesenswert?

;-) cooles Gameprojekt. Ich hätte da schon das zweite Game zu dem noch
nicht vorhandenen GameAVR ;-) schauts euch mal an:


Download hinweise:
Werbung wegklicken, dann auf Download Button klicken.

http://www1.file-upload.net/download_10.06.06/n2ihqg.rar.html

von Gernot F. (gernotfrisch)


Lesenswert?

Snake - coole idee. Verbesserung:
Du hast ja 2 Bildschirme, also kann st Du immer die Schlange des
Gegners rastern(also Schachbrettartig füllen), damit man die Beiden
unterscheiden kann.

Das wär' auch interessant für das Frogger-Spiel. Man könnte machen,
dass man auf die andere Seite kommen muss und somit auch dem anderen im
Weg stehen kann....

von Peter Sieg (Gast)


Lesenswert?

Hallo. Das genannte Display ist mit der Bestellnr. bei Pollin nicht mehr 
verfügbar.. Es gibt aber mind. andere mit 128x64 und KS 107/8 
kompatiblem Kontroller: LCD-Modul TG12864B-03/05/13 - Bestellnr. 
120424/5/3

Ist dieses kompatibel? Kann ich es so direkt am ATmega8 für dieses 
Tetris verwenden?

Peter

von Bartholomäus S. (sam_vdp)


Lesenswert?

Ob die Beschaltung 100% gleich ist, kann ich nicht sagen. Allerdings 
sollte das Display, falls es sich einen kompatiblen Controller hat, mit 
minimalen Hard- und Softwareänderungen anbauen lassen. Ansonsten sollten 
sich die Grafikroutinen eigentlich für fast alle Grafikdisplays anpassen 
lassen. Das Ganze ist in jedem Fall was für Bastler, wer nur ein mobiles 
Tetris will, ist mit einem Gameboy sicher besser beraten :)

Beste Grüße,
Bartl

von Peter Sieg (Gast)


Lesenswert?

ok. Im Sourcecode steht leider kein Display/Controlertyp drin..
Ich habe weiter oben einen Pollin-Link gefunden, der auch noch 
funktioniert.
Dort ist von einem SED1565 Controler die Rede. Die aktuellen Pollin 
Display haben aber einen KS0107/8 kompatiblen Controler... passt wohl 
also nicht..

Danke trotzdem ersteinmal.. mach mich mal auf die Suche nach einem 
SED1565 Display..

Peter

von Bartholomäus S. (sam_vdp)


Lesenswert?

Wie gesagt, der ganze Quellcode ist abscheulich zusammengehackt und war 
auch eigentlich nur als Proof of Concept gedacht.
Die Ansteuerung von den Displays ist aber im Großen und Ganzen nicht 
sehr schwer, wenn du also Spaß am Basteln hast (wovon ich mal ausgehe, 
wenn du hier postest), nimm das erstbeste Display was du kriegen kannst 
(am besten mit eigener Konstrastspannungsversorgung, spart Arbeit) und 
schreibe die Grafikroutinen oder das ganze Spiel neu.

von Peter Sieg (Gast)


Lesenswert?

Hallo. Ach da hab ich schon viieell schlechtere Programme gesehen ;-)
Es scheint als wenn z.Zeit solche Display einen KS0107/8 oder 
kompatiblen
Kontroler einsetzen..

Ja ich weiß, das man das umsetzen kann.. mit der nötigen Zeit, 
Erfahrung, Ausdauer.. etc. mal sehen, evtl. was für die Winterzeit..

Z.Zeit baue ich ersteinmal Pacman mit TV-Ausgang nach...

Trotzdem. Großes Lob! Dieses Tetrisprojekt ist einfach super!

Gruß, Peter

von Bartholomäus S. (sam_vdp)


Lesenswert?

Im Vergleich zu Pacman mit TV-Ausgang ist das Tetris wirklich simpel. 
Aber freut mich, wenn es dir gefällt.

von gert (Gast)


Angehängte Dateien:

Lesenswert?

und noch ein tetris projekt

atmega128/siemens s65 display

tetris portiert von c# (nettrix, Beginning .NET Game Programming in C#, 
apress) nach c

gruss

von Lupin (Gast)


Lesenswert?

Ganz nett...

gert du machst aber nicht für jeden frame einen kompletten redraw oder? 
wohl eher nur die Tiles, die sich verändert haben - so hab ich das 
jedenfalls gemacht.

Ich denke das Problem beim S65 Display ist die Daten schnell genug rüber 
zu schaufeln...

von gert (Gast)


Lesenswert?

hi

bin auf 16mhz und den spi auf douple speed - geht recht flott
ja es wird nur der block immer neu gezeichnet - ausser es gibt volle 
zeilen, dann das ganze gamefield

der c# code ist aus 'Beginning .NET Game Programming in C# - nettrix' - 
downloadbar bei apress

danke

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mal ne Frage, weiß wer wo man (zu aktzeptable preisen) sowas wie ne 
Gameboxkartrige (+Connector) beziehen kann? Muß keien Orginal sein aber 
ich such schon ewig sowas in der Art, hat jemand ne Idee?

von TetrisNerd (Gast)


Lesenswert?

Ich hab mir das PinPong Spiel von Conrad geholt. Kostet 5Euronen und mit 
ner Schnittstelle und nem quarz drauf kann man tolle sachen mit machen. 
Hab dafür jetz auch erstma tetris gemacht :)

von Korhan (Gast)


Lesenswert?

Hallo ich bin neu hier im Forum und wollte mal Frage ob du ein 
Schaltplan rein posten kannst, bin noch anfänger im bereich elektronik 
ich such schon seid langem so ein Thread da ich noch am C++ lernen bin 
weiß ich auch nicht genau aus dem code wie ich das ganze aufbauen soll. 
Außerdem kann ich acuh ein anderes Display verwenden z.B. Pollin 
BestellNr. 120 245. Es ist echt ein faszinierendes Projekt, ich freue 
mich über alle Antworten.
Mfg
Korhan

von Sam .. (sam1994)


Lesenswert?

Nur zu Info: Schau mal wie alt der Thread ist.

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.