Hallo, Also der Tim und Ich wir haben ein Problem, und zwar haben wir ein Technisches Projekt in der Schule, wir müssen Vier gewinnt auf einem Atmel At89S8252 programmieren, ganz ohne KI, an dem Controller sind 4 Ports. 3 ports werden zum anschluss der mehrfarbien 6x8 Led matrix verwendet und 1 port für taster, jetz soll man auf diesem taster abwechselnd spieler eins und spieler zwei spielen lassen, es scheint so als wäre es nicht sehr kompliziert so ein programm zu schreiben, leider haben wir jedoch nicht sehr viel ahnung was Assembler anbelangt. Nun würden wir euch bitten uns wenigstens eine Starthilfe zu geben, vll ein groben pap aus dem man weiteres schließen kann oder sonst irgendwie einen plan wie wir das anstellen sollen. Wir können uns leider nicht vorstellen wie das funktionieren soll Vielen Dank im voraus, der Tim und der Robert Edit: C hilft uns leider nicht weiter weil wir dieses noch weniger verstehen.
Gast
#1764922
> ...ganz ohne KI... Was verstehst du unter "ohne KI"? Der Controller IST eine KI, gefüttert mit eurer Software, in der ja die Intelligenz steckt! Wenn ihr das ohne KI machen müsstet... früher nannte man das TTL-Grab... > Nun würden wir euch bitten uns wenigstens eine Starthilfe zu geben, vll ein > groben pap aus dem man weiteres schließen kann oder sonst irgendwie > einen plan wie wir das anstellen sollen. Den PAP könnt ihr selber machen, ist einfach: Stellt euch einfach das reale Spiel mal auf n Tisch und dann notiert ihr die einzelnen Schritte, die ihr macht, auf Papier. Dann münzt ihr das auf eure Hardware um. - Chip in den Slot = Taste des entsprechenden Slots wird gedrückt - Chip fällt nach unten = die unterste, ausgeschaltete LED wird aktiviert - Prüfen, ob vier gleichfarbige Chips horizontal, vertikal oder diagonal in einer Reihe liegen Damit habt ihr die Grundlage. Und das wird Schritt für Schritt ausgebaut. Ralf
Gast
#1764925
PS: Und wenn ihr einen brauchbaren PAP habt, könnt ihr ans Coden gehen, egal ob ASM oder C. Vorher wischi-waschi nebenher zu coden, wird euch nicht helfen. Ralf
R. W. schrieb: > einen plan wie wir das anstellen sollen. Wir können uns leider nicht > vorstellen wie das funktionieren soll Denk als allererstes nicht "Huch, ich soll 4 gewinnt programmieren, wie mach ich das nur" Zerlege das Projekt in Einzelteile, die bearbeitet werden müssen. Fang mit den Basisdingen an. Basisdinge sind oft die einfachen Sachen aber noch viel öfter sind das: sich eine optische Ausgabemöglichkeitschaffen (bei euch die Matrix). Die ist insbesondere deswegen hilfreich, weil sie es euch ermöglicht, dass sich das Programm bemerkbar machen kann. zb in dem es eine LED links/oben im Eck einschaltet und ihr dann wisst "Aha, das Programm hat einen Tastendruck erkannt". Die LED daneben mag während der Entwicklung bedeuten: "Noch keine 4 nebeneinander liegenden Steine gefunden" oder "4 Steine gleicher Farbe übereinander" oder was ihr dann auch immer für Informationen benötigt. Da sind zunächst * wie wird die Matrix angesteuert? wie kannst du eine einzelne LED in der Matrix gezielt ein/aus schalten * wie werden Taster angefragt? wenn ihr die beiden Einzelkonzepte habt: Die beiden Konzepte zunächst ganz einfach miteinander kombinieren. Bei einem Tastendruck soll eine ganz bestimmte LED aufleuchten. Nicht mehr. Wenn ihr das Gefühl habt, das ihr diese Teile im Griff habt, dann könnt ihr schön langsam in Richtung Spiel gehen. Jetzt soll nicht mehr eine beliebige Led aufleuchten, sondern ihr wollt mit 2 Tastern eine leuchtende LED in der obersten LED-Reihe von links nach rechts bewegen und wieder zurück. Bei jedem Tastendruck wechselt die leuchtende LED 1 Spalte nach links bzw. bei der anderen Taste nach rechts. Rate mal was das wird: Genau. Irgendwie muss der Spieler ja auswählen, in welche Spalte er eine Spielmarke einwerfen will. Dieses links/rechts Tasten Auswerten ist die Vorstufe dazu. Wenn das klappt, kann man eine 3te Taste dazu nehmen. Mit den links / rechts Tasten wählt man die Spalte aus, mit der 3.ten Taste soll die 'Spielmarke' dann 'nach unten fallen'. Einfach nur nach unten fallen. Ist man soweit, dann wird es Zeit darüber nachzudenken, wie man die fallende Spielmarke liegen lassen kann, bzw. die nächste Marke sich dann darauf stapelt. Dazu wird man sich den Zustand des Spielfelds in irgendeiner Form im Speicher halten müssen. Hat man sich dann für eine Form entschieden, baut man das bisherige so um, dass es auf diese Speicherform aufsetzt. Die Anzeigeroutinen holen sich den Leuchtstatus aus diesem Speicher. Eine Led wird dann eingeschaltet in dem man nicht mehr direkt die Matrix ansteuert, sondern in dem man in diesem Speicher die entsprechenden Einträge macht. Die Tastenbehandlungen manipulieren diesen Speicher etc. etc. Man kann aber auch alles über den Haufen werfen und festlegen, dass es für jede Spalte eine eigene Taste gibt. Der Möglichkeiten sind da Tür und Tor geöffnet und es gibt viele davon. Wenn ihr soweit seid, die Matrix anzusteuern und die Tasten auszuwerten, werdet ihr euch für eine Möglichkeit entscheiden. (Hinweis: Für jede Spalte eine eigene Taste ist einfacher, da dann das ganze links/rechts wegfällt, auch wenn es als Übung nichts schadet, das hinzukriegen) Der Trick liegt nicht darin, bei der Vorstellung des kompletten Spiels in Panik zu verfallen, sondern sich selbst Zwischenziele zu setzen, die einen in die richtige Richtung bringen. Das kann auch sein, dass man eines dieser Zwischenziele später auch wieder aufgibt und es im fertigen Spiel nicht mehr auftaucht. Trotzdem ist dieses Zwischenziel hilfreich, weil es einen Anlaufpunkt bietet auf den man einfach hinarbeiten kann und der einem Wissen und Verständnis für spätere Projektstadien gibt. Wenn ihr das Gefühl habt, die niedrigen Hardwareebenen soweit im Griff zu haben, wie man also mit den Tasten umgeht, wie man die Matrix ansteuert, wie das Zusammenspiel von Tasten und Matrix gestaltet werden kann, dann setzt man sich hin und spielt erst mal ein paar Runden mit dem realen Spiel. Das Augenmerk liegt dabei nicht darauf zu gewinnen, sondern auf: was habe ich (bzw. mein Gegner) eigentlich gemacht. Welche Handlungsabläufe liegen da zu Grunde? Wie verhalten sich die Spielmarken in der Realität? Wie kann ich das mit Variablen und Schleifen und was weiß ich noch was abbilden?
Gast
#1764933
Versucht doch erstmal das Display anzusteuern, also eine funktion zu schreiben, die ein 6*8 int-array nimmt und die bildpunkte in den Passenden Farben setzt. Dann braucht ihr einen Zustandsautomaten (siehe Wikipedia), Zustände wären z.B. spieler 1 ist dran, spieler 2 ist dran, spieler 1 hat gewonnen, Spieler 2 hat gewonnen.
Gast
#1764934
Und falls ihr es noch nicht kennt, dann lest euch hier mal ein: http://www.mikrocontroller.net/articles/AVR-Tutorial Dannach solltet ihr zumindest wissen, wie man in Assembler die Ports ansteuert und abfragt. Vielleicht hilft das ja die Ratlosigkeit zu beseitigen :)
Gast
#1764936
R. W. schrieb: > Nun > würden wir euch bitten uns wenigstens eine Starthilfe zu geben, Wie geht man an so etwas ran? Mit Überlegung. Welche Problemstellungen sollt ihr lösen? Ihr braucht ein Programm, das vier gewinnt spielen kann. Da hilft Tante google weiter, Lösungsstrategien und Programme mit Sourcecode gibt es dafür garantiert im Netz. Dann müsst ihr eine grafische Darstellung auf den LED's programmieren. Dabei hilft das AVR-Tutorial hier aus dem Forum. Und schliesslich noch eine Bedienung über Tasten. Auch da hilft das Tutorial. Das war es auch schon. Oliver
Gast
#1764942
Oliver schrieb: > Ihr braucht ein Programm, das vier gewinnt spielen kann. Da hilft Tante > google weiter, Lösungsstrategien und Programme mit Sourcecode gibt es > dafür garantiert im Netz. Na klar, heutzutage braucht sich ja kein Schüler mehr Gedanken machen, lieber nach fertigem Code suchen...
mit ohne KI meinen wir das man ja nur 2 Menschliche spieler hat und kein
Computergegner,
Ja aber wo speichern wir das ganze?
sollen wir die Leds mit x und y machen also z.b. x1 bit p1.0
y1 bit p2.0
und vor allem wie genau soll die gewinnabfrage ablaufen ?
wir verstehen einfach gar nichts
wir bekommen grad noch ne zeitschleife und villeicht die led matrix zu
leuchen mehr können wir leider nicht.
wir haben shcon das ganze internet durchstöbert und kein code oder ähnliches gefunden leider
R. W. schrieb: > Ja aber wo speichern wir das ganze? Denk dir was aus. Dein µC hat ja Speicher mit. > sollen wir die Leds mit x und y machen also z.b. x1 bit p1.0 > y1 bit p2.0 > und vor allem wie genau soll die gewinnabfrage ablaufen ? Du denkst jetzt schon viel zu kompliziert und vor allen Dingen über Dinge nach, die jetzt noch völlig irrelevant sind. > wir bekommen grad noch ne zeitschleife und villeicht die led matrix zu > leuchen mehr können wir leider nicht. Dann habt ihr a) schlechte Karten b) noch einen weiten Weg vor euch. Aber jeder Schritt bringt euch dem Ziel näher Beitrag "Re: Vier Gewinnt auf Mikrocontroller ohne KI?"
R. W. schrieb: > wir haben shcon das ganze internet durchstöbert und kein code oder > ähnliches gefunden leider Den wirst du auch nicht finden. Wenn ihr bei so einer Aufgabe, die noch dazu eng an die Hardware gekoppelt ist, damit anfängt Stunden nach einer fertigen Lösung im Internet zu suchen, so habt ihr eure Zeit verplempert.
Oliver schrieb: > Ihr braucht ein Programm, das vier gewinnt spielen kann. Falsch. Aufgabe richtig lesen: >>> jetz soll man auf diesem taster >>> abwechselnd spieler eins und spieler zwei spielen lassen, Das stimmt also gar nicht: >>> wir müssen Vier gewinnt auf einem Atmel At89S8252 programmieren Es muß "nur" die Vier-Gewinnt-Mechanik nachgebaut werden.
Gast
#1764955
R. W. schrieb: > wir haben shcon das ganze internet durchstöbert und kein code oder > ähnliches gefunden leider > Vielleicht gibt es hier Anregungen: http://www.elektor.de/jahrgang/2005/februar/vier-in-einer-reihe.63305.lynkx Rainer
R. W. schrieb: > und vor allem wie genau soll die gewinnabfrage ablaufen ? Ich stell mir das Ganze als Array vor. etwa so : roter chip eingeworfen ist ein roter chip daneben ? alle richtungen ausser oben durchgehen. nachbar gefunden ? suche in gleicher richtung weiter 3 nachbarn in selber richtung gefunden ? roter spieler gewinnt Mit geschickt geschachtelten schleifen sollte das machbar sein.
sicher mit schleifen, aber wir programieren doch hier in assembler
R. W. schrieb: > sicher mit schleifen, aber wir programieren doch hier in assembler Na und ?
R. W. schrieb: > sicher mit schleifen, aber wir programieren doch hier in assembler Auch in Assembler gibt es Schleifen. Oder was glaubst du wie ein Compiler eine Schleife realisiert. In Assembler ist es dann eben ein Jump oder ein Branch, der den Programmfluss in eine Schleife (also eine Wiederholung) zwingt. Aber nochmal: Die Abfrage ob, und welcher Spieler gewonnen hat, ist in eurer jetzigen Situation und in eurem jetzigen Stadium so wichtig, wie die exakte rosa Farbenuance des Kloteppichs bei Beginn eines Hausbaus. Jetzt ist wichtig, dass ihr euren 'Keller' grabt und nicht ob das Rosa zur Farbe der Fliesenfugen passt.
Ihr solltet erst einmal die Bereiche Hardwareansteuerung und Spielstrategie trennen. Was meint ihr mit "KI"? Mein Ansatz wäre eine rekursive Programmierung (In C leichter zu programmieren als in ASM). Eine Funktion liefert einen positiven Wert zurück, wenn man gewonnen hat, negativ, wenn man verloren hat, 0, wenn (das Feld voll ist und) keiner gewonnen hat oder den Mittelwert aller Funktionsaufrufe für die weiteren Züge. Die Rechentiefe könnte man zusätzlich begrenzen. Der beste Zug ist derjenige mit der höchsten Bewertung. Klar, was ich meine?
Detlev T. schrieb: > Ihr solltet erst einmal die Bereiche Hardwareansteuerung und > Spielstrategie trennen. Ganz genau > Was meint ihr mit "KI"? Das das Programm nur die reine '4-Gewinnt Hardware' simuliert. Gestell in das 2 Spieler abwechselnd Spielmarken einwerfen. Nicht mehr. Es geht nicht darum, dass das Programm selber spielt. (Und wahrscheinlich wissen die beiden gar nicht, was 'KI' bedeutet sondern kennen das nur als Buzzword von den Spielkonsolen-Testberichten) > Klar, was ich meine? Schon klar. Aber bitte, bitte ... drängt die beiden nicht in die falsche Richtung oder in Details die erst in 5 Wochen relevant werden. Die haben schon genug damit zu tun, bis Frühjahr 2011 die LED-Matrix samt Tasten anzusteuern und mit 4 Tasten einen Leuchtpunkt durch die Matrix zu navigieren. Im Moment stehen die beiden da wie das Kaninchen vor der Schlange und wissen nicht was sie tun sollen.
> sicher mit schleifen, aber wir programieren doch hier in assembler
siehst du da einen Widerspruch?
Zum Beispiel eine verschachtelte Schleife, welche ein Array "kreuz und
quer" durchläuft, und irgendwas macht mit dem Element am Kreuzungspunkt
(oder dessen linke oder rechte Nachbarn), ist erstmal die
"Ausgangsbasis", sprich es ist "ein Algorithmus" (eine
Vorgehensbeschreibung)
soetwas kann man in "Pseudosprache", in existierenden "Hoch" Sprachen
(Programmiersprachen), in Assembler eines bestimmten Prozessortyps, oder
sogar in klingonisch formulieren.
Der zugrunde liegende Algorithmus ist aber immer gleich. In
Pseudosprache wäre sowas z.B. eine Beschreibung dafür:
für alle Zeilen von Zeilen-Anfangswert bis Zeilen-Endwert mache
folgendes:
für alle Spalten von Spalten-Anfangswert bis Spalten-Endwert
mache folgendes:
nimm das Element an der Position "Zeilenwert, Spaltenwert"
und mach damit irgend was ganz tolles
nächste Spalte
nächste Zeile
Das "später" in Assembler zu übersetzen, nimmt dir "zur Not" ein
Compiler ab, wenn du dich in Hochsprachen besser ausdrücken kannst oder
willst
Zuerst mußt du aber drüber nachdenken, WAS da genau passiern soll. Dazu
brauchst du keinen Assembler oder irgendeine Programmiersprache.
Gast
#1765007
1. Die Anregungen (speziell von Karl heinz Buchegger) sind sehr gut und sollten von euch auch beherzigt werden. Aber: Wollt ihr wirklich in ASM schreiben?! Das Spiel in C umzusetzen ist um Faktor 50 einfacher als in ASM. Und wenn ihr was für die Zukunft lernen wollt und nicht nur eure Zeit verschwenden, dann seit ihr bei C auch besser aufgehoben. Ich selber habe meine Diplom-Arbeit komplett in ASM entwickelt (welche wirklich umfangreich war) würde sowas aber heute nie wieder machen. Es ist durchaus gut ASM zu beherschen. In der Praxis wird es aber durch Hochsprachen und leistungsfähige Hardware überflüssig. Die Möglichkeit mit Pointern "und" Arrays in C zu arbeiten sind grade für eure Problemlösung sehr hilfrei. Auf dieser Seite gibt es ein sehr gutes C Einsteiger-Tutorial. D.h. ihr bekommt aus dieser einen Seite alle Informationen die ihr für euer Projekt braucht. Ich schätze den Aufwand (ordentlich strukturiert mit Tastenentprellung etc.) in C auf < 100 Zeilen.
Gast
#1765011
R. W. schrieb: > leider > haben wir jedoch nicht sehr viel ahnung was Assembler anbelangt. R. W. schrieb: > C hilft uns leider nicht weiter weil wir dieses noch weniger > verstehen. Na da habt ihr doch schonmal nen Ansatzpunkt, womit ihr beginnen könnt (müsst!!!). Die Sprache, welche ihr verwenden wollt zu lernen.
> leider haben wir jedoch nicht sehr viel ahnung was Assembler anbelangt. > C hilft uns leider nicht weiter weil wir dieses noch weniger verstehen. hm, um bei meinem vorgestellten verschachtelten-Schleifen-Beispiel zu bleiben: für mich liest sich ein in C geschriebenes Programm mit sprechenden Variablen-Namen deutlich einfacher als ein Assembler-Programm, welches nur mit djnz, adc und ähnlichen Befehls-Crypo-Codes formuuliert werden kann. Das ganze Jongliere mit irgendwelchen Schleifenvariablen welche in irgendwelcehn Registern gelagert werden, ist mit "ordentlichen" Hochsprachen-Variablen meines erachtens auch wesentlich leichter zu formulieren und nachzuvollziehen. Mag doch der Compiler drüber nachdenken, ob er den Schleifenzähler in Register X, Y oder Z reinstopft.
hey leute wir sind schon sehr viel weiter, aber jetz stellt sich nur die frage, wie bitaddressiere ich ein register, ich mein setb r0.0 geht ja nich hex adresse.00 oder 01 oder so auch nicht?
Gast
#1766449
setb r0, 0
Gast
#1766452
Allerdings heißt es beim AT glaube ich sbi und cbi bzw sbr und cbr jenachdem welches Register beschrieben wird. Aber dafür hat der liebe Gott das Datenblatt erfunden!
irgedwie gibt es den befehl nicht, gibt leider alles error
Gast
#1766543
Programmiert ihr jetzt in C oder Assembler?!?
> Programmiert ihr jetzt in C oder Assembler?!? >> setb r0.0 setb sieht mir nicht wie ein typischer C-Befehl aus ....
Also jetz haben wir noch ein problem, wir wollen jetz zwei zeilen im multiplex ausgeben, um aber wieder rauszukommen haben wir jetz eine taster abfrage in die endlosschleife eingebaut ausgabe0: mov zeilen,#0.... mov spalten,#0...... call zeit 1 mov zeilen,#0000..... mov spalten,#000..... call zeit 1 jb p0.0, erste jmp ausgabe0 nun funktioniert es aber nicht der multiplexbetrieb klappt nicht mehr, ohne das jb p0.0 klappt es aber mit funktioniert die schleife nicht mehr ?????
Genau hier liegt eines der Probleme in den Grundlagen. Derartige Multiplexansteuerungen macht man nicht indem man eine Endlosschleife benutzt, sondern indem man einen Timer benutzt um mit ihm einen regelmässigen Interrupt auszulösen. In dieser INterruptbehandlung wird dann auf die jeweils nächste zu muliplexende Zeile weitergeschaltet. Die LED-Matrix wird dadurch unabhängig vom eigentlichen Programm ständig im Hintergrund durch den Interrupt Handler angesteuert.
naja, das wird wohl nix mehr mit dem programm, wir müssen es morgen eigentlich abgeben jedoch sind wir nicht fertig, kannst du das mit dem interrupt vll an einem beispiel mit quelltext schreiben das wir das vll noch verstehn.
R. W. schrieb: > naja, das wird wohl nix mehr mit dem programm, wir müssen es morgen > eigentlich abgeben > jedoch sind wir nicht fertig, Ähm. Wie habt ihr euch das vorgestellt? Gut. In C kann ich dieses Spiel auch in ein paar Stunden runtercoden. Aber in Assembler würde ich dazu mit Sicherheit ein paar Tage benötigen. Und ich bin Profiprogrammierer (seit 30 Jahren). Die meisten der 'üblichen Verdächtigen' in diesem Forum, die exzellent Assembler können, würden das wahrscheinlich nicht unter 1 bis 2 Tage hinkriegen. Ihr habt euch da masslos überschätzt, bzw. die Anforderungen an einen Softwareentwickler masslos unterschätzt. > kannst du das mit dem interrupt vll an einem beispiel mit quelltext > schreiben das wir das vll noch verstehn. Ich kenn leider deinen Prozessor und damit seinen Assembler nicht. Mit einem AVR, zb einem Mega16 wärs kein allzugroßes Problem, vorausgesetzt ihr veröffentlicht den Schaltplan, damit man sieht was wo angeschlossen ist. Aber wie gesagt: Ich halt mich da sowieso raus, weil ich den Prozessor und seine Möglichkeiten zu wenig kenne
naja wir können eben kein c, das is ja das problem -.- aber da lässt sich wohl jetz nichts mehr machen
R. W. schrieb: > naja wir können eben kein c, das is ja das problem -.- Na ja. Ihr könnt aber auch kein Assembler, wenn ich eure Fragen da oben ein wenig beurteilen darf. Und wenn ich die Wahl zwischen Schnupfen und Lungenentzündung habe, dann nehme ich Schnupfen.
villeicht dürftig, also für die die schule hat es mehr als ausgereicht bisher, timer und interupt sind wir gerade erst am lernen das ist das thema unserer nächsten arbeit
"wir müssen es morgen eigentlich abgeben" das war der punkt an dem ich vom stuhl gefallen bin vergessat es lieber und überlegt euch eine sehr sehr SEHR gute Ausrede in einer so geringen zeit wird selbst ein Profi Probleme bekommen einen Prototypen zu entwickeln+löten+etc so ein Projekt braucht einfach viel Zeit und ist nicht mal eben in 10h durch, vorallem nicht wenn man a) keine Ahnung vom Thema bisher hat und sich einarbeiten muss und b) kostet Assembler meist noch mehr Zeit als C, Gründe s.o. überlegt euch ne vernünftige Ausrede, sowas wie nen Board stecken mit Leds+Taster und nen verkohlten Chip drauf und dann zum Lehrer "wir wollten gestern die Final auf flashen- aber da war ein böser Kurzschluss, reste können sie hier sehen- und wir haben nach geguckt- es gibt enorme Lieferschwierigkeiten, der beste Rat scheint der Vorrat zu sein" wenn der dann nach Source fragt ist das kritisch- aber für ne Ausrede ist noch genug Zeit ;-)- für das Projekt eig nicht
ja funktionieren tu ja alles led leutet led lässt sich ansteuern taster sind ok controller funktioniert wir haben ja alles gegebn müssen nix selber löten und n groben plan hatten wir eigentlich auch bis uns der multiplexfehler unterlaufen is
R. W. schrieb: > ja funktionieren tu ja alles > led leutet > led lässt sich ansteuern > taster sind ok > controller funktioniert > wir haben ja alles gegebn müssen nix selber löten > und n groben plan hatten wir eigentlich auch bis uns der multiplexfehler > unterlaufen is Wenn ihr Timer bisher noch nicht hattet, dann müsst ihr mit der Endlosschleifenlösung leben. Das wird zwar ab und an ein wenig flackern, weil die Schleife mal etwas mehr und mal etwas weniger beschäftigt ist, aber funktionieren wird es prinzipiell.
ja gut aber so funzt es ja nich, des jb stört die schleife irgendwie
wir brauchen ja kein über programm das man verkaufen könnte uns würde allein vier gewinnt ohne gewinnabfrage reichen inzwischen
R. W. schrieb: > ja gut aber so funzt es ja nich, des jb stört die schleife irgendwie Das gehört da auch nicht rein. Am einfachsten macht ihr euch ein Unterprogramm, welches an der Matrix nur auf die nächste Zeile weiterschaltet und die anzeigt. Dieses Unterprogramm wird dann regelmässig an strategischen Stellen vom Hauptprogramm aufgerufen. Beim Multiplex ist es wichtig, dass die Routine, die das Multiplexing macht, regelmässig immer wieder aufgerufen wird! Die Routine kümmert sich nur darum die aktive Zeile dunkel zu schalten und die jeweils nächste Zeile nach Bedarf hell zu schalten. Mehr nicht. Hat sie dieses umschalten erledigt, kehrt sie mit einem ret wieder zum Aufrufer zurück. Das Multiplexing der kompletten Matrix ergibt sich dann dadurch, dass besagte Routine wieder und immer wieder aufgerufen wird.
R. W. schrieb: > wir brauchen ja kein über programm das man verkaufen könnte > uns würde allein vier gewinnt ohne gewinnabfrage reichen inzwischen auch dieses Ziel ist in weiter Ferne. Macht euch nichts vor.
naja wir hören jetz auf und dokumentieren unsere versuche, machen dem lehrer klar das das projekt viel zu schwer war, die anderen hatten solche sachen wie ne ampel kreuzung auf ner matrix sogar ner einfarbigen schalten oder die signale einer tastatur auslesen und auf nem grafischen lcd display anzeigen lassen, vll kassieren wir noch ne einigermaßen gute note
> Datum: 30.06.2010 11:57 > Also der Tim und Ich wir haben ein Problem, > wir müssen Vier gewinnt auf einem Atmel At89S8252 programmieren, > Datum: 01.07.2010 20:02 > mit dem programm, wir müssen es morgen eigentlich abgeben Na, das ist doch mal ein sportliches Timing für die gegebene Aufgabenstellung: Am Mittwoch gegen Mittag bekommen Tim und Robert eine Programmieraufgabe, und die sollen sie am darauf folgende Freitag morgen eigentlich abgeben. Dazwischen ist noch der Donnerstag, wo dei beiden vermutlich auch noch zur Schule gehen. Respekt, so ein Zeitmanagement sieht man selten...
Gast
#1766895
Hi
>Am Mittwoch gegen Mittag bekommen Tim und Robert eine
Der Mittwoch ist ein Donnerstag.
MfG Spess
nö, wies soll Mittwoch ein Donnerstag sein? Das erste Posting ist von Autor: R. W. (dertimunderrobert) Datum: 30.06.2010 11:57 In meinem Kalender ist der 30.06.2010 der Mittwoch (vielleicht leb ich ja in einem Zeitloch?)
Gast
#1766906
Hi Hast Recht. War (ist) wohl heute zu warm. MfG Spess
die abgabe wurde jetz doch auf montag verschoben, glaubst ihr wir schaffen das villeicht noch ?
Gast
#1767049
R. W. schrieb: > die abgabe wurde jetz doch auf montag verschoben, glaubst ihr wir > schaffen das villeicht noch ? Troll?
R. W. schrieb: > die abgabe wurde jetz doch auf montag verschoben, glaubst ihr wir > schaffen das villeicht noch ? Du meinst, Montag, den 2. August 201x? Vorher jedenfalls nicht.
naja andere kurze frage, in c: wie gibt man ein array nehmen wir mal an mit 6 ellementen da eine zeile der matrix 6 leds hat aus, also ich möchte nicht jeden bit ansprechen und ausgeben sondern das array direkt auf die zeile schicken, geht das? binär gesehen 0 0 0 0 0 0 0 0 b nichts [5] [4] [3] [2] [1] [0]
warscheinlich mit einer schleife in der man i für die elemente nimmt hochzählt und ausgibt auf den einzelnen pins wie spreche ich jedoch einen einzelnen pin an, wie man ihn abfragt weiß ich aber wie man ihn anspricht, mit P0_i und für i dann 0 bis 5 ? geht das ?
Gast
#1768662
R. W. schrieb: > also ich möchte nicht jeden bit ansprechen und ausgeben > sondern das array direkt auf die zeile schicken, geht das? Ja, das ist sogar noch viel einfacher als jedes Bit einzeln. Du kannst den Port, an dem die LEDs der Zeile angeschlossen sind, einfach wie eine Variable ansprechen. Vermutlich (die exakte Syntax hängt von eurem Compiler und den Definitionen für euren Controller ab) sowas wie
1 | |
2 | |
> warscheinlich mit einer schleife in der man i für die > elemente nimmt hochzählt Genau, nur gibt man die Bits nicht gleich aus, sondern baut sich erst das Byte zusammen, was man dann mit einem Schlag auf den Port ausgibt. Etwa so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
warum funktioniert dieses programm den nicht, wir wollten das die bits der taster im array gespeichert werden und dann auf den 6 leds einer zeile ausgegeben werden. warum funktioniert es nicht. resultat dieses queltextes ist das die ganze untere zeile leuchtet und keine reaktion auf die taster zeigt.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
Du läuft Deine While-Schleife einmal von oben bin unten durch und machst dann ein return 0 und beendest die Schleife sofort wieder. Ich weiß nicht, was Dein Compiler daraus macht. Ich schätze, ein Endlosloop. P0 ist, wenn keine Taste gedrückt wird, 0xFF (ich nehme es jedenfalls so an). "!" ist ein logisches NOT. !P0 wird immer 0x00 liefern, wenn P0 ungleich 0x00 ist. Ich weiß jetzt auch nicht, was !P0 ergibt, wenn P0 gleich 0x00 ist (ich schätze 0x01). Das willst Du sicherlich nicht. Du meinst wohl ~P0. Das invertiert P0 bitweise. Wenn P0 = 0xff (keine Taste) ist ~P0 = 0x00. Ist die Taste 0 (= bit 0) gedrück, ist P0 = 0xfe und somit ~P0 = 0x01. Abgesehen davon, solltest Du die Tasten entprellen. Noch was: Du prüfst nicht auf ~P0 && 0x20. Was soll das? P3 = 0x7F. Was soll hier jeweils das erste Semikolon?
1 | |
2 | |
3 | |
R. W. schrieb: > resultat dieses queltextes ist das die ganze untere zeile leuchtet Wie sind die LEDs angeschlossen? Gegen Vcc oder GND? Ich schätze ersteres. Dann leuchten die LEDs bei einem LOW-Ausgang. Dann leuchten alle LEDs natürlich auf, da P1 = 0.
problem von vorher hat sich geklärt, jetz hab ich n neues^^ und zwar P3 hat den wert 0b01111111 wie verschiebe ich jetz das bit das es 0b10111111 wird
oder besser gesagt ich würde gerne das array ausgeben hier mein versuch
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Du willst die 0 verschieben? 0b01111111 = ~0b10000000 0b10111111 = ~0b01000000 = ~(0b1000000 >> 1) Also:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
ja ich will die 0 verschieben also 0b01111111 =0b10111111 = 0b11011111
hald so das ich dieses 2 dimensionale array im multiplex an der matrix ausgebe
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.