Hallo an alle :D bin relativ neu im Gebiet AVR... machen in der Arbeit gerade ein Projekt in dem wir in C ein Nimm Spiel programmieren müssen und das ganze über ein I²C LCD Display ausgeben. Über Taster werden dann die "Streichhölzer" genommen. Weiß nicht wie ich das ganze angehen soll und das soll bis 14 uhr fertig werden. Kann da jemand helfen?? Danke schon mal im vorraus :)
rofl... Viel Spass... http://www.mikrocontroller.net/articles/AVR Ich hoffe ihr könnnt schnell lesen und lernen...
hab eher gehofft dass da vielleicht schon mal jemand so etwas programmiert hat oder so :D
aboutblank schrieb: > bin relativ neu im Gebiet AVR... ... > Weiß nicht wie ich das ganze angehen soll und das soll bis 14 uhr fertig > werden. 14.00 Uhr im Februar? Könnte knapp werden. Peter
aboutblank schrieb: > Hallo an alle :D > > bin relativ neu im Gebiet AVR... > machen in der Arbeit gerade ein Projekt in dem wir in C ein Nimm Spiel > programmieren müssen und das ganze über ein I²C LCD Display ausgeben. > Über Taster werden dann die "Streichhölzer" genommen. > > Weiß nicht wie ich das ganze angehen soll Welche Teile davon kannst du alleine programmieren und bei welchen brauchst du Hilfe. Tasten einlesen? auf LCD ausgeben? die Nimm-Logik ausdenken die Nimm-Logik umsetzen > und das soll bis 14 uhr fertig > werden. und seit wann weißt du das? Weihnachten und zu viel zu tun gehabt?
ja heute 14 uhr :D habe die woche seit montag C kurs mit nem Atmel 8535 und sollen das programmieren nur hat da fast niemand ne ahnung wie wirs angehn sollen... darum hab ich auf hilfe in dem forum hier gehofft
aboutblank schrieb: > ja heute 14 uhr :D > habe die woche seit montag C kurs mit nem Atmel 8535 und sollen das > programmieren nur hat da fast niemand ne ahnung wie wirs angehn > sollen... mit den Teilen, die ihr alleine lösen könnt. So schwer ist das doch nicht! ihr werdet ja wohl soweit sein, den Inhalt einer int-Variablen am LCD ausgeben zu können. Dann sind da noch 3 Tasten. In irgendeiner Vorübung habt ihr sicherlich gelernt, wie man Tasten abfragt. In der Hauptschleife geht dann immer das gleiche Spielchen:
1 | Anzahl Hölzchen = 21 |
2 | |
3 | Schleife |
4 | wenn irgendeine Taste gedrückt |
5 | |
6 | Taste 1 gedrückt -> 1 von der Variable Anzahl Hölzchen abziehen |
7 | |
8 | Taste 2 gedrückt -> 2 von der Variablen Anzahl Hölzchen abziehen |
9 | |
10 | Taste 3 gedrückt -> 3 von der Variablen Anzahl Hölzchen abziehen |
11 | |
12 | Ist die Anzahl Hölzchen zu 0 geworden |
13 | -> ja Benutzer hat gewonnen |
14 | |
15 | berechnen wieviel der Rechner nehmen wird und abziehen |
16 | die neue Anzahl Hölzchen hinschreiben |
17 | hinschreiben wieviel der Rechner genommen hat |
18 | |
19 | Ist die Anzahl Hölzchen zu 0 geworden |
20 | -> ja der Rechner hat gewonnen |
Das einzig Schwierige (wenn Ausgabe und Tastenabfragen bekannt ist, wovon ich ausgehe, denn ansonsten ist das nie und nimmer zu schaffen) ist die Logik, wieviele Hölzchen der Rechner nehmen soll. Und das kann man googeln (oder ihn der Einfachheit halber immer 1 nehmen lassen. Er spielt dann zwar schwach, aber immerhin: er spielt. Und das ist immer noch besser als er spielt nicht). Der Rest ist doch einfach, wenn man Ausgabe und Tasteneinlesen schon kann. Noch ein paar if und ein wenig + und - rechnen und fürs erste: fertig. Wenn dann noch Zeit bleibt, kann man auch mal an die Feinheiten gehen, zb. dass nicht mehr als 1 Taste zur gleichen Zeit gedrückt werden darf, der Benutzer mitten drinn aufhören will, ein neues Spiel anfangen etc. Aber das hat Zeit. Erst soll das Programm prinzipiell laufen.
Moin, Bestell deinem Vorturner mal nen schönen Gruß; entweder das oder tretet euch reihum in den Allerwertesten fürs vollständige Pennen in der Woche Ihr habt (fachlich) drei Probleme: - i2c ansprechen - Taster einlesen - Logik des "Nimm-Spiels" implementieren. mit absteigendem Ärger-Faktor. Kurz skizziert: -Init von Variablen, Display und Rest vom System -Endlosschleife mit dem Hauptprogram. -- muss die Logik einen Zug machen oder wird auf Eingabe gewartet? -- ggf. Eingabe auswerten, Tutorial gibts hier, oder selbst Zug machen. -- Ergebnis bewerten (Sieg, Niederlage?) -- Ausgabe an Display => Funktionsaufruf. - Schleife Ende. - I2C Funktion der 8535 hat keine i2c Paripheriem, also müßt ihr die nötigen Signale per Hand erzeugen. Eigentlich für jedes mögliche Symbol eine Folge von 1 und 0 auf einem Pin und jeweils ein Taktsignal auf einem zweiten Pin. Sollte man euch aber eigentlich "vorgefertigt" geben, ansonsten gibts hier auch ein Tut, werded ihr aber kaum schaffen bis 1400... -- SJ
also bin schon mal weitergekommen problem die hölzer werden abgezogen wenn ic den taster drücke und wenn ich in "loslasse" daher ab ich ne while schleife so lang der taster gedrückt is und das eigentliche proramm wird erst gestartet wenn er losgelassen wird also aus der while schleife raus is. funktioniert aber nicht so...
http://www.mikrocontroller.net/articles/Entprellung#Softwareentprellung hab das hier gefunden aber weiß nicht wie ich den zustand im weiteren programmverlauf abfragen bzw anwenden kann...
Also wenn du aboutblank schrieb: > aber weiß nicht wie ich den zustand im weiteren > programmverlauf abfragen bzw anwenden kann... Also wenn du nicht mal weißt, wie Funktionen in C arbeiten, solltest du nächste Woche nochmal von Vorne anfangen... Zustand wird nur intern in der Funktion genutzt. Der Rückgabewert der Funktion zeigt dir, ob der Taster gedrückt wurde oder nicht.
BTW: Die Lösung hier find ich besser, funktioniert auch tadellos. Am Besten als ISR: [[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#.28Tasten-.29Entprellung]]
LordZiu schrieb:
> Die Lösung hier find ich besser, funktioniert auch tadellos.
Kann ich nicht glauben.
Die Routine wartet jedesmal 100ms, solange die Taste gedrückt ist.
Und nur, wenn man genau innerhalb dieser 100ms losläßt, wartet sie
nochmal 100ms und gibt 1 zurück.
Man muß also genau innerhalb der Routine loslassen!
D.h. das Main darf nichts weiter tun, als ständig diese Routine
aufzurufen.
Wenn das Main aber etwas größer ist und z.B. selber 100ms braucht, geht
also im Schnitt jeder 2. Tastendruck verloren. Das ist unbrauchbar.
Sie ist günstigstenfalls für absolute Winzigstprogramme brauchbar.
Peter
falsch sobald ich den taster jetzt loslasse wird das programm danach ausgeführt
aboutblank schrieb: > falsch Nein, richtig > sobald ich den taster jetzt loslasse wird das programm danach ausgeführt Du hast nur das Glück, dass in deinem Programm, während der Abfrage der Tasten nichts anderes passiert. Damit hängt das Programm praktisch ständig in den ersten beiden _delay_ms im debounce() rum. Die Wahrscheinlichkeit, dass du genau während dieser beiden _delay_ms die Taste loslässt, ist relativ hoch, weil ja sonst nichts passiert. Bei deinem Programm ist das gerade noch akzeptabel. Aber für ein professionelles Programm ist das nicht zu gebrauchen.
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.