mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik snake @ mega8 & led-matrix


Autor: fuxxx (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich bin relativ neu in der avr materie, hab aber jetzt schon das zweite 
funktionierende board mit einem mega8 aufgebaut, welches ein 8*8 led 
display per multiplex ansteuert.
nachdem ich die prozedur zum zeichnen zusammengeschustert hab, hab ich 
damit begonnen snake zu programmieren und bin jetzt auch sogut wie 
fertig damit, stehe aber vor einem kleinem problem, an dem ich aber 
nicht recht weiter weiß:
die "kirschen" (also die fressbaren objekte) werden komischerweise 
manchmal gar nicht, und manchmal erst nachdem sie gefressen wurden 
angezeigt.
ich versteh nicht recht woher das kommen kann, da die zeichenroutine 
tadellos läuft und der rest eig auch...

wäre schön wenn jmnd mit ein bisschen durchblick den code mal 
durchschauen kann...
wahrscheinlich ist es nur irgendein trivialer fehler, irgendein problem 
von bascom mit den variablen oder so...
(hatte schon einige probleme mit den arrays und das mit temp variablen 
gelöst)

falls noch an anderen stellen kleinere fehler oder 
verbesserungsvorschläge auftauchen immer her damit :)
und schonmal im vorraus vielen dank...

Autor: fuxxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso vlct zur erklärung:
multidata + multiclock sind die zwei ansclüsse für das schieberegister 
das die zeile ansteuert (schiebt quasi die akive spalte immer eins 
weiter)
reihendata + reihenclock sind die anschlüsse für das schieberegister für 
die zeile (füllt sich immer mit 8 bits)

vlct könnte ein nett mod die 2 posts zusammenschieben, als gast gibts 
scheinbar ja kein edit...

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fuxxx wrote:

> vlct könnte ein nett mod die 2 posts zusammenschieben, als gast gibts
> scheinbar ja kein edit...

Wie soll denn ein EDIT als Gast bitte funktionieren? Melde Dich doch 
einfach an.

Olli

Autor: fuxxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das sollte keine kritik sein...
ich dachte mir nur das vlct ein netter mod der übersicht wegen das mal 
eben zusammenschubst.
(bin selbst mod in einem nicht alzu kleinem forum ;) )

also hat jmnd ne idee oder ne frage zu dem code?
(ich hoffe mal das die kommentare im code helfen...)

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fuxxx wrote:
> das sollte keine kritik sein...
> (bin selbst mod in einem nicht alzu kleinem forum ;) )

Sollte keine Kritik sein. Ich kann mir nur nicht vorstellen, wie eine 
Edit-Funktion fuer nicht angemeldete Gaeste funktionieren soll.

Olli

Autor: Andre Wurl (fuxxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da hast du allerdings recht...
hab mich jetzt auch brav angemeldet und kann jetzt editieren :)

also hat jmnd eine ahnung warum meine kirschen verschwinden könnten?

Autor: Andre Wurl (fuxxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab heute nochmal mit einem freund, der zwar kein bascom aber visual 
basic kann den code kontrolliert.
und er hat den fehler gefunden:
bei position steht statt xp und yp (den übergebenen parametern) x und y 
(die globalen variablen)
beim zeichnen der schlange hab ich wohl zufällig vorher immer schön x 
und y gesetzt sodass es trotzdem geklappt hat...
(hatte diese stelle schonmal gesehen und eig korriegiert, muss wohl 
iwann die falsche version geöffnet haben -.-)

jetzt gehts an die optimierung und erweiterung...
noch hab ich ein kleines problem mit "geisterpixeln"...
scheinbar ist das auge schnell genug um die leds zu sehen, die an sind, 
wenn gerade die daten durch die schieberegister geschoben werden.
ein mega8 kann doch mit einem 16 mhz quarz arbeiten oder?
wenn das nicht hilft werd ich die led evtl per transistor immer zum 
zeitpunkt des neubeladens des reihenschieberegisters ausschalten.

ausserdem wird das ganze demnächst noch auf 16*16 pixel erweitert :)

Autor: Andre Wurl (fuxxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt taucht ein anderer fehler auf...
irgendwann (meist so nach 20 kirschen) wird scheibar gar keine neue mehr 
generiert.
erzeugt diese zeile so wie sie soll immer werte für x und y zwischen 1 
und 8?
Kirsche_x = Rnd(8)
Kirsche_x = Kirsche_x + 1
Kirsche_y = Rnd(8)
Kirsche_y = Kirsche_y + 1
oder hab ich mich da vertan?

(warum kann ich auf einmal die edit funktion nicht mehr verwenden? oO)

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andre Wurl wrote:

> erzeugt diese zeile so wie sie soll immer werte für x und y zwischen 1
> und 8?
Kirsche_x = Rnd(8)
 Kirsche_x = Kirsche_x + 1
 Kirsche_y = Rnd(8)
 Kirsche_y = Kirsche_y + 1

Ja. Und das funktioniert ja auch zumindest fuer die ersten 20, wie Du 
schreibst. Hat sich am Quallcode etwas ausser dem korrigierten Fehler 
veraendert? ich guck dann noch mal drauf.

> (warum kann ich auf einmal die edit funktion nicht mehr verwenden? oO)

Das geht nur eine gewisse Zeit nach Erstellen des Beitrages. Alte kannst 
Du nur noch loeschen :-)

Olli

Autor: Andre Wurl (fuxxx)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ein paar kleinere änderungen sind dazugekommen.
vorallem eine kleine korrektur bei ne_game und ein bisschen aufräumen 
von überflüssigen variablen.
der übersichtlichkeit lad ich die neue version hier nochmal hoch...

und ich dacht schon ich werd auf meine jungen jahre senil.
im einem augenblick war der edit button noch da, im nächsten nicht mehr 
:D

wäre nett wenn du nochmal durchgucken könntest :)

Autor: Andre Wurl (fuxxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so ich hab nochmal ein bisschen probegezockt...
der random scheint immer die gleichen 4 positionen zu liefern und das 
auch immer in der gleichen reihenfolge.
das problem das keine kirsche mehr erscheint kommt, wenn die schlange 
auf all diesen positionen liegt.
in dem moment scheint das display kurz zu stocken, sodass man einen ganz 
kurzen ruckler wahrnimmt.
ich würde daher sagen, dass diese zeilen hier immer wieder durchlaufen 
werden, bis sie irgendwann etwas falsches auswerfen
Do
Temp = 0
Kirsche_x = Rnd(8)
Kirsche_x = Kirsche_x + 1
Kirsche_y = Rnd(8)
Kirsche_y = Kirsche_y + 1
For I = 1 To Laenge
  X = Schlange_x(i)
  Y = Schlange_y(i)
  If X = Kirsche_x Then
    If Y = Kirsche_y Then
      Temp = 1
    End If
  End If
Next I
Loop Until Temp = 0

1. frage wäre wie man dem rnd beibringt, immer andere werte zu 
generieren statt immer wieder die 4 gleichen.
2. frage ist, warum das ganze trotzdem nicht einfach in dem loop immer 
weiter im kreis läuft...?
könnte es sein, dass eine isr routine da irgendwie zwischenfunkt?

wäre sehr erfreut wenn mir hier jmnd helfen könnte oder neue anregungen 
gibt...

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenn mich zwar mit Bascom garnicht aus, aber dass Rnd(8) immer die 
gleichen werte liefert ist schon mieß ;)

Du könntest Rnd(255)/32 Probieren, wenn Bascom das richtig macht dürfte 
das auch nicht resourcen fressender sein, da /32 durch rechts shiften in 
hardware erledigt werden kann.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Edit für Gäste wäre kein Problem, wenn man die IP überprüfen würde 
und den Editknopf nur für ca 10 min aktiv machen würde.....

Autor: Andre Wurl (fuxxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab die idee mit den größeren werten für rnd() mal ausprobiert:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 19200
Osccal = &HAE

$sim

Dim Kirsche_x As Word
Dim Kirsche_y As Word

Do
Kirsche_x = Rnd(65536)
Kirsche_x = Kirsche_x Mod 8
Kirsche_x = Kirsche_x + 1

Kirsche_y = Rnd(65536)
Kirsche_y = Kirsche_y Mod 8
Kirsche_y = Kirsche_y + 1
Loop

das ist mein komplettes programm.
wenn ichs mit bascom simuliere kommt wieder nach 4 ausführungen genau 
das gleiche.
kann es sein das der rnd befehl einen "init" braucht, oder dass ihn iwas 
stört?
in delphi brauch der random befehl zb ein randomize um sich zu 
initialisieren...

<offtopic>
bin ich hier zufällig in einem nicht-bascom forum gelandet?
oder hat von den bascom leuten hier keinehilfe für mich? ^^

@peter:
ich versteh schon das es einen solchen edit knopf nicht gibt, wollte 
mich auch keineswegs darüber beschweren...
ich will auch keineswegs eine disskusion darüber führen ;)
</offtopic>

edit:
ich hab gerade die lösung für das problem gefunden:
man kann indem man die varaible "___rseed" neu setzt, einen neuen 
anfangswert für den random bestimmen.
also setz ich einfach ___rseed immer auf timer0 und ferig :)
scheint auch zu klappen :)

anbei der neue code, falls jmnd noch verbesserungsvorschläge hat immer 
her damit

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.