C-Script sieht den Wald vor lauter Bäumen nicht

OP #764346
Lesenswert?

Hallo Zusammen

Hab ein problem mit meinem script. Eigentlich sollte es die I/O-Ports 
zufällig high beziehungsweis low stellen. meiner meinung nach sollte das 
so funktionieren.
1
#include <avr/io.h> //Controllerspezifikationenen
2
#include <stdlib.h> //Standard Library
3
#ifndef F_CPU
4
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
5
#define F_CPU 3686400UL // Quarz mit 3.6864 Mhz
6
#endif
7
#include <util/delay.h> //Verz�gerungen max 71ms -->262.14/3.6864
8
//-------------------------------------------------------------------------
9
int main(void)
10
{
11
  int i;
12
  int switchtime=12000;// ms/10
13
  int daytime=30000;// ms/10
14
  int nighttime=30000;// ms/10
15
  int now;
16
  DDRA=0b11111111;
17
  DDRB=0b11111111;
18
  DDRC=0b11111111;
19
  DDRD=0b11111111;
20
  //Tag-Nacht-Schleife
21
  while(1)
22
  {
23
    int remaining[32];// 32 Lichter
24
    //Nacht
25
    for(i=0;i<nighttime;i++)
26
    {
27
      _delay_ms(10);
28
    }
29
    //�bergang
30
    // f�r jedes Licht mal eine zuf�llig Zeitdauer festlegen
31
    srand(remaining[10]);
32
    for(i=0;i<32;i++)
33
    {
34
      remaining[i] = rand()%switchtime;
35
    }
36
    for(now=0;now<switchtime;now++)
37
    {
38
      for(i=0;i<8;i++)// alle am Port A
39
      {
40
        if(remaining[i]==now)
41
        {
42
              PORTA|=(1<<i);
43
        }
44
          }
45
      for(i=0;i<8;i++)// alle am Port B
46
      {
47
        if(remaining[i+8]==now)
48
        {
49
              PORTB|=(1<<i);
50
        }
51
      }
52
      for(i=0;i<8;i++)// alle am Port C
53
      {
54
        if(remaining[i+16]==now)
55
        {
56
          PORTC|=(1<<i);
57
        }
58
      }
59
      for(i=0;i<8;i++)// alle am Port D
60
      {
61
        if(remaining[i+24]==now)
62
        {
63
          PORTD|=(1<<i);
64
        }
65
      }
66
    _delay_ms(10);
67
    }
68
    //Tag
69
    for(i=0;i<daytime;i++)
70
    {
71
      _delay_ms(10);
72
    }
73
    //�bergang
74
    // f�r jedes Licht mal eine zuf�llig Zeitdauer festlegen
75
    for(i=0;i<32;i++)
76
    {
77
      remaining[i] = rand()%(switchtime+1);
78
    }
79
    for(now=0;now<switchtime;now++)
80
    {
81
      for(i=0;i<8;i++)// alle am Port A
82
      {
83
        if(remaining[i]==now)
84
        {
85
              PORTA|=(0<<i);
86
        }
87
          }
88
      for(i=0;i<8;i++)// alle am Port B
89
      {
90
        if(remaining[i+8]==now)
91
        {
92
              PORTB|=(0<<i);
93
        }
94
      }
95
      for(i=0;i<8;i++)// alle am Port C
96
      {
97
        if(remaining[i+16]==now)
98
        {
99
          PORTC|=(0<<i);
100
        }
101
      }
102
      for(i=0;i<8;i++)// alle am Port D
103
      {
104
        if(remaining[i+24]==now)
105
        {
106
          PORTD|=(0<<i);
107
        }
108
      }
109
    _delay_ms(10);
110
    }
111
  }
112
}

leider ist mein mikro nicht der gleichen ansicht ;-)
falls mir jemand helfen kann wär ich froh. seh den wald nämlich auch 
nicht mehr.

Gruss Christian
OP #764430
Lesenswert?

also nun sieht mein script so aus:
1
#include <avr/io.h> //Controllerspezifikationenen
2
#include <stdlib.h> //Standard Library
3
#ifndef F_CPU
4
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
5
#define F_CPU 3686400UL // Quarz mit 3.6864 Mhz
6
#endif
7
#include <util/delay.h> //Verz�gerungen max 71ms -->262.14/3.6864
8
//-------------------------------------------------------------------------
9
int main(void)
10
{
11
  int i;
12
  int switchtime=12;// ms/10
13
  int daytime=30;// ms/10
14
  int nighttime=30;// ms/10
15
  int now;
16
  DDRA=0b11111111;
17
  DDRB=0b11111111;
18
  DDRC=0b11111111;
19
  DDRD=0b11111111;
20
  //Tag-Nacht-Schleife
21
  while(1)
22
  {
23
    int remaining[32];// 32 Lichter
24
    //Nacht
25
    for(i=0;i<nighttime;i++)
26
    {
27
      _delay_ms(10);
28
    }
29
    //�bergang
30
    // f�r jedes Licht mal eine zuf�llig Zeitdauer festlegen
31
    for(i=0;i<32;i++)
32
    {
33
      remaining[i] = rand()%switchtime;
34
    }
35
    for(now=0;now<switchtime;now++)
36
    {
37
      for(i=0;i<8;i++)// alle am Port A
38
      {
39
        if(remaining[i]==now)
40
        {
41
              PORTA|=(1<<i);
42
        }
43
          }
44
      for(i=0;i<8;i++)// alle am Port B
45
      {
46
        if(remaining[i+8]==now)
47
        {
48
              PORTB|=(1<<i);
49
        }
50
      }
51
      for(i=0;i<8;i++)// alle am Port C
52
      {
53
        if(remaining[i+16]==now)
54
        {
55
          PORTC|=(1<<i);
56
        }
57
      }
58
      for(i=0;i<8;i++)// alle am Port D
59
      {
60
        if(remaining[i+24]==now)
61
        {
62
          PORTD|=(1<<i);
63
        }
64
      }
65
    _delay_ms(10);
66
    }
67
    //Tag
68
    for(i=0;i<daytime;i++)
69
    {
70
      _delay_ms(10);
71
    }
72
    //�bergang
73
    // f�r jedes Licht mal eine zuf�llig Zeitdauer festlegen
74
    for(i=0;i<32;i++)
75
    {
76
      remaining[i] = rand()%(switchtime+1);
77
    }
78
    for(now=0;now<switchtime;now++)
79
    {
80
      for(i=0;i<8;i++)// alle am Port A
81
      {
82
        if(remaining[i]==now)
83
        {
84
            PORTA&=~(1<<i);
85
        }
86
       }
87
      for(i=0;i<8;i++)// alle am Port B
88
      {
89
        if(remaining[i+8]==now)
90
        {
91
            PORTB&=~(1<<i);
92
        }
93
      }
94
      for(i=0;i<8;i++)// alle am Port C
95
      {
96
        if(remaining[i+16]==now)
97
        {
98
          PORTC&=~(1<<i);
99
        }
100
      }
101
      for(i=0;i<8;i++)// alle am Port D
102
      {
103
        if(remaining[i+24]==now)
104
        {
105
          PORTD&=~(1<<i);
106
        }
107
      }
108
    _delay_ms(10);
109
    }
110
  }
111
}
#764434
Lesenswert?

Das sieht erst mal beim drüber lesen nicht so schlecht aus.
Was muss ich mir unter 'funktioniert nicht' vorstellen.
Geht der erste Teil, sprich alle Led nacheinander an?

PS: Das was du da hast nennt man ein Programm und kein Skript.
Der Begriff 'Skript' wird bei interpretierender Programmierung
benutzt.
OP #765625
Lesenswert?

Knut J. wrote:
> Na daran, das es viel zu schnell läuft..........

wieso zu schnell??? hast du da eine konkrete idee? mit dem takt un allem 
sollte doch alles stimmen? sprich
1
  int i;
2
  int switchtime=12000;// ms/10
3
  int daytime=30000;// ms/10
4
  int nighttime=30000;// ms/10

oder hab ich da einen fehler?
Gast #765669
Lesenswert?

>dan sollte trotzdem was zu sehen sein?

Hatte/habe keinen Bock, so genau hinzuschauen  ;-)......
Mach das delay doch einfach mal länger, dann siehst du, was ab geht
Ach ja, Optimierung ist an?! Taktfrequenz stimmt (Fuses)?!
Gast #765830
Lesenswert?

Nachtrag: ich mag diese ständigen Hinweise dieser Art hier im Forum 
eigentlich auch nicht, aber für solche Fragen könntest du ruhig mal die 
Suche hier im Forum bzw. die Doku zu AVR-Studio bemühen.......;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren