Forum: Mikrocontroller und Digitale Elektronik Interrupt am ATTiny13 in BASCOM


von Maxx (Gast)


Lesenswert?

Hallo,
obwohl hier Bascom nicht den besten Ruf hat hoffe ich doch mal auf einen 
Tip. Ich verwende einen ATTiny13. Ein Kontakt soll einen Interrupt (an 
pin5 entspr. PBO) auslösen, dann soll LED im 0,5s Takt blinken.
Der Kontakt schließt nach Masse.
Meine LED blinkt aber dauernd,ohne, daß die Taste gedrückt wird. Was ist 
falsch ?
Folgendes Script:
$regfile = "attiny13.dat"
$crystal = 1000000

Config Portb.4 = Output ' hier ist die LED dran
 Config Int0 = Falling   'hier ist der "Schaltkontakt" dran, also pin5
  On Int0 Int0set

  Enable Interrupts
  Enable Int0

Do
Loop

Int0set:
Toggle Portb.4
Waitms 500
Return

Vielen Dank vorweg
Maxx

von gast (Gast)


Lesenswert?

Hallo,
versuch mal das hier. Das ist ein klein bischen sinnvoller um nen 
Interrupt zuüben als deine Aufgabenstellung.

$regfile = "attiny13.dat"
$crystal = 1000000

set portb.5 'Pull-Up aktivieren

Config Portb.4 = Output ' hier ist die LED dran
 Config Int0 = Falling   'hier ist der "Schaltkontakt" dran, also pin5
  On Int0 Int0set

  Enable Interrupts
  Enable Int0

Do
Loop

Int0set:
set Portb.4 'Led gegen GND!
Waitms 100
Return

von gast (Gast)


Lesenswert?

Ups
so natürlich

Int0set:
set Portb.4 'Led gegen GND!
Waitms 100
reset Portb.4
Return

von Maxx (Gast)


Lesenswert?

Hallo nochmals,
danke für die schnelle Antwort!
Es hat sich aber nicht viel getan, d.h. die LED leuchtet dauernd und 
ist auch mit PB0 (pin5) nach Masse legen nicht schaltbar.
Ich habe einen externen Pullup immer an PB5 dran.
Mit "set " und dann mit "reset" hatte ich schon versucht--brachte aber 
auch keinen Erfolg. Woran könnte es denn noch liegen ?
Gruß Maxx

von Hannes Lux (Gast)


Angehängte Dateien:

Lesenswert?

> Woran könnte es denn noch liegen ?

Falsches Konzept...

- Taster gehören nicht an den Interrupt (Sonderfall: Wecken aus Power-
  Down-Sleep)
- Taster prellen und müssen entprellt werden
- Warteschleifen im Interrupt sind tödlich

Vorschlag:
- Taster einlesen und entprellen (Debounce)
- Wurde Taster betätigt, dann ein Flag setzen
- Wurde zweiter Taster betätigt, dann das Flag löschen
  (ein Flag ist eine Bitvariable, auch Merker oder Boolean genannt)
- In Mainloop Flag abfragen, ist es gesetzt, dann
  - LED-Portpin toggeln
  - Wartezeit aufrufen

Später, wenn das verstanden ist, die Zeitbasis mittels Timer-Interrupt 
erzeugen. Das ist besser, da der Controller dann während des Blinkens 
noch andere Dinge tun kann.

Ich hänge mal ein Programm für Tiny13 an, in dem unter Anderem auch 
Taster abgefragt werden und LEDs blinken. ;-)

...

von Maxx (Gast)


Lesenswert?

Hallo,
ich danke für die Tips. Das Programm ist nat. ein ganz schöner 
"Brocken".
Ich bemühe mich alles zu verstehen ansonsten melde ich mich nochmal.
Gruß Maxx

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.