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


von fuxxx (Gast)


Angehängte Dateien:

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...

von fuxxx (Gast)


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...

von Olli R. (omr) Benutzerseite


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

von fuxxx (Gast)


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...)

von Olli R. (omr) Benutzerseite


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

von Andre W. (fuxxx)


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?

von Andre W. (fuxxx)


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 :)

von Andre W. (fuxxx)


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?
1
Kirsche_x = Rnd(8)
2
Kirsche_x = Kirsche_x + 1
3
Kirsche_y = Rnd(8)
4
Kirsche_y = Kirsche_y + 1
oder hab ich mich da vertan?

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

von Olli R. (omr) Benutzerseite


Lesenswert?

Andre Wurl wrote:

> erzeugt diese zeile so wie sie soll immer werte für x und y zwischen 1
> und 8?
1
Kirsche_x = Rnd(8)
2
 Kirsche_x = Kirsche_x + 1
3
 Kirsche_y = Rnd(8)
4
 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

von Andre W. (fuxxx)


Angehängte Dateien:

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 :)

von Andre W. (fuxxx)


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
1
Do
2
Temp = 0
3
Kirsche_x = Rnd(8)
4
Kirsche_x = Kirsche_x + 1
5
Kirsche_y = Rnd(8)
6
Kirsche_y = Kirsche_y + 1
7
For I = 1 To Laenge
8
  X = Schlange_x(i)
9
  Y = Schlange_y(i)
10
  If X = Kirsche_x Then
11
    If Y = Kirsche_y Then
12
      Temp = 1
13
    End If
14
  End If
15
Next I
16
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...

von Hauke R. (lafkaschar) Benutzerseite


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.

von Peter (Gast)


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.....

von Andre W. (fuxxx)


Lesenswert?

ich hab die idee mit den größeren werten für rnd() mal ausprobiert:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
$baud = 19200
4
Osccal = &HAE
5
6
$sim
7
8
Dim Kirsche_x As Word
9
Dim Kirsche_y As Word
10
11
Do
12
Kirsche_x = Rnd(65536)
13
Kirsche_x = Kirsche_x Mod 8
14
Kirsche_x = Kirsche_x + 1
15
16
Kirsche_y = Rnd(65536)
17
Kirsche_y = Kirsche_y Mod 8
18
Kirsche_y = Kirsche_y + 1
19
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

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.