www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt am ATTiny13 in BASCOM


Autor: Maxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups
so natürlich

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

Autor: Maxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (Gast)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht 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. ;-)

...

Autor: Maxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.