Ampel mit Bascom und ATTiny2313

Gast #2520343
Lesenswert?

Hallo,

bin dabei eine kleine Ampel zu programieren.
Soweit klappe das auch, nun möchte ich aber das die Ampel rot leuchtet 
solange an PB3 nicht VCC anlieg.

Leider leuchtet sie jetzt durchgänig rot.
1
$regfile = "attiny2313.dat"
2
$crystal = 1000000
3
$hwstack = 32
4
$swstack = 8
5
$framesize = 16
6

7

8

9
'Grün an PB0
10
Gruen Alias Portb.0
11
Config Gruen = Output
12

13
'Gelb an PB1
14
Gelb Alias Portb.1
15
Config Gelb = Output
16

17
'Rot an PB2
18
Rot Alias Portb.2
19
Config Rot = Output
20

21
'Schalter An Pb3
22
Schalter Alias Portb.3
23
Config Schalter = Input
24

25
Do
26
   If Schalter = 1 Then
27
  Rot = 1
28
  Gelb = 0
29
  Gruen = 0
30
 Waitms 5000
31
  Rot = 1
32
  Gelb = 1
33
  Gruen = 0
34
 Waitms 2000
35
  Rot = 0
36
  Gelb = 0
37
  Gruen = 1
38
 Waitms 5000
39
   Rot = 0
40
  Gelb = 1
41
  Gruen = 0
42
 Waitms 2000
43

44
   Else
45
      Rot = 1
46
      Gelb = 0
47
      Gruen = 0
48

49
   End If
50

51
Loop
52

53
End

MfG Pharma
Gast #2520387
Lesenswert?

Sieht deine Schaltung so ähnlich aus?
1
          ^ Vcc
2
          |
3
          #
4
          # Pull-Up Widerstand 
5
          # 1-10k
6
          |
7
PB3 o-----+
8
          |
9
          o |
10
            |=| Taster oder Schalter
11
          o |
12
          |
13
         --- Gnd

Oder heisst "solange an PB3 nicht VCC anlieg." dass da der Draht zu PB3 
frei in der Gegend rumbambelt?
Gast #2520457
Lesenswert?

Hallo, angeschlossen ist der Schalter folgendermaßen:
1
          ^ Vcc
2
          |
3
          o |
4
            |=| Taster oder Schalter
5
          o |
6
          |
7
PB3 o-----+
8
          |
9
          #
10
          # Pull-Up Widerstand 
11
          # 10k
12
          |
13
         --- Gnd

Bei dem Simulator sehe ich leider noch garnicht durch, bin noch neuling 
in sachen AVR.

Wenn ich nur
1
$regfile = "attiny2313.dat"
2
$crystal = 1000000
3
$hwstack = 32
4
$swstack = 8
5
$framesize = 16
6

7

8

9
'Grün an PB0
10
Gruen Alias Portb.0
11
Config Gruen = Output
12

13
'Gelb an PB1
14
Gelb Alias Portb.1
15
Config Gelb = Output
16

17
'Rot an PB2
18
Rot Alias Portb.2
19
Config Rot = Output
20

21
'Schalter An Pb3
22
Schalter Alias Portb.3
23
Config Schalter = Input
24

25
Do
26
  Rot = 1
27
  Gelb = 0
28
  Gruen = 0
29
 Waitms 5000
30
  Rot = 1
31
  Gelb = 1
32
  Gruen = 0
33
 Waitms 2000
34
  Rot = 0
35
  Gelb = 0
36
  Gruen = 1
37
 Waitms 5000
38
   Rot = 0
39
  Gelb = 1
40
  Gruen = 0
41
 Waitms 2000
42

43
Loop
44

45
End

verwende läuft die Ampel, also müssten doch die Pins richtig 
angesporchen werden oder?

Wenn an PB3 +5 anliegen soll die Ampel ihr Programm durchspielen, wenn 
keine Spannung anliegt soll die Ampel permanent rot sein.

MfG Pharma
#2520459
Lesenswert?

Pharma schrieb:
> Schalter Alias Portb.3
> Config Schalter = Input

Pb.3 ist als Eingang definiert aber Schalter ist Portb.3.
Port ist aber das was man als Ausgang schreibt bzw der Pullup wenn als 
Eingang definiert.
Also bleibt Schalter immer 0, egal wie du an dem Beinchen wackelst.

Gewöhne Dir das so an:
1
Ddrb.3 = 0         'Eingang, könnte man weglassen
2
Schalter Alias Pinb.3
3
Portb.3 = 1         'Schaltet den internen Pullup ein, Schalter vom Pin an Masse nötig
4

5
'Gelb an PB1
6
Ddrb.1 = 1           'Output
7
Gelb Alias Portb.1

Gruß,
Norbert
Gast #2520493
Lesenswert?

Hallo,
also danke erstmal.
das Port in PIN zu ändern hat schonmal funktioniert.
Nur dauert es einige Sekunden bis der Tiny merkt das ich die Spannung an 
PB3 weggenommen habe, hat das was mit meiner eingestellten Taktfrequenz 
zu tun?

MfG
#2520512
Lesenswert?

Pharma schrieb:
> Hallo,
> also danke erstmal.
> das Port in PIN zu ändern hat schonmal funktioniert.
> Nur dauert es einige Sekunden bis der Tiny merkt das ich die Spannung an
> PB3 weggenommen habe, hat das was mit meiner eingestellten Taktfrequenz
> zu tun?

Nein.
Das hat was mit deinem Programm zu tun, welches du eigentlich kennen 
solltest.

Dein Programm schaltet rot ein und wartet dann 5 Sekunden.
Dann schaltet es gelb ein und wartet wieder 2 sekunden
dann grün und wartet wieder 5 Sekunden
bis dann endlich wieder erst mal gelb eingeschaltet wird, gefolgt von 
einer 2 sekündigen Pause.

und erst dann ist es mit einer Ampelsequenz fertig und in der Schleife 
gehts nach oben  wo dann endlich überprüft wird ob der Eingang auf 1 
ist.
Dein Programm verbrutzelt also 12 Sekunden Rechenzeit mit Däumchen 
drehen, ehe es dann wieder mal nachsieht, ob du den Taster betätigt 
hast.

Und das ist genau das, was du siehst.

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