Forum: Mikrocontroller und Digitale Elektronik Attiny13 + Bascom: Einfaches Lauflicht mit Taster funktioniert nicht


von Anfänger (Gast)


Lesenswert?

Hallo zusammen,

ich bin gerade dabei ein einfaches Lauflicht mit einem Attiny13 in 
Bascom zu programmieren. An den Attiny13 habe ich 4 LEDs mit 
Vorwiderständen und einen Taster als "Eingabe" angeschlossen.
Nun möchte ich, dass nach dem Einschalten die erste LED leuchtet. Wenn 
ich nun den Taster betätige soll die erste LED ausgehen und die zweite 
LED leuchten usw.
Am Besten wäre es noch, das Programm so zu gestalten, dass bei dauerhaft 
gedrücktem Taster die LEDs nicht nacheinander weiterschalten sondern nur 
die nächste LED geschaltet wird. In meinem Programm funktioniert leider 
diese Funktion noch nicht, da ich nicht genau weiss welchen Befehl man 
dazu verwenden sollte. Desweiteren habe ich das Problem, dass ich den 
gesamten PortB als Ausgang definieren muss um etwas ausgeben zu können
 => PortB = A(B).
Das Problem ist, dass der Eingang leider auch an PortB hängt und ich 
nicht weiss wie man nur an den deklarierten ausgängen etwas ausgibt.

Danke schonmal im vorraus!

Hier mein Programm:
1
$regfile "attiny13.dat"
2
$crystal = 9600000
3
$hwstack = 32
4
$swstack = 5
5
$framesize = 20
6
7
Config Portb.0 = Output                            'Ausgang LED 1
8
Config Portb.1 = Output                            'Ausgang LED 2
9
Config Portb.2 = Output                            'Ausgang LED 3
10
Config Portb.4 = Output                            'Ausgang LED 4
11
Config Pinb.3 = Input                              'Eingang Taster
12
Pinb.3 = 1
13
14
Dim A(4) As Byte        '4 verschiedene Bitmuster mit A verknüpfen
15
Dim B As Integer        'B as Integer definieren
16
17
A(1) = Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 : Portb.4 = 0 
18
A(2) = Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0 : Portb.4 = 0 
19
A(3) = Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 : Portb.4 = 0 
20
A(4) = Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 0 : Portb.4 = 1 
21
22
B = 1
23
24
Do
25
26
   Portb = A(b)                  'An PortB das Bitmuster ausgeben
27
   If Pinb.3 = 0 Then Incr B : Waitms 50  
28
   If B = 5 Then B = 1                               
29
30
Loop
31
32
End

: Bearbeitet durch User
von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Informiere Dich mal über Bits und Bytes sowie Bitmanipulation. Dann 
schau Dir mal im Datenblatt des Tiny13 die I/O-Register portb, ddrb und 
pinb an. Da wirst Du sehen, dass Du die Portpins auch als Gruppe 
ansprechen kannst. Auch bei der Initialisierung kannst Du auf das 
Config-Geraffel verzichten und einfach schreiben:
  DDRB=&b00001111    'PB0...PB3 als Ausgang, PB4...PB7 als Eingang
  PORTB=&b00010000   'mit PB4 den internen PullUp einschalten

Beim Zuweisen der Bitmuster wird dann immer PB4 mit gesetzt, damit der 
PullUp aktiv bleibt.

Um auf einen Tastendruck nur einmal zu reagieren, solltest Du den Wert 
des letzten Tastendrucks speichern und die neue Tastenabfrage auf 
Änderung (Unterschied zur letzten Abfrage) testen. Die Reaktion erfolgt 
dann auf die Änderung von unbetätigt zu betätigt, also von 1 zu 0 im 
Bit4 von PINB. Wenn es zuverlässig werden soll, dann muss da noch eine 
Entprellung rein, denn mechanische Schalter und Taster prellen 
nunmal.

Ich hänge Dir mal ein paar Beispiele von Rundumleuchten 
(Endlos-Lauflichter) an. Da gibt es zwar keine Tastenabfrage, aber Du 
siehst, wie man die Portzugriffe effizienter machen kann.

...

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Ich habe noch ein Programm gefunden, in dem Taster (oder Reedkontakte) 
abgefragt werden. Vielleicht hilft es Dir ja weiter.

...

von Tommy T. (thomas_k86)


Angehängte Dateien:

Lesenswert?

Guckst du!! :)
Mit etwas Verfeinerung ist das genau das was du suchst. ODER???

von Tommy T. (thomas_k86)


Lesenswert?

Am Besten ist du nimmst gleich "Speed = 10" in Zeile 22 dann gehts 
flotter.
der Code kann um einige Modus erweitert werden,wie z.B. Tastendruck 6 = 
PB.0 und PB.3 ein und viel mehr. Viel spass!!

Mfg Tommy

von Tommy T. (thomas_k86)


Lesenswert?

Naaa??? Was ist mit`n 'Kollegen??? Passt des so?????

von Anfänger (Gast)


Lesenswert?

Vielen Dank für eure Hilfe!
Ich werde das angehängte Programm für das Tasterlauflicht mal für meine 
Zwecke umändern und schauen ob es funktioniert.

Gruß Anfänger

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.