Guten Abend liebe µC-Gemeinde, ich würde gerne mein erste Projekt vorstellen. Dabei handelt es sich um eine mögliche Umsetzung des klassischen Handyspiels Snake aus den neunziger Jahren. Zunächst zu meine Person, ich bin 21 Jahre alt, studiere Mathematik in Bonn und habe das 4. Semester abgeschlossen. Da nun Semesterferien sind, hat man als Student viel Zeit übrig, wenn man nicht unbedingt arbeiten muss, außerdem kann man ja nicht den ganzen Tag Sport machen. Darum habe ich mich vor 4 Wochen das erste mal an den Rechner gesetzt, die ersten Bauteile bestellt und fing an etwas zu auf Steckbrettern zu bauen. Da ich mich bereits außerhalb mit der x86-Architekture auseinander gesetzt hatte, dazu zählen auch einige erste Gehversuche in der OS-Entwicklung, gestaltete sich der Einstieg in den Umgang mit einem ATMega8 nicht allzu schwer. Jedoch habe ich dafür um so weniger Ahnung von elektrischen Schaltungen und versuchte mich mit meinem 12. Klasse Physikwissen irgendwie über Wasser zu halten. Letztendlich stehen aber in vielen Datenblättern passende Beschaltungen und aufmerksames Lesen im Wiki half auch. (Informationen teilweise versteckt, bzw. für mich als Anfänger wirkte das Wiki sehr undurchsichtig und komplex, was aber eher an einem fachlichen Defizit meinerseits lag, als an der Qualität der Texte) Jetzt aber zum Projekt. Ein paar Bilder: http://files.x-scripter.com/~lars/snake/IMG_20140822_014534_367.jpg http://files.x-scripter.com/~lars/snake/IMG_20140822_014634_554.jpg http://files.x-scripter.com/~lars/snake/IMG_20140822_014643_645.jpg Wo fange ich bloß an, vielleicht mit der Bauteilliste: ATMega8-L als µC (ich hab einen „normalen“ ATMega8 verwendet) DogM128-W als LCD mit 128*64 Auflösung und SPI-Schnittstelle http://www.lcd-module.de/pdf/grafik/dogm128.pdf 3,3V Spannungswandler (normaler Low-Drop-Wandler) 4 Taster Keramikkondensatoren: 10µF, 100nF, 47nF, 220nF, 9 mal 1µF Widerstände: 6 mal 10kΩ 2*3 Buchse für ISP (optional) Schaltplan ist angehängt oder kann hier aufgerufen werden. http://files.x-scripter.com/~lars/snake/schaltplan.png Ich habe bereits etwas weiter geplant und wollte statt der Taster auf einen 4-Wege SMD Joystick umsteigen. Dafür habe ich mich etwas mit Platinendesign beschäftigt, Ergebnisse findet ihr hier: http://files.x-scripter.com/~lars/snake/platine.png http://files.x-scripter.com/~lars/snake/platine_top.png http://files.x-scripter.com/~lars/snake/platine_btm.png Gesamt ohne Massenflächen, Vorderseite und Rückseite. (Bitte auch bewerten) Als Spannungsquelle habe ich für meinen Aufbau auf dem Steckbrett immer eine 9V Block vergewaltigt, zwar völlig überdimensioniert, aber am Anfang wollte ich mir nicht auch darüber noch Gedanken machen müssen und der LD3V3 scheint einiger maßen damit zurecht zu kommen. Der LD3V3 und das DogM sind beschaltet wie es in den jeweiligen Datenblättern steht. Außerdem möge man mich dafür schlagen, dass ich die interne Clock des ATMega8 benutzt. Das Spiel ist für einen Takt von 1MHz ausgelegt, mehr macht keinen Sinn. (sonst delay erhöhen) Soweit so gut, die Software war eigentlich die größte Arbeit, würde ich auf 40h schätzen, wenn man von Tests mit dem LCD absieht, Recherchezeit und Fehlerbehebung dazu zählt. Quellcode und Daten im Anhang oder hier: http://files.x-scripter.com/~lars/upload/snake.rar Hier kurz etwas zu Steuerung: (Für Buttonnummern siehe Schaltplan) 1. Mit dem Reset sollte das Titelbild auf dem LCD erscheinen. Drücke Button 2 um das Spiel zu beginnen. 2. Im Spiel siehst du oben rechts einen aktuellen Punktestand. Mit Button 1 steuerst du in Kriechrichtung nach rechts, mit Button 3 nach links. Ziel ist es die zufällig erscheinenden Futterbrocken einzusammeln. Dabei darf man nicht über den Rand der Spielfelds hinaus oder sich selbst beißen. 3. Sollte dies doch passieren (wird irgendwann der Fall sein) bleibt das Spiel stehen. 4. Mit Button 2 kommst du nun zum Highscore-Bildschirm. Hier wird dein Punktestand und der aktuelle Highscore angezeigt. Falls du einen neuen Highscore aufgestellt hast, so erscheint „NEW!“ und dein Punktestand wird im EEPROM gespeichert. 5. Mit dem RESET-Button kannst du ein neues Spiel beginnen. Wichtig zu wissen ist vielleicht, dass im EEPROM sowohl der Highscore als auch der nächste Seed für den Pseudozufallsgenerator gespeichert wird, sodass jedes Spiel fast einzigartig ist. (Periode von 16-Bit) Das Spielfeld wird im SRAM gespeichert und die Bilderzeugung ist on-the-fly, es gibt also keinen Zwischenspeicher auf dem µC. Da bei der Übertragung immer je ein Pixel für 8 Zeilen übertragen wird, müssen diese, da intern eine "Page" nochmal in zwei Zellen geteilt ist, erst zusammen gesetzt und schließlich gemeins übertragen werden. Der PRNG ist eine Kombination eines 16-bit LCG mit ausgedachten Werten (Satz von Knuth) und xorshift in 32-bit. Kombination erfolgt über Addition der Werte mit Überlauf. Zufallszahlen in einem Bereich, siehe random.nextBetween, werden über einen Modulo gelöst um eine annähernde Gleichverteilung zu erreichen. PRNG besteht zwar keine umfangreichen stochastischen Tests aber für die Anwendung vollkommen ausreichend. int2string arbeitet auch mit modulo, siehe divMod16_8. Das war's soweit von mir, würde mich sehr über Rückmeldung freuen. Ich bin totaler Anfänger und für jeden Tipp oder Hinweis dankbar. Falls die Schaltung totaler Mist ist, könnt ihr das auch gerne sagen. Quellcode dürft ihr natürlich auch zerpflücken. Soweit ich weiß, sind die wichtigsten Sachen kommentiert. Gute Nacht! PS: Bei Fragen zum Code bin ich gerne bereit einzelne Stellen zu erklären.
:
Bearbeitet durch User
Hallo, ich kann nur grad was zu PCB-Layout sagen. Zunächst würde ich die Position des µC näher an die Spannungsversorgung packen. Die Stützkapazität ist etwas ungünstig plaziert, besser ganz nah an VCC positionieren, die andere Seite dann an der Massefläche. Bezeichnung Top/Bot fehlt auf dem PCB, woher weist du welche Seite welche ist...??? Warum hast du 2 Masseflächen? Auf GND sollte die reichen, die Signalleitungen dann darüber führen, möglichst unterbreichungsfrei darunter die Plane ausführen. Ist gut für HF... Die Stege der Massefläche definitiv noch entfernen, die wirken wie Antennen, das beeinträchtigt die Schaltung eventuell einwenig.
Hi Lars, sieht recht vielversprechend aus - die süßeste Schlange von allen ist die dürre rote gleich rechts neben dem Display ;-) http://files.x-scripter.com/~lars/IMG_20140822_014634_554.jpg Zur Sache kann ich jetzt in der Früh nicht viel sagen, weil ich das alles erst in Ruhe durchlesen müsste. Apropos Bilder: ich würde Dir empfehlen, die Bilder NICHT extern bei einem Filehoster einzulagern, weil der natürlich wie immer übermorgen pleite und dann der Thread kaum noch nachvollziehbar ist, weil ja alle Bilder und Schaltpläne etc. futsch sind. Häng die Bilder stattdessen bitte lieber hier mit rein, dann bleibt die Sache auch in Zukunft nachvollziehbar. Wenn Du dabei auch noch die Bildformate beachtest, dann bleiben die Ladezeiten und der Speicherplatzbedarf angenehm - bei jpgs ist die Convenience-Grenze hier im Forum bei etwa 1 MB, es sei denn, aus Gründen der Darstellung wäre einfach mal mehr nötig. (Ich schreibe das nur, um Dich vor etwaigem Gegrummel des einen oder anderen Misanthropen zu bewahren ;-) Das Projekt ist IMHO richtig nett :-)
Schlangenmensch schrieb: > Apropos Bilder: > ich würde Dir empfehlen, die Bilder NICHT extern bei einem Filehoster > einzulagern, weil der natürlich wie immer übermorgen pleite und dann der > Thread kaum noch nachvollziehbar ist, weil ja alle Bilder und > Schaltpläne etc. futsch sind. Das ist kein Problem, die Bilder liegen auf meinem privaten Server und sind so lange sicher, wie ich nicht pleite bin. xD Jimbo36 schrieb: > Hallo, > > ich kann nur grad was zu PCB-Layout sagen. Zunächst würde ich die > Position des µC näher an die Spannungsversorgung packen. Die > Stützkapazität ist etwas ungünstig plaziert, besser ganz nah an VCC > positionieren, die andere Seite dann an der Massefläche. µC näher ran, alles klar. Mit Stützkapazität meinst du jetzt C1 am Spannungswandler oder C13 am VCC vom µC. Jimbo36 schrieb: > Bezeichnung Top/Bot fehlt auf dem PCB, woher weist du welche Seite > welche ist...??? Momentan ist die Platine noch in EAGLE drin. Die Farben habe ich einfach drin, Blau - Bottom, rot - top. Sicher fehlen die Bezeichnungen später beim ausdrucken, aber davon bin ich noch weit entfernt. Jimbo36 schrieb: > Warum hast du 2 Masseflächen? Auf GND sollte die reichen, die > Signalleitungen dann darüber führen, möglichst unterbreichungsfrei > darunter die Plane ausführen. Ist gut für HF... Die Idee mit den beidseitigen Masseflächen habe ich aus diesem Videotutorial für EAGLE: https://www.youtube.com/watch?v=YoVen9os4Sk (wohl wirlich nur ein EAGLE-Tutorial) Wenn ich deine Antwort richtig verstehe, reicht eine Massefläche aus? Auf der anderen Seite dann per Leiterbahnen mit dieser Massefläche verbinden? Am liebsten währe mir eh, dass sich alles auf einer Seite abspielen würde, aber ich glaube der Graph ist nicht planar. :/ Jimbo36 schrieb: > Die Stege der Massefläche definitiv noch entfernen, die wirken wie > Antennen, das beeinträchtigt die Schaltung eventuell einwenig. Erahnter Kritikpunkt, wird auf jeden Fall korrigiert.
Hallo zusammen, ich habe nochmal versucht die oben genannte Kritik an meinem Platinenlayout umzusetzen. Diesmal mit nur einer Massefläche und den µC nähre an die Spannungsquelle herran. Ergebnis ist angehängt oder hier: http://files.x-scripter.com/~lars/snake/platine_2.png Höffentlich interessieren sich noch ein paar mehr Leute für das Projekt, bzw. könnten mir Tipps zum Quellcode geben, wurde ja schon 8 mal kommentarlos runter geladen :( Na dann noch einen guten Start in die Woche.
Hi, ich hätte noch ein paar Verbessungsvorschläge/Kritikpunkte zur Platine. 1) Warum ist die AVR ISP-Buchse so weit wie es nur geht vom AVR weg?? Setze sie unten in die linke Ecke der Platine, nahe an den Atmega. Die Leitungen des AVR ISP sollten nie länger als ca. 10cm vom Atmega entfernt sein, sonst fängst du dir Störungen ein! 2) Mache auf alle Fälle noch eine Diode in Serie zur Versorgungsleitung am Eingang nach Buchse J1 als Verpolungsschutz rein. Der nächste, der die Schaltung nachbaut nimmt im schlimmsten Fall ein Steckernetzteil mit anderer Polung und schon geht die gesamte Schaltung in Rauch auf... 3) Alle Leiterbahnen (ausgenommen die von der Versorgungsspannung) können noch deutlich breiter sein...die sehen mir sehr dünn aus...
Stimme meinem Vorredner zu. Eindeutig zu lange Leiterbahnen. Bauteile kann man besser platzieren. Eine einseitig bestückte Platine ist hier auch möglich.
... die ISP-Buchse hätte ich so wie hier: http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Pinbelegung beschaltet.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.