Forum: Mikrocontroller und Digitale Elektronik Anfängercode, alle 3 Minuten ein anderer Pin auf High


von Fl K. (fkhm)


Lesenswert?

Hallo, ich versuche meinen Vater ein wenig bei seiner Modelleisenbahn zu 
unterstützen. Gesteuert werden sollen gewisse Sachen wie 
Straßenbeleuchtung, besondere Gebäude einzeln, Hausbeleuchtung, 
Bahnübergänge etc.
Dafür hatte ich an einen "Haupt-µC" gedacht, der jede simulierte Stunde 
(3 Minuten) einen anderen Pin auf HIGH schaltet.

Dafür dann den Mega16 und folgender Code, könnt ihr dort mal rüber 
schauen ob er so richtig ist.

Es sollen dann noch ein paar kleinere µCs kommen, Attiny2313 z.B.. Dort 
ist dann ein Pin der Eingang und an den passenden Pin an der "Uhr" 
angeschlossen. Wenn es also 19 Uhr ist, bekommt dann der µC für die 
Straßenbeleuchtung ein Signal und schaltet über ein Relais die 
Straßenbeleuchtung für 2160 Sekunden (12 simulierte Stunden = 36 
Minuten) an.
1
$regfile = "M16def.dat"
2
$crystal = 1000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
7
8
'Stunde1 an PA0
9
Stunde1 Alias Porta.0
10
Config Stunde1 = Output
11
12
'Stunde2 an PA1
13
Stunde2 Alias Porta.1
14
Config Stunde2 = Output
15
16
'Stunde3 an PA2
17
Stunde3 Alias Porta.2
18
Config Stunde3 = Output
19
20
'Stunde4 an PA3
21
Stunde4 Alias Porta.3
22
Config Stunde4 = Output
23
24
'Stunde5 an PA4
25
Stunde5 Alias Porta.4
26
Config Stunde5 = Output
27
28
'Stunde6 an PA5
29
Stunde6 Alias Porta.5
30
Config Stunde6 = Output
31
32
'Stunde7 an PA6
33
Stunde7 Alias Porta.6
34
Config Stunde7 = Output
35
36
'Stunde8 an PA7
37
Stunde8 Alias Porta.7
38
Config Stunde8 = Output
39
40
'Stunde9 an PB0
41
Stunde9 Alias Portb.0
42
Config Stunde9 = Output
43
44
'Stunde10 an PB1
45
Stunde10 Alias Portb.1
46
Config Stunde10 = Output
47
48
'Stunde11 an PB2
49
Stunde11 Alias Portb.2
50
Config Stunde11 = Output
51
52
'Stunde12 an PB3
53
Stunde12 Alias Portb.3
54
Config Stunde12 = Output
55
56
'Stunde13 an PB4
57
Stunde13 Alias Portb.4
58
Config Stunde13 = Output
59
60
'Stunde14 an PB5
61
Stunde14 Alias Portb.5
62
Config Stunde14 = Output
63
64
'Stunde15 an PB6
65
Stunde15 Alias Portb.6
66
Config Stunde15 = Output
67
68
'Stunde16 an PB7
69
Stunde16 Alias Portb.7
70
Config Stunde16 = Output
71
72
'Stunde17 an PC0
73
Stunde17 Alias Portc.0
74
Config Stunde17 = Output
75
76
'Stunde18 an PC1
77
Stunde18 Alias Portc.1
78
Config Stunde18 = Output
79
80
'Stunde19 an PC2
81
Stunde19 Alias Portc.2
82
Config Stunde19 = Output
83
84
'Stunde20 an PC3
85
Stunde20 Alias Portc.3
86
Config Stunde20 = Output
87
88
'Stunde21 an PC4
89
Stunde21 Alias Portc.4
90
Config Stunde21 = Output
91
92
'Stunde22 an PC5
93
Stunde22 Alias Portc.5
94
Config Stunde22 = Output
95
96
'Stunde23 an PC6
97
Stunde23 Alias Portc.6
98
Config Stunde23 = Output
99
100
'Stunde24 an PC7
101
Stunde24 Alias Portc.7
102
Config Stunde24 = Output
103
104
Do
105
106
  Stunde1 = 1
107
  Wait 180
108
  Stunde1 = 0
109
  Stunde2 = 1
110
  Wait 180
111
  Stunde2 = 0
112
  Stunde3 = 1
113
  Wait 180
114
  Stunde3 = 0
115
  Stunde4 = 1
116
  Wait 180
117
  Stunde4 = 0
118
  Stunde5 = 1
119
  Wait 180
120
  Stunde5 = 0
121
  Stunde6 = 1
122
  Wait 180
123
  Stunde6 = 0
124
  Stunde7 = 1
125
  Wait 180
126
  Stunde7 = 0
127
  Stunde8 = 1
128
  Wait 180
129
  Stunde8 = 0
130
  Stunde9 = 1
131
  Wait 180
132
  Stunde9 = 0
133
  Stunde10 = 1
134
  Wait 180
135
  Stunde10 = 0
136
  Stunde11 = 1
137
  Wait 180
138
  Stunde11 = 0
139
  Stunde12 = 1
140
  Wait 180
141
  Stunde12 = 0
142
  Stunde13 = 1
143
  Wait 180
144
  Stunde13 = 0
145
  Stunde14 = 1
146
  Wait 180
147
  Stunde14 = 0
148
  Stunde15 = 1
149
  Wait 180
150
  Stunde15 = 0
151
  Stunde16 = 1
152
  Wait 180
153
  Stunde16 = 0
154
  Stunde17 = 1
155
  Wait 180
156
  Stunde17 = 0
157
  Stunde18 = 1
158
  Wait 180
159
  Stunde18 = 0
160
  Stunde19 = 1
161
  Wait 180
162
  Stunde19 = 0
163
  Stunde20 = 1
164
  Wait 180
165
  Stunde20 = 0
166
  Stunde21 = 1
167
  Wait 180
168
  Stunde21 = 0
169
  Stunde22 = 1
170
  Wait 180
171
  Stunde22 = 0
172
  Stunde23 = 1
173
  Wait 180
174
  Stunde23 = 0
175
  Stunde24 = 1
176
  Wait 180
177
  Stunde24 = 0
178
179
Loop
180
181
End

Habe noch schnell einen Code für die Straßenbeleuchtung geschrieben, die 
über 6 Relais geschaltet wird.
1
$regfile = "XXX.dat"
2
$crystal = 1000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
7
8
'Relais1 an PB0
9
Relais1 Alias Portb.0
10
Config Relais1 = Output
11
12
'Relais2 an PB1
13
Relais2 Alias Portb.1
14
Config Relais2 = Output
15
16
'Relais3 an PB2
17
Relais3 Alias Portb.2
18
Config Relais3 = Output
19
20
'Relais4 an PB3
21
Relais4 Alias Portb.3
22
Config Relais4 = Output
23
24
'Relais5 an PB4
25
Relais5 Alias Portb.4
26
Config Relais5 = Output
27
28
'Relais6 an PB5
29
Relais6 Alias Portb.5
30
Config Relais6 = Output
31
32
'Stunde18 an PA1
33
Stunde18 Alias Pina.1
34
Config Stunde18 = Input
35
'falls benötigt Porta.1 = 1       'PullUp-Widerstand einschalten
36
37
Do
38
39
   If Stunde18 = 1 Then
40
      Relais1 = 1
41
      Relais2 = 1
42
      Relais3 = 1
43
      Relais4 = 1
44
      Relais5 = 1
45
      Relais6 = 1
46
      Wait 2160
47
      Relais1 = 0
48
      Relais2 = 0
49
      Relais3 = 0
50
      Relais4 = 0
51
      Relais5 = 0
52
      Relais6 = 0
53
   Else
54
      Relais1 = 0
55
      Relais2 = 0
56
      Relais3 = 0
57
  Relais4 = 0
58
  Relais5 = 0
59
  Relais6 = 0
60
   End If
61
Loop
62
63
64
End

Hier bin ich mir aber unsicher wie das mit dem Wait in der IF schleife 
ist

Programmierfreudige Grüße,
Flo

von Karl H. (kbuchegg)


Lesenswert?

Fl KHM schrieb:

> Dafür dann den Mega16 und folgender Code, könnt ihr dort mal rüber
> schauen ob er so richtig ist.

Brenn den Müll in einen Mega16 und lass ihn laufen. Dann weisst du es.
Mehr Mut zum selber Testen!


(PS: Zum Testen kann man die 3 Minuten auch auf 3 Sekunden kürzen. Dann 
sitzt man nicht die halbe Nacht für einen Durchgang)

von Peter II (Gast)


Lesenswert?

Fl KHM schrieb:
> Dafür dann den Mega16 und folgender Code, könnt ihr dort mal rüber
> schauen ob er so richtig ist.

naja, der code ist einfach jetzt schon nicht mehr sinnvoll zu lesen, was 
soll das erst nach ein paar Erweiterungen werden?

Beschäftige dich erst mal mit Schleifen, dann bekommt man das viel 
einfacher hin.

Und mehre µC dafür zu nehmen, ist auch nicht wirklich sinnvoll. Häng 
lieber ein paar Port-Erweiterungen an den Mega und lass alles über ihn 
laufen. Das ist die Software erst mal einfacher und du musst auch nur 
ein Controller updaten.

von Fl K. (fkhm)


Lesenswert?

Also mit einer Schleife, darauf hätte ich auhc vorher kommen können,
ich weiß nur nicht ob er das i in dieser Schleife auch hochzählt.
Vorher natürlich noch wie oben alle Ports definieren.
1
Dim i as Byte
2
3
Do
4
5
i = 0
6
i = i + 1
7
8
For i = 1 To 24 Step 1
9
10
  Stundei = 1
11
  Wait 180
12
  Stundei = 0
13
14
Next i
15
16
Loop
17
End

Die Idee mit mehreren µCs (ATtiny13) beruht darauf, dass ca. 500 Leds in 
den Häusern nach Zufall eingeschaltet werden sollen, im Zeitraum von 18 
bis 7 Uhr.

Und immer ein kleiner Code der auf einem µC läuft ist doch auch einfach 
zu warten, sind ja keine großen Sachen. Das mit den HC595 
Schieberegistern ist aber eine gute Sache, damit kann man gleiche Sachen 
doch einfach über einen µC steuern.

von Fl K. (fkhm)


Lesenswert?

Noch eine zusätzliche Frage, bei dem Code:
1
if Eingang19Uhr = 1 //Straßenbeleuchtung/Bahnsteigbeleuchtung ein
2
  Relais1 = 1
3
  Wait 1
4
  Relais2 = 1
5
  Wait 1
6
  Relais3 = 1
7
  Wait 1
8
  Relais4 = 1
9
  Wait 1
10
  Relais5 = 1
11
  Wait 1
12
13
endif
14
if Eingang7Uhr = 1 //Straßenbeleuchtung/Bahnsteigbeleuchtung aus
15
  Relais1 = 0
16
  Wait 1
17
  Relais2 = 0
18
  Wait 1
19
  Relais3 = 0
20
  Wait 1
21
  Relais4 = 0
22
  Wait 1
23
  Relais5 = 0
24
  Wait 1
25
endif

Dann würde er ja immer eine Sekunde warten. Kann man das evtl. auch mit 
einem Timer lösen, so dass die weiteren Befehle ausgeführt werden?

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.