mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Attiny2313 Herz - Interrupt Problem


Autor: Siggi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, habe ein Problem mit meinem Programm.
Es soll ein LED Herz mit verschiedenen Animationen werden.

Das Herz hat 12 Reihen.
Diese sind von PB0..7 und dann an PD0,1 und PD4,5 angeschlossen. Die 
Ansteuerung erfolgt über NPN Transistoren und funktioniert einwandfrei. 
Auch die einzelen Animationsabläufe funktionieren anstandslos.
Aber ich habe nun das ganze wie folgt geplant:

Per Interrupt (Taster - PD.2) soll eine Variable hochgezählt werden. Je 
nach dem welchen Wert die Variable besitzt, wird die entsprechende 
Subroutine geladen.
Außerdem wird der Wert im EEPROM gespeichert.

Leider funktioniert das Programm nicht, was mir mittlerweile seit 2 
Stunden völlig schleierhaft ist. Eine abgewandelte Form, die die 
Variable via UART an den PC sendet funktioniert hingegen einwandfrei. Es 
scheint, als würde das Intterrupt nicht richtig ausgeführt werden.

Vielleicht habt ihr hier eine Idee, was da falsch sein könnte. Ich bin 
auf jeden Fall für alle Ratschläge und Tips offen, das Programm ist in 
BASCOM geschrieben und angehängt.

Hoffe ihr könnt mir schnell helfen, dass Teil müsste morgen fertig sein!


Danke schonmal im Voraus!
Siggi!

Autor: huibu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn das Problem? Kann es sein, dass der Taster nicht entprellt 
ist? Dann bekommst du zufällige Ergebnise (also die Animationen werden 
willkürlich gewählt), weil dein count undefiniert ist, da der Interrupt 
durch das Nachprellen x mal ausgeführt wird.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siggi schrieb:
> dass Teil müsste morgen fertig sein!

Das ist letztlich Dein Problem und nicht unseres.

> Leider funktioniert das Programm nicht

Und woran erkennst Du das es nicht funktioniert?

Ein Tip mal vorab: Tasten am Interrupt sind nicht sinnvoll. Bascom 
bietet da, soweit ich weiss, eine Entprellroutine.

Autor: Siggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt gar keine Ergebnisse, ergo bleiben alle LEDs aus.
Deswegen ging ich bis jetzt auch noch nicht von einem prellproblem aus.

Zum Thema "mein Problem": Ja das ist es, tut mir leid, dass ich hier mal 
meine Situation schildere augenverdreh

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siggi schrieb:
> Zum Thema "mein Problem": Ja das ist es, tut mir leid, dass ich hier mal
> meine Situation schildere augenverdreh

Diese Ungezogenheit ist noch ein Grund, warum man Dich am ausgestreckten 
Arm verhungern lassen sollte. Lies das nächstemal was über Netiquette.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setz dir doch mal eine Ausgabeoperation (Led einschalten) in die ISR. 
Dann siehst du zumindest, ob die ISR ausgelöst wird.


Ich sehe zwar, dass du den Tasterpin auf Eingang schaltest. Aber ich 
sehe dich keinen Pullup Widerstand einschalten. Benutzt du externe 
Pullup?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'-------------------------------------------------------------------------------
'Mainloop

Count = Save
Do
   Select Case Count
      Case 1 :
         Call Prog1
      Case 2 :
         Call Prog2
      Case 3 :
         Call Prog3
      Case 4 :
         Call Prog4
   End Select
Loop
End


'-------------------------------------------------------------------------------
'Interruptanweisung
Lol_int0:
  Count = Count + 1
  If Count >= 5 Then
      Count = 1
  End If
  Save = Count
Return


count erhöhen, save erhöhen, in count speichern, in save speichern.
Entscheide dich doch mal, wer hier eigentlich die 'Führung hat'. count 
oder save. Aber nicht beide gleichzeitig.

Autor: Siggi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grrrr schrieb:
> Diese Ungezogenheit ist noch ein Grund, warum man Dich am ausgestreckten
> Arm verhungern lassen sollte. Lies das nächstemal was über Netiquette.

Mich wegen 2 Sätzen als ungezogen zu bezeichnen, finde ich ehrlich 
gesagt sehr gewagt.

Karl heinz Buchegger schrieb:
> Setz dir doch mal eine Ausgabeoperation (Led einschalten) in die ISR.
> Dann siehst du zumindest, ob die ISR ausgelöst wird.

Werde ich sofort versuchen! :]

Karl heinz Buchegger schrieb:
> Ich sehe zwar, dass du den Tasterpin auf Eingang schaltest. Aber ich
> sehe dich keinen Pullup Widerstand einschalten. Benutzt du externe
> Pullup?

Ja, ich verwende einen externen Pullup.

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.