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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.