Forum: Mikrocontroller und Digitale Elektronik AtMega16 - HILFE


von Turan S. (Firma: ----------) (turan)


Lesenswert?

Hallo, ich hoffe jemand kann mir helfen, folgende Problemstellung:

Schreiben Sie ein Programm, das eine zufällige 8-stellige 
Zahlenkombination auf den LEDs
anzeigt (es soll immer nur ein LED leuchten). Danach soll der Benutzer 
das Muster mit den
Buttons nachdrücken. Ist das Muster korrekt, soll „Night Rider“ aus der 
letzten Hausübung
angezeigt werden und das Programm ist beendet. Ist eine Zahl falsch, 
soll das Muster noch
einmal abgespielt werden und der Benutzer erhält einen neuen Versuch 
(muss aber wieder
ganz vorne beginnen). Verwenden Sie keine Interrupts.

Bin Anfänger!, Wir verwenden AtMega16

Habe die Sache mit AVR-Studio simulieren versucht leider vergebens...

Vielen Dank für Unterstüzung im Voraus...(Verzweifele schon ahh.)





1
/*
2
 * Created: 13.01.2012 20:44:45
3
 */ 
4
5
#include <avr/io.h> 
6
#include <util/delay.h>
7
#include <stdlib.h>
8
9
int main (void) {
10
  
11
  int led [8];    //8 LED's sollen mit Zufallszahlen angezeigt werden.
12
  
13
  int i,x;      //Variablen für for-schleifen
14
    
15
  DDRA = 0xFF;    //setzt PORTA auf "Schreiben"
16
  
17
  DDRB = 0x00;    //setzt PORTB auf "Lesen"
18
  
19
  PORTB = 0xFF;    //aktiviere Pull-Up Widerstände
20
  
21
  PORTA = 0x00;    // Startwert in hex!
22
  
23
    for (i=0;i<=8;i++){  //8 Zufallszahlen sollen erstellt werden!
24
  
25
      led[i]  = (uint8_t)((double)rand()/((double)RAND_MAX+1)*8); //generieren von Zufallszahlen bis 8
26
      
27
      PORTA = led [i];  //PORTA wird mit dem jeweiligen Feldkomponente ausgegeben!
28
      
29
      _delay_ms(50);
30
      
31
      PORTA = 0x00;
32
    
33
    }//for
34
      
35
      i=0; PINB = 0xFF;
36
      
37
      while (PORTA != PINB){ //Abfrage mit den Buttons und überprüfen von Feldkomponenten!
38
                        
39
        if (PINB = led[i]) {
40
        
41
         PORTA = PINB;
42
         
43
         _delay_ms(50);
44
         
45
           
46
         i++;
47
          
48
        }else{
49
          
50
          for (x=0;x<=3;x++){ //3 Mal blinken das man falschen Button gedrückt hat!
51
52
          PORTA = 0b11111111;
53
          
54
          _delay_ms(100);
55
          
56
          PORTA = 0x00;
57
          
58
          _delay_ms(100);
59
          
60
          }//for
61
        
62
        }//else        
63
                              
64
          for (i=0;i<=8;i++){  //8 Zufallszahlen sollen erstellt werden!
65
  
66
            led[i]  = (uint8_t)((double)rand()/((double)RAND_MAX+1)*8); //generieren von Zufallszahlen bis 8
67
      
68
            PORTA = led [i];  //PORTA wird mit dem jeweiligen Feldkomponente ausgegeben!
69
      
70
            _delay_ms(150);
71
      
72
            PORTA = 0x00;
73
          }//for
74
          
75
      }//while                
76
    
77
          
78
  return 0;
79
}//main

von Oberlehrer (Gast)


Lesenswert?

Wenn Du konkrete Fragen stellst, dann bekommtst Du Antworten darauf.
Aber Deine Hausarbeit wird hier niemand für Dich machen.

von Ernst B. (puravida)


Lesenswert?

1
int led [8];    //8 LED's sollen mit Zufallszahlen angezeigt werden.
2
  
3
  int i,x;      //Variablen für for-schleifen
4
    
5
  DDRA = 0xFF;    //setzt PORTA auf "Schreiben"
6
  
7
  DDRB = 0x00;    //setzt PORTB auf "Lesen"
8
  
9
  PORTB = 0xFF;    //aktiviere Pull-Up Widerstände
10
  
11
  PORTA = 0x00;    // Startwert in hex!
12
  
13
    for (i=0;i<=8;i++){  //8 Zufallszahlen sollen erstellt werden!

0 bis inkl. 8 sind 9 Zahlen.

von Maik M. (myco)


Lesenswert?

Beim überfliegen ist mir folgende Zeile aufgefallen, weil ich den Fehler 
öfter selbst mache (weil ich zuviel mit Pascal/Delphi zu tun habe)
1
if (PINB = led[i]) {...

das versteht man bei C/C++ als Zuweisung, du musst bei solchen 
Vergleichen 2 Gleichheitszeichen verwenden.... also so:
1
if (PINB == led[i]) {...

von Turan S. (Firma: ----------) (turan)


Lesenswert?

Danke für die "Hilfe" ! Ich möchte keine ewigen Diskussionen losstarten. 
Die Hausübung habe ich, so glaube ich, als ANFÄNGER gelöst zu haben.
Da ich keine Mikrokontroller zu Verfügung habe, kann ich sie nicht 
überprüfen.
Ich glaube ich habe nirgends geschrieben das ich von jemanden eine 
Lösung verlange oder ?

Der nächste bitte....

von Oliver J. (skriptkiddy)


Lesenswert?

Turan Solmaz schrieb:
> led[i]  = (uint8_t)((double)rand()/((double)RAND_MAX+1)*8); //generieren von 
Zufallszahlen bis 8

Du wirst immer wieder die selben Zufallszahlen haben[1].

[1]Zufallszahlen

Gruß Oliver

von Klaus W. (mfgkw)


Lesenswert?

Turan Solmaz schrieb:
> Die Hausübung habe ich, so glaube ich, als ANFÄNGER gelöst zu haben.
> Da ich keine Mikrokontroller zu Verfügung habe, kann ich sie nicht
> überprüfen.

Im Ernst: du programmierst für einen AVR und hast keinen?

von Krapao (Gast)


Lesenswert?

Dein Lehrer/Betreuer will euch die Bitmanipulation beibringen.

Statt die 8 Werte speicherraubend in einem Feld von 8 int Werten 
abzuspeichern, kann man die viel platzsparender in 8 Bits unterbringen. 
Das verschlingt nur ein Byte statt 8 (8-Bit ints) bzw. 16 (16-Bit ints) 
bzw. 32 (32-Bit ints).

Statt 8 rand() Aufrufe kannst du dann auch einen machen und dir gleich 
einen Zufallswert zwischen 0 und 255 (=2^8 Werte) geben lassen. Die 
einzelnen Bits dieses Werts gibst du dann nacheinander d.h. in einer 
Schleife als einzelne leuchtende/dunkle LED aus.

Entsprechend verfährst du mit dem Einlesen der Tastenwerte. 
Anschliessend vergleichst du den 8-Bit LED-Zufallswert mit dem 8-Bit 
Eingabewert. Keine Schleife notwendig dafür.

von Turan S. (Firma: ----------) (turan)


Lesenswert?

Danke für die letzten zwei Meldungen ! :)

von Turan S. (Firma: ----------) (turan)


Lesenswert?

Ja RICHTIG .... Ich hoffe nach dieser Woche keinen mehr zu 
programmieren.
(=Respekt vor dem was ihr täglich machts)...

von Marc M. (macmek)


Lesenswert?

> Ich hoffe nach dieser Woche keinen mehr zu
> programmieren.

Und das werden dann die Fachleute mit Universitätsabschluss, während die 
Praktiker keinen Job mehr finden...
Kurz Auswendig gelernt, Prüfung bestanden und Abschluss in der Tasche, 
aber nix wirklich verstanden. Voller Theorie, aber teils Sachen noch nie 
gesehen...
Mikrocontroller lernen ohne Gerät, ja wie schräg ist das denn... 
kopfschüttel

von turan (Gast)


Lesenswert?

Marc Mk schrieb:
> Und das werden dann die Fachleute mit Universitätsabschluss, während die
> Praktiker keinen Job mehr finden...
> Kurz Auswendig gelernt, Prüfung bestanden und Abschluss in der Tasche,
> aber nix wirklich verstanden. Voller Theorie, aber teils Sachen noch nie
> gesehen...
> Mikrocontroller lernen ohne Gerät, ja wie schräg ist das denn...
> kopfschüttel

1.ich werde kein Fachmann und überhaupt kein Dr. im Bereich der 
Mikrokontroller, es ist eher ein Einstieg und "verstehen" dieser "Welt" 
!

2.Ich habe großen Respekt wie Macher programmieren kann, was uns den 
Alltag erleichtert bzw. sogar ermöglicht, Verständnis habe für Leute 
nicht die ihren Gegenüber und die Situation überhaupt nicht kennen und 
nicht wissen worum es geht, aber gern Philosoph spielen.

3.Unsere Studiengang ist recht jung und die Mikrocontroller wurden den 
Studenten entweder noch nicht vorgeschrieben oder konnten nicht 
verliehen werden. Jedenfalls sollte die Überprüfung doch mit dem 
AVR-Simulator doch auch möglich sein.

Immer und überall diese Weltverbesserer....Bitte haltet eurer unnötigen 
Meldungen zurück wenn ihr nicht helfen wollt...

Danke an Alle die brauchbares gemeldet haben...

kopfschüttel

von oldmax (Gast)


Lesenswert?

Hi turan
Auch wenn's nicht zum thema beiträgt, aber das muss ich mal loswerden. 
Dies ist ein Forum. Wer hier Hilfe sucht und gleich die Hausaufgabe 
reinstellt, muss sich nicht wundern, wenn entsprechende Antworten 
kommen. Der Ton, den du teilweise anschlägst, ist nicht gerade 
freundlich. Wenn du also meinst, wir warten hier nur darauf, Fragen zu 
enträtseln und dann exkt die gewünschte Antwort zu liefern, dann 
solltest du dir einen Hauslehrer / Privatlehrer leisten. Der wird dafür 
bezahlt, das er exakt die Antworten liefert, die erwünscht sind und dem 
darfst du dann auch den Mund verbieten, wenn dir die Antwort nicht 
schmeckt.
Ich für meinen Teil werde nicht mehr in die Verlegenheit kommen, unter 
einem "Vorgesetzten" ie dir arbeiten zu müssen, oder dich als Kollege 
neben mir dulden zu müssen, aber mir tun die Mitmenschen jetzt schon 
leid, die sich nicht davor drücken können.....
Sowas wie "der nächste bitte" ist wirklich aussagekräftig, was deine 
"Persönlichkeit betrifft und es wundert mich, das du darauf dann auch 
auch noch helfende Antworten bekommst. Bei mir edenfalls wäre das 
spätestens der Zeitpunkt, dir jede Hilfe zu verweigern. Vielleicht 
begreifst du dann, das du derjenige bist, der Hilfe braucht.
Gruß oldmax

von Klaus W. (mfgkw)


Lesenswert?

oldmax schrieb:
> Sowas wie "der nächste bitte" ist wirklich aussagekräftig, was deine
> "Persönlichkeit betrifft

Plus: selber nicht vorbereitet, kein Interesse zu lernen sondern nur 
Aufgabe abzugeben und eine bessere Note zu bekommen als es den eigenen 
Fähigkeiten entspricht, da stellt sich die Frage: was will er mal 
werden?

Ich hab da so einen Verdacht, aber ein echter Ing. wird es jedenfalls 
nicht.

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.