Forum: Mikrocontroller und Digitale Elektronik Lampe blinken lassen für eine Steuerung in Bascom (ATMega8)


von Kai (Gast)


Lesenswert?

Hi,

Ich weiß, dieses Thema gibt es schon in X verschiedenen Varianten und es 
wird auch erklärt wie man es programmiert, allerdings hab ich eine 
spezifisches Problem.

Ich bin dabei eine Steuerung für eine Werkstatt aufzubauen, mit der man 
über Möller-Schaltgeräte den Arbeitsstrom ein und ausschalten kann, das 
ganze soll vom Mega8 gesteuert werden, außerdem sollen noch mehrere 
Rauchmelder angeschlossen werden, die, wenn sie auslösen den Strom 
abschalten. Diese Melder soll man aber über einen Taster unscharf 
schalten können.

Außerdem ist noch ein Eingang für den Not-Aus gedacht, (das Schütz wird 
manuell getrennt, es geht nur noch ein 2. Signalkontakt zum µC).
Wird dieser ausgelöst soll die Kontrolleuchte (Gelb) blinken anstatt 
leuchten.

Auch soll die Kontrolleuchte für die Rauchmelder (Rot) blinken sobald 
diese deaktiviert werden.

Die Grundfunktion des ganzen funktioniert soweit prima, jetzt kommt mein 
Problem ins Spiel, ich möchte die 2 Lampen wie beschrieben blinken 
lassen, geht also nicht mit der ganz einfachen Variante mit waitms.
Ich habe mehrere Beiträge gelesen, wo beschrieben wird wie das mit dem 
Timer geht.

Allerdings funktioniert das bei mir so nicht, es wird immer nur 
beschrieben wie die LED bzw. Lampe von Haus aus schon blinkt. Ich habe 
schon versucht den Aufruf vom Timer (oder das was ich dafür gehalten 
hab) in mein unterprogramm einzubinden, das funktioniert allerdings 
nicht.

Ich bin eigentlich Anfänger in sachen AVR, die grundlegenden Dinge hab 
ich mir soweit angeeignet, aber vom Timer hab ich noch wenig bis gar 
keine Ahnung.

Hier der Code in Bascom:
1
$regfile = "m8def.dat"
2
3
$crystal = 8000000
4
5
6
Config Portc.1 = Input
7
Config Portc.2 = Input
8
Config Portc.3 = Input
9
Config Portc.4 = Input
10
Config Portc.5 = Input
11
12
13
Config Portd.0 = Output
14
Config Portd.1 = Output
15
Config Portd.2 = Output
16
Config Portd.3 = Output
17
18
19
Set Portc.1
20
Set Portc.2
21
Set Portc.3
22
Set Portc.4
23
Set Portc.5
24
25
26
Config Debounce = 30
27
28
29
Const An = 1
30
Const Aus = 0
31
32
33
Einschalten Alias Pinc.1
34
Ausschalten Alias Pinc.2
35
Rauchmelder Alias Pinc.3
36
Notaus Alias Pinc.4
37
Feuer Alias Pinc.5
38
39
40
Schuetz Alias Portd.0
41
Gelb Alias Portd.1
42
Rot Alias Portd.2
43
Alarm Alias Portd.3
44
45
Dim F As Bit
46
47
48
Goto Main
49
50
Main:
51
52
'Rauchmelder unscharf schalten
53
54
Debounce Rauchmelder , 0 , Rmtoggle , Sub
55
56
57
'Sch¸tz An/Aus
58
If Einschalten = 0 Then Goto Setzen
59
If Ausschalten = 0 Then Goto Rsetzen
60
61
62
'Not-Aus
63
If Notaus = 0 And B = 1 Then
64
Gelb = 0
65
Gelb = A
66
End If
67
68
69
'Rauchmelder-Ausgelˆst
70
If Feuer = 0 And F = 0 Then
71
Alarm = An
72
Goto Rsetzen
73
Else
74
Alarm = Aus
75
76
End If
77
78
Goto Main                                                   'loop
79
80
81
'Flip-Flop setzen
82
Setzen:
83
Schuetz = An
84
Gelb = An
85
Goto Main
86
87
'Flip-Flop zur¸cksetzen
88
Rsetzen:
89
Schuetz = Aus
90
Gelb = Aus
91
Goto Main
92
93
94
Rmtoggle:
95
Toggle F
96
Toggle Rot
97
98
Return
99
End

Im Code werden die Lampen jetzt einfach nur eingeschaltet, weil ich eben 
nicht weiß wie ich das anstellen soll.

Wär echt nett wenn mir jemand helfen könnte :)

Danke im Vorraus und sorry für den vielen Text :D.

Gruß, Kai

von holger (Gast)


Lesenswert?

Dein Stichwort heißt Timer Interrupt.
Wie man das in Bascom macht weiß ich nicht.

Schönes Beispiel wie "goto" ein Programm
versauen kann ;)

von Kai (Gast)


Lesenswert?

Das mit dem Timer Interrupt hab ich auch schon gelesen, aber ich hab 
keine Ahnung wie ich das umsetzen soll :D.

Ja das Programm ist vielleicht nicht schön und wahrscheinlich auch zu 
umständlich aber es funktioniert und das ist schon was ;).

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.