Forum: Mikrocontroller und Digitale Elektronik Problem mit Taster Variable


von Detlef K. (Gast)


Lesenswert?

Wenn ich auf einen Taster drücke möchte ich das eine Led leuchtet.
Wenn ich ein weiteres mal auf den gleichen Taster drücke möchte ich eine 
weitere led einschaltet, und das die Voherige wieder erlöscht.
Habe das mit einer Lauf Variable überlegt.
Möchte das ganze auf einen Atmega 8 progrmmieren,wobei bascom als 
progrmmiersprache bevorzugt wird.
Bitte um euere Hilfe!
Danke im Voraus!

von M. T. (quax11)


Lesenswert?

Das ist vermutlich genau das, was du suchst: 
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/taster_entprellen/

von Alexander K. (duchamp)


Lesenswert?

Ist schon alles bereit um zu programmieren?

Du hängst den Taster an eine Interrupt Leitung und die LEDs und 
Vorwiederständen an die I/O Ports.
Ich habe das überflogen und der Atmega 8 liefert 10-20mA, was für LEDs 
ausreicht, ist aber abhängig von der Art der LED.

Den Interrupt lässt du z.B. auf LOW reagieren, ziehst den Pin mit einem 
Wiederstand auf HIGH, während der Taster den auf GND zieht.
Das ist ein Taster, der wird mehrere Interrupts auslösen, du wirst einen 
kleinen Kondensator zum entprellen brauchen.
Die Pins für die LEDs konfigurierst du als Ausgänge.

Schematisch, wo ich Bascom noch nicht gesehen habe:
In der Interrupt-Routine zählst du einen Wert hoch, starte bei 0,
und schreibst einen berechneten Wert auf das Output-Pin-Register:

start_routine()
  counter = 0;

interrupt_routine()
  counter = counter + 1;
  PORTn = 1 SHL (counter MOD ANZ_LED)

PORTn ist das Output-Register an dem deine LEDs hängen;
ANZ_LED ist die Zahl der verwendeten Pins des PORTn, also Anzahl LEDs

Was passiert ist, du zählst die counter variable hoch, mit dem Modulus 
hälst du den Wert in 0-ANZ_LED //z.B. 0-8;
...mit 1 << SHL produzierst du sowas
1 << (0 % 8) = 1 << 0 = 0x00000001;
1 << (1 % 8) = 1 << 1 = 0x00000010;
1 << (7 % 8) = 1 << 7 = 0x10000000;
1 << (8 % 7) = 1 << 1 = 0x00000001;

Wenn der Counter 255 überschreitet fängt er bei 0 an.

Den Wert 0x00000001 legst du jeweils auf das Output register,
das eine aktive Bit stellt ein HIGH auf dem Ausgang dar.
Zählst du counter hoch bewegst du das aktive bit immer eines nach links.

Das Atmega 8 Output-Register ist 8-Bit groß, also kannst du mit dem Code 
8 Ausgänge steuern.
Planst du weitere Ports anzusteuern musst du das SHL auf den nächsten 
Port erweitern.

von Patrick P. (patrick_r10)


Lesenswert?

Vielen Dank bitte Antworte mal auf meine EMail?
MFG

von Tommy T. (thomas_k86)


Angehängte Dateien:

Lesenswert?

So meinst du ! Ungefähr.

von Eumel (Gast)


Lesenswert?

Alexander K. schrieb:
> Du hängst den Taster an eine Interrupt Leitung und die LEDs und
> Vorwiederständen an die I/O Ports.

Bestimmt nicht.

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.