Hallo! Ich muss einen Lottozahlengenerator anfertigen,der eine 2 stellige Dezimalzahl auf einer 2-Stelligen 7-Segment Anzeige anzeigen lässt. Das ganze soll im Multiplexbetrieb ablaufen.(Ohne Timer) Ich bin soweit fast fertig mit dem Programm,nur hänge ich noch bei diesem Multiplexbetrieb fest. Ich weiß eben nur das es bedeutet,dass die 2 anzeigen immer hin- und herschalten und sozusagen immer ein und ausgeschalten werden,aber das so schnell geht,dass es für das menschliche auge nicht sichtbar ist. Wie bewerkstellige ich so etwas im Programm? Ach ja,das ganze wird mit Assembler programmiert,mein Mikrocontroller ist von Atmel (wenn jemand diese Information benötigt) Wäre echt lieb,wenn mir da jemand helfen könnte! MFG
Warum ohne Timer? Dafür sind die da. Und falls du schon alle benutzt hast, hängst du dich eben in eine schon bestehende Timerroutine mit rein.
Da steht wie es geht einschließlich Code: http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige#Mehrere_7-Segment_Anzeigen_.28Multiplexen.29
LoTTo schrieb: > mein Mikrocontroller > ist von Atmel (wenn jemand diese Information benötigt) Welche Information? Da Atmel mehr als einen µC herstellt, wäre mein µC ist AT..... hilfreich. mfg.
@crazyhorse weil wir im Unterricht noch keine Timer behandelt haben,und ich nicht 100%ig die Englische Einführung zu den Timern verstehe... @Thomas ich hatte die genaue Bezeichnung des uC's hier,nun find ich sie nicht mehr,ich bin jedoch dabei sie herauszufinden!
@ Chris ich hätte dazuschreiben sollen,dass es auf 8051-Ebene programmiert wird. (Glaube,dass das so geschrieben wird,kenne mich mit diesem AVR nicht aus!)
Also habs wieder gefunden! Wir benutzen den Atmel AT89S8252 !
LoTTo schrieb: > Das ganze soll im Multiplexbetrieb ablaufen.(Ohne Timer) Ohne Timer, was soll der Quatsch? Warum wollen die Lehrer immer, daß man unbrauchbare Lösung benutzt. Macht es ihnen Spaß, wenn man damit später in der Praxis auf die Schnauze fällt? Peter
Peter Dannegger schrieb: > LoTTo schrieb: >> Das ganze soll im Multiplexbetrieb ablaufen.(Ohne Timer) > > Ohne Timer, was soll der Quatsch? > Warum wollen die Lehrer immer, daß man unbrauchbare Lösung benutzt. > Macht es ihnen Spaß, wenn man damit später in der Praxis auf die > Schnauze fällt? Vielleicht ist es auch nur eine Vorstufe, damit man späte den Unterschied zu einer Timer-Lösung sieht und darüber sprechen bzw. demonstrieren kann, warum die Timer-Lösung haushoch überlegen ist.
LoTTo schrieb: > Wie bewerkstellige ich so etwas im Programm? Ganz einfach. Du willst "49" ausgeben: start: - Bitmuster für "4" am Port anlegen - linkes Display einschalten - ein bisschen warten - linkes Display ausschalten - Bitmuster für "9" am selben Port anlegen - rechtes Display einschalten - ein bisschen warten - rechtes Display ausschalten - zurück zu "start" "ein bisschen warten" ist das blödeste, was ein Controller machen kann. Aber Timer hattet ihr ja noch nicht. Karl Heinz Buchegger schrieb: > Vielleicht ist es auch nur eine Vorstufe, Ist es wohl auch. mfg.
Ein Haus baut man aber auch nicht mit dem Dach zuerst. Man macht zuerst das Fundament, dann die Wände und das Dach zum Schluß. Multiplexen ohne den Timer zu kennen, ist quasi wie Fenster einsetzen ohne daß die Wände stehen. Sieht nicht nur blöd aus, sondern isses auch. Es lernt sich einfacher, wenn die Reihenfolge richtig rum ist. Peter
LoTTo schrieb: > und ich nicht > 100%ig die Englische Einführung zu den Timern verstehe... Zum 8051 gibt es sehr viel auf deutsch, z.B.: http://www.ipd.uka.de/~buchmann/microcontroller/index.htm http://www.ieap.uni-kiel.de/surface/ag-berndt/lehre/fpmc/index.html Peter
Peter Dannegger schrieb: > Zum 8051 gibt es sehr viel auf deutsch, z.B.: Aber das nützt ja alles nichts, wenn der Lehrer das anders haben will. Die Frage ist doch, wie der Lehrer drauf ist. Ist die Aufgabe mit Timer nicht richtig gelöst und somit mangelhaft oder honoriert er das Vorgreifen auf sein Thema der nächsten Unterrichtsstunden? mfg.
ne er meinte,ich kann das schon mit Timer machen,aber muss halt alles super dann erklären auch!
Thomas dankeschön! Das bisschen warten ist kein Problem,ist ja mit einer Zeitschleife erledigt. bin grad am Überlegen,welche Verzögerung passend ist...
LoTTo schrieb: > Thomas dankeschön! > > Das bisschen warten ist kein Problem,ist ja mit einer Zeitschleife > erledigt. > bin grad am Überlegen,welche Verzögerung passend ist... Das ist eigentlich die falsche Überlegung. Du willst eigentlich: so schnell wie möglich so dass du es dir gerade 'noch leisten' kannst. Ein 'zu schnell' gibt es da nicht. Aber ein 'zu langsam'. Und, was hindert dich jetzt daran, einen Timer zu benutzen? Weil du den erklären musst? Timer sind doch ganz einfache! FAQ: Timer Ist zwar für einen AVR, aber das Prinzip ist bei deinem µC auch nicht anders.
1. Ist da nur eine Erklärung WAS ein Timer ist 2. Steht dann da nur ein Quellcode von einem C-Prgr. (C-Programmierung gibts erst in 2 Wochen..) Ich brauch schon genauere Erklärungen auch für die Timer-Register,wie man die Timer initialisiert usw.. trz. danke
LoTTo schrieb: > Ich brauch schon genauere Erklärungen auch für die Timer-Register,wie > man die Timer initialisiert usw.. > trz. danke Naja. So viel lesen muss man da eigentlich nicht Oo
...so ein Quark. Was will man bei so einem Bello mit einem Timer. Damit
das Umschalten der Segmente exact mit 100 Herz passiert und nicht mit
101?
Mit 2 -3 verschachtelten Schleifen ist man schon am Ziel.
Timer? nicht nötig.
Interrupt? nicht nötig
Das ist allerdings der Hammer:
>>Ich bin soweit fast fertig mit dem Programm
Was genau macht es denn bis jetzt?
JK:
Karl Heinz Buchegger schrieb: > Das ist eigentlich die falsche Überlegung. > Du willst eigentlich: > so schnell wie möglich > so dass du es dir gerade 'noch leisten' kannst. Vollkommen klar. Und daß das Bullshit ist und wie es richtig geht, wissen wir alle. Aber in diesem Fall ist eine Verzögerung gar nicht so unsinnig. Der Controller muß ja noch was anderes machen, nämlich eine Taste abfragen und eine Zufallszahl erzeugen. Jeder Tastendruck, jede Berechnung bringt das Display heftig zum Flackern bzw, die Hälfte, die gerade leuchtet, bleibt zu lange an. Leuchtet doppelt oder dreimal so lang. Mit einer Verzögerung kann ich aber jede Displayhälfte sagen wir mal 5ms leuchten lassen und das Längerleuchten bedingt durch Tastendruck, fällt nicht so ins Gewicht. Natürlich ist das immer noch Bullshit. Aber sieht wenigstens ein bisschen hübscher aus. Und zieht dem Lehrer den Zahn: So jetzt machen wir mal das Flackern weg... mfg.
Thomas Eckmann schrieb: > Natürlich ist das immer noch Bullshit. Aber sieht wenigstens ein > bisschen hübscher aus. Und zieht dem Lehrer den Zahn: So jetzt machen > wir mal das Flackern weg... Ich wette das artet dann aus in: da muss man dann halt die Verzögerungsschleife an die jeweilige Eingabesituation anpassen.
Karl Heinz Buchegger schrieb: > da muss man dann halt die Verzögerungsschleife an die jeweilige > Eingabesituation anpassen. Das wäre natürlich der Hit. Aber das Konzept des Paukers ist es ja, die Jungs erst so einen Scheiß machen zu lassen um ihnen danach zu zeigen, wie man es besser macht. Und er hat es auch ohne Timer ansehnlich hingekriegt. Und der Lehrer kann bis zum nächsten µC-Kurs im nächsten Schuljahr darüber grübeln wie. Wenn das ein AVR wäre, würde ich ihm ein totales Scheiß-Delay-Dingen zusammenpfriemeln und das richtige Programm im Bootsektor verstecken. Da kommt der nie drauf. mfg.
Pseudocode für ohne Interrupt:
1 | if( Tastendruck erkannt ){ |
2 | Taste behandeln; |
3 | }
|
4 | else
|
5 | {
|
6 | Zyklen der Behandlung ausrechnen; |
7 | entsprechende Anzahl NOPs ausfuehren; |
8 | }
|
9 | // dito für jede weitere Verzweigung.
|
Lernen tut man dabei rein garnichts. Daher schade um die Lebenszeit, die man damit vergeudet :-( Peter
Thomas Eckmann schrieb: > Aber das Konzept des Paukers ist es ja, die Jungs erst so einen Scheiß > machen zu lassen um ihnen danach zu zeigen, wie man es besser macht. Jaein. Da sehen sie dann wenigsten direkt, warum das ein Problem ist. Sonst glaubt einem die Jugend ja sowieso nichts mehr :-) Aber ich denke mittlerweile, wir liegen da mit der These, dass es sich dabei um ein vorbereitende Lernmethode handelt, sowieso falsch. Und zwar wegen dem hier > Beitrag "Re: 2-Stellige 7-Segment Anzeige im Multiplexbetrieb" Das klingt für mich eher wieder mal nach einer Projektarbeit, die in Bereiche führt, die sie noch gar nicht gelernt haben, nur hat der SChüler das noch gar nicht gewusst, als er sich das Projekt ausgedacht hat.
Karl Heinz Buchegger schrieb: >> Beitrag "Re: 2-Stellige 7-Segment Anzeige im Multiplexbetrieb" Ja. Das habe ich wohl übersehen. Nichtsdestotrotz. Wenn man die Zufallszahl und die Taste zwischen die Ausgaben packt, sich die Taste merkt und danach nur noch bei Tastendruck die laufend neu berechnete Zufallszahl in die Ausgabe packt, läuft das flackerfrei. Daß die Zufallszahl ständig neu berechnet wird stört ja keinen grossen Geist. Und Entprellung-light ist auch mit drin. Hauptsache die Laufzeit ist immer gleich. Display links Zufallszahl Taste Display rechts Zufallszahl Taste if (Taste) Zufallszahl in Ausgaberegister Nächste Runde Peter Dannegger schrieb: > Lernen tut man dabei rein garnichts. > Daher schade um die Lebenszeit, die man damit vergeudet :-( Ja klar. mfg.
da ja jemand fragte wie mein programm bis jetzt aussieht: Es ist keine richtige zufallszahl,ich sollte ein Register bis 49 hochzählen lassen,solange ein Knopfgedrückt ist und wenn es bei 1 angelangt ist fängts wieder von vorne an. Die zahl die ich dann nach dem loslassen des Tasters habe,wird in den XRAM gespeichert (muss laut aufgabenstellung) und dannach durch 10 geteilt,damit ich einer und zehner habe. die werden dann jeweils auf den anzeigen angezeigt. Ich muss jetzt nur noch die zahlen die ich habe an die DIP-schalter transportieren und das keine doppelten Zahlen vorkommen. Ich hab da noch ein Problem mit den DIP-schaltern. da ja eine Zahl an einem Dipschalter angelegt wird (zb. P1.1 für eine Zahl,P1.2 usw...) muss ich ja dann beim aufruf der dipschalter wieder ''einen Multiplexbetrieb'' starten,wäre doch dann sinnvoll,das multiplexen in ein Unterprg zu packen oder??
>> Ich muss jetzt nur noch die zahlen die ich habe an die DIP-schalter transportieren.. Also wenn ich Zahlen habe nehme ich meistens eine Schaufel und eine Schubkarre um sie an die Dip Schalter zu transportieren... Zudem ist es völlig logisch das Dipschalter an einem Lottozahlengenerator hast an die du Zahlen transportieren musst, das leuchtet garantiert jedem der das ließt sofort ein :-) >>da ja eine Zahl an einem Dipschalter angelegt wird... Wie wird das laufen, auf ein Stück Papier drucken und an den Dipschalter kleben? >>muss ich ja dann beim aufruf der dipschalter wieder ''einen Multiplexbetrieb'' starten.. Als Dipschalter würde ich an der Fleichtheke erstmal eine Zahl ziehen damit ich aufgerufen werde, sonst komme ich ja nie dran... >>das multiplexen in ein Unterprg zu packen oder?? Auf jeden fall, so würde ich es auch machen, das ist die entscheidende Frage, definitiv. JK
@Jürgen K. Versuch's mal bei der Komikerparade.... Paul
Paul Baumann schrieb: > Versuch's mal bei der Komikerparade.... Und wer soll sich das anhören? Aber das mit den Dipschaltern hab' ich auch nicht verstanden. mfg.
Thomas Eckmann schrieb: > Aber das mit den Dipschaltern hab' ich auch nicht verstanden. Da bist du nicht alleine. Selbst wenn ich versuche, den Begriff 'Dipschalter' erst mal durch 'X' zu ersetzen und dann irgendeine sinnvolle Belegung für 'X' zu finden, komme ich auf keinen grünen Zweig.
Was ich mir vielleicht vorstellen könnte: Da es sich ja um Lotto handelt, muss er 6 Zahlen (plus Zusatzzahl) generieren. Das würde schon mal den Passus mit der Vermeidung von Duplikaten erklären. Und dann stellt sich die Frage: Wie erfährt eigentlich mein Benutzer von den gezogenen Zahlen? Da muss es also irgendeinen Selektionsmechanismus geben, mit dem der Benutzer dem Programm mitteilen kann: Zeig mir bitte Zahl 1, jetzt Zahl 2, etc. Und der Selektionsmechanismus könnte in seiner physischen Ausführung eben durch jene ominösen DIP-Schalter realisiert sein. Das ist allerdings Spekulation. Und selbst wenn ich mit dieser Raterei recht habe, sollte sich der TO mal der Frage stellen, ob er tatsächlich verstanden hat, wie ein Computer eigentlich arbeitet und welche Rolle Ein- bzw. Ausgabeelemente eigentlich spielen. Denn selbst in meinen kühnsten und wildesten Träumen würde und wäre mir nie eingefallen, den Akt des Einlesens von Schalterstellungen, zum Zwecke des Feststellens eines Benutzerwunsches, als 'an die DIP-Schalter senden' zu bezeichnen. Da stimmt ganz einfach die durch die Formulierung implizierte Datenflussrichtung schon mal überhaupt nicht, um mal auf die erste und meiner Ansicht nach wichtigste Verwirrung hinzuweisen. Das sollte im übrigen auch nicht auf die leichte Schulter genommen werden, die in Wohl keiner anderen Disziplin wie der Programmierung, ist es so wichtig, seine Gedankengänge in einer nachvollziehbaren und verständlichen Form zu präsentieren. Und wenn es für jemanden unmöglich ist, wenigstens die auszuführende Tätigkeit einingermassen verständlich zu beschreiben, dann ... gute Nacht
-.- die Zahl,die auf der 7segment erscheint,soll dannach durch die DIP-Schalter wieder aufgerufen werden,hab ich mich so undeutlich ausgedrückt=?
>>Versuch's mal bei der Komikerparade.... ja ist schlecht ich weiß. Mir brannte gerade der Hut. Es ist wirklich schwer zu beschreiben wie die Aufgabenstellung aussieht, das ist mir schon klar. Aber das man so garnkein Gefühl dafür mitbringt was andere wissen könnten und was nicht, werde ich wohl nie verstehen. @LoTTo Du redest von Dingen die keiner versteht. Hier hat keiner deine Aufgabenstellung. Wir haben alle keine Glaskugel a la hokus pokus. Es ergibt keinen Sinn wenn du es nicht erklärst. A)Wofür sind die Dipschalter B)wieviele sind vorhanden C)Was wird dort zu welchem Zweck angegeben D)In welcher Form (Zahlensystem?) >>und das keine doppelten Zahlen vorkommen Das musst du genauer erklären. Legst du alle bereits vorgekommenen Zahlen in binärform an Dipschalter an um festzuhalten welche bereits getippt wurden? E)Wie sind die Schalter am Controller angebunden? Register? Es wäre ggf. sinvoller sich die bereits getippten Zahlen in einem EE Prom zu merken, oder im Speicher.... Es muss hier wesentlich mehr kommen und es muss auch zu deiner Programmierkenntnis noch was kommen,es wirkt alles sehr unkoordiniert... JK
LoTTo schrieb: > hab ich mich so undeutlich ausgedrückt=? Undeutlich wäre ja noch gegangen. Wieviele Dipschalter hast du denn? Du bist nämlich gerade auf dem Weg zu deinem nächsten Problem. mfg.
Es werden sieben Dip-Schalter sein. Er drückt sieben mal die Taste und generiert damit sieben Zahlen zwischen 1 und 49. Mit den Dip-Schalter kann er dann jede einzelne Stelle anzeigen. Einen Schalter braucht er dann noch zum zurück setzen.
Wie kompliziert kann man es denn bitte machen? Der Lehrer ist fachlich klar unter qualifiziert.
>>Mit den Dip-Schalter kann er dann jede einzelne Stelle anzeigen Mensch Leute, mit einem Dip-Schalter kann man nichts anzeigen, das geht nur mit einem Display oder einer Anzeige. >>Einen Schalter braucht er dann noch zum zurück setzen. Ist klar....Wen soll er denn wohin wann "zurück setzen" oder meintest du "zum Zurücksetzen"? Mensch Mensch Mensch. >>jede einzelne Stelle anzeigen Schritt 1. Unterscheiden zwischen Ziffer und Zahl. Eine einzelne Stelle ist meist eine Ziffer. Eine Zahl kann aus mehreren Ziffern bestehen. Was sollen nun die uminösen Dip-Schalter? Ist jeder Schalter einer Lottozahl zugeordnet? Man drückt also 7x und kann sich dann jede erzeugte Zahl nochmal wiederholen? Wäre dann eine Taste zum Durchgehen der erzeugten Zahlen nicht einfacher und Sinnvoller? Was ist wenn 2 Dip-Schalter aktiv gemacht werden etc...? JK
Hi Nun, das Problem ist vieeel größer... Bei einer Lottoziehung von 7 Zahlen ist natürlich sicherzustellen, das jede gezogene Zahl nur einmal vorkommt. Klar. Und das mit dem Wissen ohne Grundlagen zum Multiplexen. Das schaut übel aus. Es wird hier nix nützen, zu erklären, das es relativ einfach geht. Zuerst einen Speicherblock mit Zahlen von 1-49 füllen, diesen dann beim Ziehen der Zahlen zu adressieren und die gezogene Zahl aus diesem Block zu entfernen und in die Ziehung einzufügen. Das Ganze in Assembler. Nun, für einen "Durchblicker" kein Problem. Aber der hat auch keine Probleme mit einer zweistelligen Siebensegmentanzeige. Ich will hier gar nicht darauf hinweisen, das Timer und Interrupt schon "Gänsehaut" verursachen..... Doch, eine Tip hab ich noch an "LoTTo". Mach dir erst eimal klar, was dein Programm alles können muß. Einfach nur von 1 bis 49 zu zählen kann es ja nicht sein. Dann schreibst du dir auf, welche Blöcke du brauchst, um zu deinem Ziel zu gelangen. Auch wenn es vielleicht keine Programmierhiolfe ist, hier mal so grob die Vorgehensweise: Ziehungszähler auf 0 Taster gedrückt, zählen von 0 bis max (am Anfangr 48) Taster losgelassen, Array adressieren und Inhalt unter Zuhilfenahme von Ziehungszähler in Ablage kopieren. Alle Werte oberhalb von Max um eins nach unten schieben. Max decrementieren Ziehungszähler incrementieren und damit die Ablage neu adressieren Während der Ziehung die Ausgabe auf die Ziehung schalten Nach erfolgter Ziehung über Dipschalter die Ablage adressieren und die Werte ausgeben Zur Ausgabe Werte durch 10 teilen, um Zehner und Einer zu trennen und in den Ausgabepuffer einzutragen. Ausgabe erfolgt aus dem Ausgabepuffer Ich glaub, das dürfte so ziemlich komplett sein. Verfeinern musst du es selber. Dann nimm dir einzelne Blöcke vor und programmier sie. Gruß oldmax
Jürgen ich muss mich ja an die Aufgabenstellung halten! Ich kann mir nicht aussuchen was ich will... In der Aufgabenstellung steht,dass man mit den DIP-Schaltern alte Lottozahlen wieder aufrufen kann und diese sollen dann an der 2-stelligen 7Segment angezeigt werden! Meine Frage: Die DIP-Schalter (sind 8 an der Zahl) sind ja zusammen ein PORT (dürfte bei meinem P1 sein,spielt ja keine Rolle) Nun: ein DIP-Schalter wäre ja doch dann P1.1 als beispiel. Das ist doch nur ein einzelnes Bit,wie kann ich dann dort eine ganze Zahl anlegen? Das ist mir nun ein Rätsel..
Also Die Aufgabenstellung lautet: Ich muss einen Lottozahlengenerator entwerfen (in Assembler): Dieser muss eine ''zufällige Zahl'' (in meinem fall ist das einfach ein Register Welches nun von 1 bis 49 zählt und dann wieder von vorne Anfängt die Zufallszahl) an eine 2-Stellige 7-Segmentanzeige anzeigen lassen,welche im Multiplexbetrieb laufen soll. Die bereits ausgegebenen Zahlen sollen durch die DIP-Schalter wieder aufgerufen werden können (sind 8 Stück an EINEM Port) Ich hab mal mein Programm(was ich aber von grund auf verändern werde) mal im Anhang mitgegeben
> Außerdem soll verhindert werden, dass keine Zahl doppelt gespeichert wird.
Mindestens eine Zahl soll also doppelt gespeichert werden? ;-)
falsch ausgedrückt sorry! Ich meine das nicht 2 mal die Zahl ''33'' z.b. gespeichert werden soll,sondern wenn die ''33'' ein Zweites Mal kommt,soll er ja dann nochmal eine neue Zahl auswählen. Ich hab mal im Anhang mein programm wie es bis jetzt ist. Kann mir jemand verraten ob mein 'Multiplexbetrieb' richtig ist?
LoTTo schrieb: > Nun: ein DIP-Schalter wäre ja doch dann P1.1 als beispiel. Das ist doch > nur ein einzelnes Bit,wie kann ich dann dort eine ganze Zahl anlegen? > Das ist mir nun ein Rätsel.. Junge ..... GAR NICHT! Das sind Schalter! An die kannst du nix 'anlegen'. Schalter sind Eingangselemente. Mit Schaltern teilt ein Benutzer einem Programm mit, was er gerne möchte! Schalter geschlossen - Schalter offen. Ein Schalter wird abgefragt, wie sein Zustand ist. Deine Zahlen gibst du auf der Anzeige aus! Und mit den Schaltern wird ausgewählt WELCHE Zahl jetzt gerade, in diesem Moment angezeigt werden soll! Ist ein andere Schalter betätigt, dann wird eine andere Zahl angezeigt. (Nämlich eine von den 7, die du dir vorher bestimmt hast) Das ganze Gestammel von wegen "Ich lege eine Zahl an dem DIP-Schalter an" ist völlig ohne jeden Sinn! Es ist von der Qualität von "Das U-Boot überholte den Zug auf der Autobahn". Die Wörter sind richtig, die Zusammenstellung zu einem Satz ebenfalls - und trotzdem ist der ganze Satz ohne jeden Sinn. Da werden Begriffe miteinander verwendet, die nichts miteinander zu tun haben.
Mein Lehrer hat mir eben eine E-Mail geschickt,ich hab nen Völlig falschen Denkansatz gehabt, was die DIP-Schalter anging. Mit den 8DIP-Schaltern kann ich die BINÄRE adresse des jeweiligen Speicherortes der Lottozahl einstellen,die dann an der 7-Segment angezeigt werden soll. . .
LoTTo schrieb: > Mein Lehrer hat mir eben eine E-Mail geschickt, Da Sie offenbar mitlesen: Hallo, Herr Lehrer. Ich finde es ehrlich gesagt nicht in Ordnung, wenn immer mehr Lehrer auf www.mikrocontroller.net verweisen, damit ihre Schüler eine Anlaufstelle haben, wenn es Probleme gibt. In erster Linie ist es ihr Job, ihre Schüler soweit zu bringen, dass sie in der Lage sind, ihre Hausaufgaben zu lösen. Dazu gehört auch, dass man komplizierter Aufgaben mit den Schülern durchspricht, ihnen die grundlegenden Ansätze zeigt und sicherstelle, dass zumindest jeder die Aufgabenstellung und den Einsatz der vorhandenen Resourcen verstanden hat. mfg einer der Moderatoren von www.mikrocontroller.net
ne der hat mich nicht darauf verwiesen O.o? der liest das auch nicht mit,bin selber hierher gekommen. Und ich will bestimmt keine Lösungen von euch , nur Hilfe wie etwas realisiert werden kann mehr nicht.... Mein Gott...
LoTTo schrieb: > ne der hat mich nicht darauf verwiesen O.o? Hatten wir alles schon. Und es kommt gar nicht so selten vor, dass überforderte Lehrer ihre Schützlinge hier 'aussetzen'.
Ihr dürft ja gerne glauben was ihr wollt.. :) Ich bedanke mich trz für die ''SINNVOLLEN'' Beiträge mancher von euch ! :)
Ich finde diese Aufgabe für die Schule zu schwer. Ich kann mir nicht vorstellen, daß die ein Schüler zufriedenstellend lösen kann. Es fehlen einfach die Grundlagen, um so ein komplexes Problem in seine Teilaufgaben zu zerlegen und diese dann strukturiert zu implementieren. Als erstes müßte man sich überlegen, welche Variablen man braucht und diese anlegen. Peter
LoTTo schrieb: > Ich hab mal im Anhang mein programm wie es bis jetzt ist. Naja, noch nicht sehr viel. So 5 .. 10% der Arbeit schätze ich. LoTTo schrieb: > Kann mir > jemand verraten ob mein 'Multiplexbetrieb' richtig ist? Etwas verschwurbelt, könnte aber gehen. Peter
LoTTo schrieb: > Die zahl die ich dann nach dem > loslassen des Tasters habe,wird in den XRAM gespeichert (muss laut > aufgabenstellung) Diese Teilaufgabe könnte z.B. so aussehen:
1 | ; Defines |
2 | ;-------------------------------------------------------------------- |
3 | Minval equ 1 |
4 | Maxval equ 49 |
5 | Maxnumbers equ 6 ; 6 aus 49 |
6 | xdata_base equ 0000h |
7 | |
8 | ; Variables |
9 | ;-------------------------------------------------------------------- |
10 | dseg at 30h |
11 | |
12 | display_ones: ds 1 ; 7-segment pattern for ones-digit |
13 | display_tens: ds 1 ; 7-segment pattern for tens-digit |
14 | display_digit: ds 1 ; 0 or 1 |
15 | |
16 | index: ds 1 ; 0 ... maxnumbers - 1 |
17 | number: ds 1 ; actual random number |
18 | |
19 | ; Code |
20 | ;-------------------------------------------------------------------- |
21 | cseg |
22 | |
23 | ;-------------- Store lottery number, count up Index ---------------- |
24 | ; function: |
25 | ; if index < maxnumbers: |
26 | ; store numer, |
27 | ; increment index |
28 | ;-------------------------------------------------------------------- |
29 | store_number: |
30 | mov a, index |
31 | cjne a, #maxnumbers, _stn1 |
32 | _stn1: |
33 | jc _stn2 ; C = 1, if a < maxnumbers |
34 | ret ; error, max index reached |
35 | _stn2: |
36 | mov dptr, #xdata_base ; calculate address: |
37 | add a, dpl ; xdata base + index |
38 | mov dpl, a |
39 | jnc _stn3 |
40 | inc dph |
41 | _stn3: |
42 | mov a, number |
43 | movx @dptr, a ; store new number |
44 | inc index |
45 | ret |
46 | ;-------------------------------------------------------------------- |
47 | end |
Und mit diesem Array mußt Du dann jede neue Zahl vergleichen, ob sie schon drin ist, damit sie nicht doppelt ist. Diese Prüfung ist dann eine weitere kleine Teilaufgabe. Usw. Diese Methode nennt sich Bottom-up. Zusammengebastelt wird zum Schluß. Peter
>>Meine Frage: Die DIP-Schalter (sind 8 an der Zahl) sind ja zusammen ein >>PORT Die DIP-Schalter sind zusammen ein 8Poliger DIP- Schalter und kein Port. Solange du nicht verstehst das es falsch ist was du schreibst und gerade auf diese Details nicht im Unterricht und bei der Aufgabenstellung achtest, wird das nichts mit der Ausarbeitung. >> (dürfte bei meinem P1 sein,spielt ja keine Rolle) Was ist denn bei deinem P1? Was ist überhaupt dein P1? Versteht kein Mensch!!! Garantiert nicht. Ich versuche es jetzt noch einmal mit geziehlten Fragen, bei den letzten hast du ja nur vereinzelt indirekt oder garnicht geantwortet. A)Wieviel Erfahrungen hast du mit deiner Hardware? A1)Kannst du bei deiner Hardware Pins auf High oder Low schalten? A2)Kannst du bei deiner Hardware Eingansgspins abfragen und darauf reagieren? B)Wie sieht es mit deiner Erfahrung im programmieren aus? B1)Variablen anlegen und zuweisen B2)Kontrollstruturen bedienen B3)... Du schriebst oben mal "Bin fast fertig" dabei hattest du die Aufgabenstellung scheinbar noch nicht mal ganz verinnerlicht. Wie steht es nun um diese Aussage? >> Außerdem soll verhindert werden, dass keine Zahl doppelt gespeichert wird. Der Aufagbenverfasser gehört übrigens auch geschlagen. Das steht dort wirklich so drin. Wie kann das nur sein? Und LoTTo entschuldigt sich auch noch dafür. Muss man Ihn ja mal in Schutz nehmen. Bei der Aufgabenstellung und dem Hintergrundwissen würde ich genauso da sitzen. Man man... Zumal wirklich der Rahmen für den Ablauf fehlt. Wie man z.B. wieder eine neue Runde anfängt, oder ob die Zahlen dann immer einen "Platz" aufrücken etc...Halbfertige Aufgabenstellung mit fehlerhafter Beschreibung. Normalerweise müsste man das mal so programmieren wie es dort verlagt wird, das Gesicht möchte ich dann mal sehen, wenn nachher 3 x die 37 in einem Druchlauf abgespeichert wird und der LoTTo sagt: "wieso, steht doch so in der Aufgabenstellung"... JK
Jürgen K. schrieb: > Der Aufagbenverfasser gehört übrigens auch geschlagen. Das steht dort > wirklich so drin. Ja, mir scheint durch den Schüler kann man den Lehrer sehen. Und man sieht nichts Gutes.
naja... Ich hab eigentlich nur noch das Problem mit dem Multiplexen im Moment: So wie ich es programmiert habe,würde er mir die Zahl (also Die Zehnerziffer kurz und die Einerziffer kurz) kurz anzeigen .... Zu schnell für das menschliche Auge. Wie könnte ich es lösen,dass dauernd hin und hergeschaltet wird (OHNE TIMER,auch wenns schwachsinn ist!)?
LoTTo schrieb: > naja... Ich hab eigentlich nur noch das Problem mit dem Multiplexen im > Moment: > > So wie ich es programmiert habe,würde er mir die Zahl (also Die > Zehnerziffer kurz und die Einerziffer kurz) kurz anzeigen .... Zu > schnell für das menschliche Auge. Wie könnte ich es lösen,dass dauernd > hin und hergeschaltet wird (OHNE TIMER,auch wenns schwachsinn ist!)? Indem du dauernd, während das Programm auf den nächsten Tastendruck wartet bzw. die DIP-Schalter abfrägt, zwischen den Anzeigen hin und her schaltest? Wenn du keinen Interrupt/Timer nehmen kannst, dann musst du eben selber an 'strategisch guten Positionen' in deinem Programm dafür sorgen, dass laufend umgeschaltet wird. An irgendeiner Stelle im Programm muss es ja schliesslich passieren. Ob dein programm jetzt Däumchen dreht und beim Warten auf eine Taste nichts tut, oder ob es zwischendurch mal die jeweils andere Anzeigenstelle einschaltet, ist ja dem µC wieder egal.
...ohne Timer einfach 3 oder 4 Schleifen ineinander verschachteln: START_ movlw .2 movwf ZEIT4 MESS4_ movlw .2 movwf ZEIT3 MESS3_ movlw .3 movwf ZEIT2 MESS2_ movlw .3 movwf ZEIT1 MESS1_ decfsz ZEIT1,F goto MESS1_ decfsz ZEIT2,F goto MESS2_ decfsz ZEIT3,F goto MESS3_ decfsz ZEIT4,F goto MESS4_ goto START_ So siehts in PIC asm aus. Eine Schleife um die nächste basteln. In jeder Schleife hat man dann unterschiedliche Rechenleistungen. Weiter innen kann man dann das Muxen machen, und aussen die Dinge die nur seltener gemacht werden müssen.... JK
Ich finds ja wahnsinnig nett,dass manche hier Lösungen posten,(auch wenn das gar nicht das ist worauf ich wirklich aus bin),nur ich bin eben noch schüler und wir arbeiten nur mit einem Mikrocontroller und zwar den von Atmel und wenn ihr hier mit AVR oder sonstigem anfängt,kann ich da nicht alles rauslesen oder gar nichts..
Beispiele sind eben doch am anschaulichsten. :-/ Und ich habe es gerade am Wickel ... Also: Du musst für Multiplex mit Timer diesen erst mal starten. Dazu wird dem Timer gesagt, wie er sich verhalten soll. Es muss dem Timer gesagt werden wie weit er zählen soll (das ist in Deinem Fall nicht sonderlich wichtig) Und es müssen die benötigten Interupts erlaubt (eingeschaltet) werden. Das wird hier mit 'LCALL init_timer2' erledigt.
1 | ; Timer 2 starten |
2 | init_timer2: MOV T2CON, #0x04 ; Starten |
3 | |
4 | MOV CRCL, #0x00 ; SET RCAP2 = 0xF000 (-4096) |
5 | MOV CRCH, #0xF0 |
6 | |
7 | SETB ET2 ; ET2 = 1 : Erlaube Interupt f. T2 |
8 | SETB EAL ; EAL = 1 : Erlaube Interupts |
9 | |
10 | RET |
Dann muß man an der Timer2-IRQ-Vector-Adresse ein 'LJMP irq_timer2' setzen, damit diese, wenn der Timer2 einen IRQ erzeugt, auch angesprungen wird. Alles was Du nun noch im Hauptprogramm machen musst, ist die beiden Bytes zahl_einer und zahl_zehner mit sinnvollen Daten zu füllen. Einmal. Und erst dann wieder, wenn Du andere Zahlen darstellen möchtest.
1 | ; Timer 2 ISR |
2 | irq_timer2: PUSH ACC ; Akku sichern - denn den brauchen und verändern wir |
3 | PUSH PSW ; Statusreg sichern - das brauchen wir auch |
4 | CLR T2PS ; IRQ zuruecksetzen - wir kümmern uns nun ja darum. |
5 | |
6 | MOV A, switch |
7 | ADD A, #128 ; bei jedem 2. Mal Carry erzeugen |
8 | MOV switch, A |
9 | |
10 | JC zehner ; und deshalb bei jedem 2. Mal abbiegen |
11 | |
12 | CLR P3.2 ; Zehner Segment abschalten |
13 | MOV P1, zahl_einer ; Einerdaten an Port anlegen |
14 | SETB P3.3 ; Einer Segment einschalten |
15 | |
16 | JMP irq_fertig ; Bis zum nächsten IRQ werden die Einer angezeigt |
17 | |
18 | zehner: CLR P3.3 ; Einer Segment abschalten |
19 | MOV P1, zahl_zehner ; Zehnerdaten an Port anlegen |
20 | SETB P3.2 ; Zehner Segment einschalten |
21 | |
22 | irq_fertig: POP PSW ; Statusreg wieder herstellen |
23 | POP ACC ; Akku wieder herstellen |
24 | RETI ; alles wieder wie vorher und zurück |
Die Ports musst Du noch anpassen. Logisch. Vielleicht hilft es ja ... Gruß Jobst
>>Wie könnte ich es lösen,dass dauernd hin und hergeschaltet wird (OHNE TIMER,auch
wenns schwachsinn ist!)
indem du das nicht nur 1 mal machst sondern unendlich, in einer
Schleife...
schleife unendliche
{
ist anzeige "zehner" an
{
ja: dann mach anzeige einer an (und lege die segmentfolge an)
nein: dann mach anzeige zehner an (und lege deren segmentfolge an)
}
mach anderes Zeug (Tasten abfragen etc...)
gehe nach oben und wiederhole.
}
JK
Jürgen K. schrieb: >>>Wie könnte ich es lösen,dass dauernd hin und hergeschaltet wird (OHNE TIMER,auch > wenns schwachsinn ist!) > > indem du das nicht nur 1 mal machst sondern unendlich, in einer > Schleife... > > schleife unendliche > { > ist anzeige "zehner" an > { > ja: dann mach anzeige einer an (und lege die segmentfolge an) > > nein: dann mach anzeige zehner an (und lege deren segmentfolge an) > } > > mach anderes Zeug (Tasten abfragen etc...) > > gehe nach oben und wiederhole. > > } > > > JK also eins kann nicht stimmen (aus meiner sicht) Wenn Anzeige zehner an ist soll er einer auch anmachen und die segmentfolge anlegen. Das hat doch doch dann zu Folge,(da zehner immernoch an ist),dass die 2stellige 7segment 2 mal dieselbe ziffer anzeigen würde,z.B. '1 1'. Die zweistellige 7segment ist ja an einem Port angelegt
Natürlich soll die andere Stelle ausgeschaltet und vor dem Einschalten das neue Muster angelegt werden. Das ist nur Pseudocode und ein bisschen Transferleistung gehört dazu. Mach erstmal was anderes, um den Kopf frei zu bekommen. Ich habe das Gefühl, du bist jetzt komplett verwirrt. ;-) Und nicht verzweifeln. Sowas kann jedem passieren.
Was ich hier sehe, sehe ich auch bei meinen Azubis. Die sollen irgendwas machen, was 1. in der Realität ganz anders zu machen ist und 2. die Pauker ebenfalls keinen Schimmer haben, wie was zu lösen ist. Ich wette, der Pauker versteht den Timer auch nicht. Im übrigen stellt man wieder fest, dass die Schöler kein English können, obwohl es unterrichtet wird. Armes Deutschland. Im Rahmen eines Ausbildungsprojektes haben wir ein Thermometer mit einer Uhr gebaut, wenn man es den Leuten in Mundgerechte Happen schneidet und verständlich erklärt, gibts keine Probleme. Jedoch schaffen die meisten Pauker nicht, weil sie eh keine Lust haben und fachlich selber Pfeifen sind.
aber Diese 'Schleifen' kann ich ja doch dann nur in C programmieren,aber nicht mit Assembler,oder? Und wie ich ja bereits geschrieben hatte (Trz. Danke an Jobstens-de),muss ich das (es wäre mir lieber) ohne Timer realisieren.
LoTTo schrieb: > aber Diese 'Schleifen' kann ich ja doch dann nur in C programmieren,aber > nicht mit Assembler,oder? Schleifen, (bedingte) Abfragen, Zuweisungen: Das sind alles die "Grundbausteine" von Algorithmen, egal ob die in C, Assembler, oder in "Pseudocode" geschrieben sind. der Unterschied besteht bei der zuvor genannten Schleifenanweisung lediglich darin, daß bei einer "Endlos-Schleife" keine Abbruch-Bedingung vorkommt (welche man überprüfen muß) wiederhole (unendlich lange bis zum jüngsten Tag) { mache irgendwas } bzw. wiederhole (bis irgendwas zutrifft>) { mache irgendwas } Du siehst? Im 2. Falle gibt es eine "Schleifenbedingung" , z.B. daß eine Variable einen bestimmten Wert haben muß. In Assembler würde das "springen" auf den Schleifenanfang mit irgendeiner Jump-Instruktion abgebildet werden, welche dir an den Schleifenanfang hüpft. In C gibt es zwar auch etwas vergleichbares ("goto"), das ist aber zum Einen verpönt, zum Anderen auch gar nicht notwendig, sowas macht der Compiler für dich.
LoTTo schrieb: > aber Diese 'Schleifen' kann ich ja doch dann nur in C programmieren,aber > nicht mit Assembler,oder? Hat Euch der Lehrer das auch nicht beigebracht?
1 | loop: |
2 | hier kommt der andere Krempel hin, den Du erledigen musst. |
3 | Dazu gehört NICHT warten! |
4 | Entweder Du veränderst zahl_einer und zahl_zehner oder Du lässt es bleiben |
5 | |
6 | |
7 | ; das hier kennst Du schon ... |
8 | |
9 | MOV A, switch |
10 | ADD A, #128 ; bei jedem 2. Mal Carry erzeugen |
11 | MOV switch, A |
12 | |
13 | JC zehner ; und deshalb bei jedem 2. Mal abbiegen |
14 | |
15 | CLR P3.2 ; Zehner Segment abschalten |
16 | MOV P1, zahl_einer ; Einerdaten an Port anlegen |
17 | SETB P3.3 ; Einer Segment einschalten |
18 | |
19 | JMP irq_fertig ; Bis zum nächsten mal werden die Einer angezeigt |
20 | |
21 | zehner: CLR P3.3 ; Einer Segment abschalten |
22 | MOV P1, zahl_zehner ; Zehnerdaten an Port anlegen |
23 | SETB P3.2 ; Zehner Segment einschalten |
24 | |
25 | JMP loop |
Eieiei ... Gruß Jobst
Hi Ich versteh auch manchmal die Welt nicht mehr... >aber Diese 'Schleifen' kann ich ja doch dann nur in C programmieren,aber >nicht mit Assembler,oder? Jedes Programm ist eine Schleife, ob du willst oder nicht. Betrachte ein Programm wie einen Ring, zum Beispiel eine Eisdenbahn. Ganz einfach ist da ein Oval mit einem Punkt zum Ein- und Aussteigen. Damit es interessanter wird, kommen Weichen hinzu. Der Ring aber bleibt und wenn du nach HAmburg in die Miniaturwelt fährst... auch das sind alles Schleifen, wo die Züge fahren. Genau so funktioniert ein Programm und damit es "deine" Schleife wird, setzt du in deinem Programm irgendwo ein "JMP Loop". Wenn du es nicht so programmierst, dann läuft dein Controller mit seinem Programmcounter oder Befehlszeiger an die Grenzen seines Speichers und fängt danach wieder mit Adresse "0" an. Diese Kleinigkeit eines Programmes sollte euch aber doch im Unterricht beigebogen worden sein. Ansonsten ist jede Mühe hier vergeblich. Die Arbeiten oder Aufgaben in dieser Schleife sind "Erfassen von Informationen", "Verarbeiten dieser Informationen" und "Ausgeben von Ergebnissen". Dreimal darfst du raten, wie diese drei Aufgaben in der Schleife verteilt sind. Nun zum Multiplexen. Die Kunst ist nicht, die gemeinsame Anode oder Kathode einer 7-Segmentanzeige ein- oder auszuschalten, sondern auch die jeweilige Information entsprechend auf die Segmente zu schalten. Angenommen, du hast zwei Speicherzellen. In einer steht eine "3" und in der anderen eine "7" . Das soll der Zahl "37" entsprechen. Nun geht man wie folgt vor: Zuerst den gemeinsamen Anschluss aller Anzeigen abschalten. Dann die Zahl aus der folgenden Speicherzelle in einen Akku laden und an die parallel geschalteten Segmente codieren. Danach die nächste Anzeigenstelle aktivieren und den Gemeinsamen der Ziffer einschalten. Nun kommt eine kleine Zeitverzögerung, damit die Anzeige auch etwas darstellen kann, sprich die LED's sollen auch ein wenig leuchten. Dann beginnt der Vorgang von vorn. Die Codierung der Ziffern kannst du in einem Array entsprechend 0 bis 9 hinterlegen. Zur Ausgabe lädst du in einem Register die Basisadresse dieses Arrays. Addierst den Wert der anzuzeigen ist und holst den entsprechenden Code dazu. Dieser wird dann auf die Anzeigesegmente geschaltet. Hört sich kompliziert an und das ist es auch, wenn mann noch nicht einmal die Programmschleife kapiert hat. Ich fürchte, dein Lottozahlengenerator wird nix, es sei denn einer erbarmt sich deiner und liefert den Code. Ich hab dir bereits in einem Post geschrieben, das du dir erst einmal Gedanken machen sollst, welche Programmblöcke in deiner Aufgabe enthalten sind. Letztendlich werden diese dann einfach in deine Programmschleife eingefügt, ähnlich der Weichen in einem Gleisoval. Vielleicht verstehst du jetzt ein wenig, warum einige Antworten so negativ zu den Lehrkräften ausfallen. Auch mir erscheint es so, das sie euch völlig nackt zum Skifahren schicken...... Gruß oldmax
oldmax schrieb: > Ich hab dir bereits in einem Post geschrieben, das du > dir erst einmal Gedanken machen sollst, welche Programmblöcke in deiner > Aufgabe enthalten sind. So isses! Es nützt garnichts, wenn man sich erstmal in das Multiplexen verbeißt. Denn für die nächsten Aufgaben mußt Du es immer wieder auseinander reißen. Du mußt die einzelnen Teilaufgaben beschreiben (in Worten) und dann erst kannst Du sie auch implementieren (Code). Diese werden dann in der Mainlopp hintereinander aufgerufen. Das Beschreiben in Worten hat auch den Vorteil, daß jemand leicht helfen kann, wenn etwas falsch ist, bevor Du umsonst Mühe aufgewendet hast, Code zu schreiben. In Text lassen sich Deine Fehler viel leichter sehen, als in Code. Warum hier geraten wird, erstmal den Timerinterrupt zu lernen, hat einen einfachen Grund. Als Anfänger hast Du 0 Ahnung, wie lange einzelne Funktionen brauchen. Braucht Deine Mainloop zu lange, flackert die Anzeige. Braucht sie zu schnell, ist die Anzeige zu dunkel, bzw. Du kriegst Geister-Digits angezeigt. Der Timer ist daher ideal, um definierte Zeitabläufe zu schaffen. Und als Interrupt entkoppelt er das Multiplexen von der Mainloop. Es ist dann völlig egal, wie lange die Mainloop dauert. Die Mainloop braucht auf das Multiplexen keinerlei Rücksicht zu nehmen. Peter
sag mal LoTTo, wie kann dein Programm eigentlich schon fast "ferig" sein wenn du keine Schleifen kennst!? Mich dolcht du hast nichts. Wo ist denn das P _Anfang mach dies mach das mach noch mehr gehe zu _Anfang !? Ich verstehe es nicht - was ist denn nun das Problem? Beim Muxing von 2 Stellen musst du doch nur gucken welche an ist und immer die andere einschalten nachdem du die eine ausgeschaltet hast und entsprechendes Muster anlegen - ist doch kein Geheimnis....? JK.
hab das multiplexen geschafft. multiplex: MOV A,R6 MOVC A,@A+DPTR MOV P2,A SETB AnzZ ;Call Zeit CLR AnzZ MOV A,R5 MOVC A,@A+DPTR MOV P2,A SETB AnzE ;CALL Zeit CLR AnzE JNB Taster,multiplex funzt perfekt,habs schon ausprobiert ;)
LoTTo schrieb: > hab das multiplexen geschafft. Prima, dann fehlen Dir ja nur noch die restlichen 95% der Aufgabe. LoTTo schrieb: > funzt perfekt,habs schon ausprobiert ;) Nur weil Du eine Teilaufgabe ausprobiert hast, ist noch lange nichts perfekt. Einige Kritikpunkte: 1. Du vertraust darauf, daß 4 Register ihren Wert behalten. Besser, Du nimmst Variablen (RAM) dafür. Das erhöht die Übersicht, verbessert die Lesbarkeit und vermeidet push/pop-Arien. 2. Warum jedesmal neu die Umwandlung in 7-Segement? Machs doch gleich beim Zerlegen der Zahl. 3. Es ist nicht verboten, Code zu kommentieren. Im Gegenteil, Du solltest es. Es hilft vorallem Dir selbst. Peter
nein,mir fehlen nicht 95% der aufgabe... ich muss jetzt nur noch das mit den DIP-Schaltern machen und dann bin ich fertig.
das mit dem Kommentieren kommt natürlich noch,hier ging es doch nur darum,wie ich das mit dem Multiplexen und den DIP-Schaltern realisiere .. Lesen und dann meckern!
LoTTo schrieb: > nein,mir fehlen nicht 95% der aufgabe... Der Eindruck entsteht aber, wenn man mal die Aufgabenstellung mit dem vergleicht, was Du uns bisher gezeigt hast. Möchtest Du uns das gesamte Programm zeigen? In der Regel läßt sich viel besser helfen, wenn man ein komplettes Programm sieht und nicht nur kleine Schnipselchen davon. Soll das Programm auch praktisch funktionieren oder nur im Simulator den Eindruck erwecken? In der Praxis muß man nämlich die Tasten entprellen. Peter
Peter Dannegger schrieb: > In der Praxis muß man nämlich die Tasten entprellen. Tasten ja, Dip-Schalter eigentlich nicht.
Sam .. schrieb: > Tasten ja, Dip-Schalter eigentlich nicht. Eigentlich. Wenn man sie bestimmungsgemäß als Kodier- oder Konfigurationsschalter benutzt. Er will/soll sie aber wie richtige Schalter einsetzen. Dazu kommt dann das Problem, daß man mit seinen Wurstfingern immer die beiden daneben liegenden Schalter mitbetätigt, ohne daß diese auch einrasten oder vielleicht doch der eine oder andere. Muss alles berücksichtigt werden, damit der Controller nicht ausrastet. Peda liegt da mit seiner Einschätzung von 5% schon ganz richtig. Vielleicht sind es auch 10%. Aber der Drops ist noch lange nicht gelutscht. mfg.
Sam .. schrieb: > Tasten ja, Dip-Schalter eigentlich nicht. Ich hab die Aufgabe so verstanden, daß ein Taster vorhanden ist, den man 6* drückt, um 6 verschiedene Lottozahlen zu erzeugen. Wenn man den nicht entprellt, können z.B. bei einem Druck 2 oder mehr aufeinander folgende Zahlen gespeichert werden. Peter
so hab nun alle Probleme ALLEINE gelöst,trz danke an diejenigen unter euch,die sinnvolle beiträge von sich gaben.
retnox schrieb: > so hab nun alle Probleme ALLEINE gelöst,trz danke an diejenigen unter > euch,die sinnvolle beiträge von sich gaben. Darum ging es ja auch! Hätten wir Dir eine fertige Lösung vor die Füße geschmissen, hättest Du nichts dabei gelernt. Ich denke schon, daß Dir der ein oder andere Beitrag erheblich weiter geholfen hat, daher finde ich 'alleine' etwas übertrieben. Naja ... Gruß Jobst
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.