Forum: Mikrocontroller und Digitale Elektronik Programm - Bitmuster


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christoph J. (jasschr)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo Programmierer!

Ich muss für die Schule 2 Programme schreiben bis morgen, die 
nachfolgende Aufgabenstellung haben. Leider habe ich keine Ahnung wie 
man das umsetzen könnte, wäre toll wenn mir wer da weiter helfen könnte 
mit kleinen Beschreibungen neben den einzelnen Schritten!

1. Aufgabe

Grundaufgabe – Programmierbares Lauflicht:

Am Port A sollen beliebig einstellbare Bitmuster – mit einer Bitbreite 
von 7 Bit – nacheinander ablaufen. Dazu gibt es einen 
Konfigurations-Modus, in dem die anzuzeigenden Lauflichter eingestellt 
werden. Die Anzahl der Muster ist mit 5 begrenzt. Dann wird in den 
Ablaufmodus gewechselt, die eingestellten Muster werden nacheinander 
angezeigt.

• Ein Muster wird am Port B händisch angestellt

• Durch das Bit 2 am Port D (kurz PD_2) wird das Speichern des Musters 
ausgelöst. Durch die Abfolge PD_2 = 1 → PD_2 = 0 (fallende Flanke) wird 
das Muster abgespeichert.

• Hat das Bit PD_3 den Wert 1 (Taster nicht gedrückt) werden die bis 
dahin gespeicherten Muster am Port A nacheinander angezeigt.

• Hat das Bit PD_3 den Wert 0 können neue Muster eingestellt werden. 
Sind bereits 5 Muster eingegeben, wird das Bit PA_7 eingeschaltet.
Vorgabe: Die Muster werden in einem Array abgespeichert, und von dort 
auf das PA kopiert.


2. Aufgabe
Grundaufgabe – Memory -Spiel:

Am Port A wird ein zufälliges Muster ausgegeben und wird eine kurze Zeit 
angezeigt. Dann soll das Muster vom Spieler am Port L händisch 
nachgestellt werden.

• Mit dem Bit PD_2 wird durch die Abfolge PD_2 = 0 → PD_2 = 1 die 
aktuelle Eingabe am PL
bestätigt.

• Es sind maximal 5 Versuche möglich

• Wird das Muster erraten, wird das Muster „blinkend“ angezeigt 
(abwechselnd Muster und 0xFF auf PA ausgeben)

• Bei Nichterraten des Musters werden abwechselnd die Muster 0xAA und 
0x55 angezeigt.

• Durch Bit PD_3 (Abfolge PD_3 = 0 → PD_3 = 1) wird ein neues 
Zufallsmuster kurz angezeigt.
Hinweis: Die Funktion für eine Zufallszahl heißt rand und man findet sie 
in STDLIB.H. Sie liefert eine Zahl zwischen 0 und 32767.


Vielen Dank jetzt schon für eure Hilfe!

: Verschoben durch Moderator
von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Christoph Jasser schrieb:

> Vielen Dank jetzt schon für eure Hilfe!

Ist ein bischen schwierig da sinnvoll zu helfen. Denn eigentlich sind 
beide Aufgabenstellungen nicht besonders schwer.

Den einzigen Hinweis, den ich jetzt erst mal geben würde: Leg die 
Tastatur beiseite und skizziere dir, wie das Programm aussehen sollte, 
wie die Abläufe sind. Das ganze ruhig umgangssprachlich, ohne Rücksicht 
auf eine konkrete Programmiersprache. Genau jetzt schlägt nämlich die 
Stunde von Programm Ablauf Plänen.
Nicht alles auf einmal berücksichtigen wollen, sondern in Schritten 
arbeiten. Kannst du zb in der ersten Aufgabe erst mal ein Programm 
schreiben (bzw. beschreiben), welches aus einem Array (der Länge 5) 
nacheinander 'ein Muster' auf dem Port A ausgibt?

: Bearbeitet durch Moderator
von Conny G. (conny_g)


Bewertung
0 lesenswert
nicht lesenswert
Das ist aber gemein, wenn man sowas quasi übernacht machen muss obwohl 
man vorher nichts gelernt hat, was einem dabei helfen könnte. :-)

Die Aufgabenstellung ist ziemlich präsize und Du hast doch bestimmt in 
letzter Zeit die Grundlagen dafür gelernt bekommen?
Und auch bestimmt länger Zeit als einen Tag, aber leider ist morgen 
plötzlich der Abgabetermin?

Dann würde ich als Vater meiner Kinder sie reinrasseln lassen, damit sie 
für's Leben lernen, dass man sein Zeugs rechtzeitig macht und nicht 
immer irgendjemand im letzten Moment hilft.

von PittyJ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielleicht sollten die Administrationen mal eine gesonderte Rubrik 
erzeugen, wo Leute ihre Hausaufgaben reinstellen, die sie gerne gelöst 
haben.
Dann steht das nicht mehr zwischen den wichtigen Dingen.

Und an der Thread-Ersteller: stell doch bitte die Musterlösung der 
Lehrers noch hier rein, dann sind wir für das nächste Jahr gerüstet.

von JassChr. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Es waren über 10 Aufgaben, nur bei den letzten 2 komme ich nicht mehr 
weiter :)

von nga (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ohne dass ich dich jz irgendwie blöd an machen will, aber mal kurz meine 
Meinung dazu:

Ich habe einen gewissen Bezug dazu, ich bin auch noch Schüler. Wir 
machen zwar nix mit uCs, aber (leider) wird uns Java beigebracht. Und 
bei uns gibt es auch Leute die dann vor der Stunde oder am Tag vor einer 
Schulaufgabe angerannt kommen. Aber Mann kann programmieren nicht an 
einem Tag lernen.
Ja, ich gehe davon aus, dass du darin (hoffentlich nur noch) nicht gut 
darin bist.
Mein Tipp dazu: wenn du einen einigermaßen fairen Lehrer hast, dann gehe 
zu ihm und erkläre es ihm.
Ich denke dass du Informatik nicht freiwillig gewählt hast, also sollte 
er es verstehen.
Aber einen Kritikpunkt hab ich noch: je nach dem wo du zur Schule gehst 
ist es unterschiedlich, aber wir haben seit der 9. Programmiert, und 
auch erst wenn du im ersten Jahr beim proggen bist, dann ist aber das 
Schuljahr schon fortgeschritten, das zeigt dass du es entweder nicht 
verstehst oder du im Unterricht nicht aufpasst. Dritte Möglichkeit wäre 
noch, dass ihr einen schlechten Lehrer habt, aber ich weis auch, dass 
man die schuld gerne auf den Lehrer schiebt ;)

So nun noch ein kurzer Denkanstoß:
Ablauf aufzeichnen, am besten auch Papier. Danach irgendein Pseudocode
Erst danach mal ans programmieren denke

Geht alles innerhalb einer halben Stunde

MfG
nga

von Karl H. (kbuchegg) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
JassChr. schrieb:
> Es waren über 10 Aufgaben, nur bei den letzten 2 komme ich nicht mehr
> weiter :)

Was genau bedeutet 'nicht mehr weiter'.

Wie gesagt: die AUfgaben sind nicht wirklich schwer. Sie mögen dir beim 
Durchlesen der Aufgabenstelung so vorkommen, vor allen Dingen weil sie 
recht umfangreich beschrieben sind, aber so richtig schwer sind sie 
nicht. Wenn du dich Schritt für Schritt auf Teilaspekte konzentrierst 
und dann Schritt für Schritt erweiterst, dann sind sie sogar recht 
einfach zu lösen. Hinweis: eine sinnvolle Schritt-für-Schritt 
Vorgehensweise orientiert sich nicht notwendigerweise an der Aufzählung 
der geforderten Eigenschaften in der Aufgabenstellung.
Sinnvoll ist es zum Beispiel oft, wenn man sich zuert mal um die Ausgabe 
kümmert und erst dann um die Eingaben. Denn um die Eingaben testen zu 
können muss man irgendwo Ausgaben machen. Daher fängt man gerne mit 
genau diesen an, wobei man erst mal alles weg lässt, was sich 
kompliziert anhört.
In deiner Aufgabe 1 ist es so, dass man erst mal alles weg lassen kann, 
bis auf das Array mit den Bitmustern, die Zahl 5 und das die 5 Muster 
nacheinander auf dem Port A auszugeben sind. Beispielsweise so
1
uint8_t Muster[5] = { 0b01010101,
2
                      0b11110000,
3
                      0b00001111,
4
                      0b10101010,
5
                      0b11001100
6
                    };
7
int main() 
8
{
9
  Port A auf Ausgang stellen
10
11
  i = 0;
12
13
  while( 1 ) {
14
15
    Muster[i] am Port A ausgeben
16
    i++;
17
    if( i == 5 )
18
      i = 0;
19
20
    ein wenig warten
21
  }
22
}

Daraus entwickelt man dann die weiteren geforderten Eigenschaften. Zum 
Beispiel könnte man als nächstes den Punkt
> • Hat das Bit PD_3 den Wert 1 (Taster nicht gedrückt) werden
> die bis dahin gespeicherten Muster am Port A nacheinander angezeigt.
insoweit einbauen, dass die Ausgabe nur dann läuft, wenn wie gefordert 
Bit 3 am Port D den Wert liefert. Dazu muss man natürlich wissen, was es 
da zunächste alles zu tun gibt, damit dieser Pin als Eingang fungieren 
kann und wie man so einen Pin abfrägt. Aber dann ist die Erweiterung des 
bisherigen wieder einfach.
1
uint8_t Muster[5] = { 0b01010101,
2
                      0b11110000,
3
                      0b00001111,
4
                      0b10101010,
5
                      0b11001100
6
                    };
7
int main() 
8
{
9
  Port A auf Ausgang stellen
10
11
  Port D, Pin3 auf seine Rolle als Tastereingang einstellen
12
13
  i = 0;
14
15
  while( 1 ) {
16
17
    if( Pin 3 am Port D steht nicht auf 0 ) {
18
      Muster[i] am Port A ausgeben
19
      i++;
20
      if( i == 5 )
21
        i = 0;
22
23
      ein wenig warten
24
    }
25
  }
26
}

Und so geht es sukzessive dahin. Aus den geforderten Eigenschaften sucht 
man sich die raus, die man im nächsten Schritt implementieren kann und 
um die man das Programm erweitern kann. Schritt für Schritt. Eins nach 
dem anderen.

: Bearbeitet durch Moderator
von Christoph J. (jasschr)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Karl Heinz!

Es waren 10 Aufgaben, die ersten 8 waren kein Problem, nur bei den 
letzten 2 wusste ich nicht so richtig wie ich die angehen sollte!

Auf jeden Fall hast du mir weiter geholfen!

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]
  • [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.