Attiny2313 Herz - Interrupt Problem

Gast #1762777
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!
Angehängte Dateien:
Gast #1762781
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.
Gast #1762783
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.
Gast #1762809
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
Gast #1762815
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.
#1762821
Lesenswert?

1
'-------------------------------------------------------------------------------
2
'Mainloop
3

4
Count = Save
5
Do
6
   Select Case Count
7
      Case 1 :
8
         Call Prog1
9
      Case 2 :
10
         Call Prog2
11
      Case 3 :
12
         Call Prog3
13
      Case 4 :
14
         Call Prog4
15
   End Select
16
Loop
17
End
18

19

20
'-------------------------------------------------------------------------------
21
'Interruptanweisung
22
Lol_int0:
23
  Count = Count + 1
24
  If Count >= 5 Then
25
      Count = 1
26
  End If
27
  Save = Count
28
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.
Gast #1762827
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren