mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Atmel 8535 Nimm Spiel


Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :)

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rofl... Viel Spass...

http://www.mikrocontroller.net/articles/AVR

Ich hoffe ihr könnnt schnell lesen und lernen...

Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab eher gehofft dass da vielleicht schon mal jemand so etwas 
programmiert hat oder so :D

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon ganz schön frech!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
  Anzahl Hölzchen = 21

  Schleife
   wenn irgendeine Taste gedrückt

     Taste 1 gedrückt  -> 1 von der Variable Anzahl Hölzchen abziehen

     Taste 2 gedrückt  -> 2 von der Variablen Anzahl Hölzchen abziehen

     Taste 3 gedrückt  -> 3 von der Variablen Anzahl Hölzchen abziehen

     Ist die Anzahl Hölzchen zu 0 geworden
                 -> ja Benutzer hat gewonnen

     berechnen wieviel der Rechner nehmen wird und abziehen
     die neue Anzahl Hölzchen hinschreiben
     hinschreiben wieviel der Rechner genommen hat

     Ist die Anzahl Hölzchen zu 0 geworden
                 -> 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.

Autor: Sven Johannes (svenj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Christian Erker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: Entprellung

Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/Entprellun...

hab das hier gefunden aber weiß nicht wie ich den zustand im weiteren 
programmverlauf abfragen bzw anwenden kann...

Autor: LordZiu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: LordZiu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW:

Die Lösung hier find ich besser, funktioniert auch tadellos. Am Besten 
als ISR:

[[http://www.mikrocontroller.net/articles/AVR-GCC-Tu...]]

Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke LordZiu hab das jetzt so eingebaut und geht soweit :D

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: aboutblank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
falsch
sobald ich den taster jetzt loslasse wird das programm danach ausgeführt

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.