Forum: Mikrocontroller und Digitale Elektronik Attiny2313 Herz - Interrupt Problem


von Siggi (Gast)


Angehängte Dateien:

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!

von huibu (Gast)


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.

von Grrrr (Gast)


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.

von Siggi (Gast)


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

von Grrrr (Gast)


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.

von Karl H. (kbuchegg)


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?

von Karl H. (kbuchegg)


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.

von Siggi (Gast)


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.

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.