Ampel mit Bascom und ATTiny2313

Gast #2520343
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.