Hallo an Alle,

ich möchte mit einem Attiny13 eine Steuerung realisieren, welche erstens ein angeschlossenes Akkupack laden und zweitens dieses über ein Lämpchen wieder entladen (eigentlich der Hauptnutzen ) kann.

Jetzt habe ich an den Portb.0 einen Schalter angeschlossen, der den Interrupt-Eingang gegen Masse oder Ub ziehen kann. Das Programm beinhaltet zwei Unterprogramme (Laden und Entladen) die, je nachdem auf welcher Position der Schalter steht, ausgeführt werden sollen. Gesteuert werden soll das Ganze also durch einen Interrupt....
Und da habe ich nun folgendes Problem, dass nur das Programm "Entladen" ausgeführt wird. Irgendwie erkennt der Controller den Interrupt nicht, wenn PCINT0 "high" wird , jedenfalls wird der "Laden" teil nie ausgeführt...

Hier mein Code:
Code:
$regfile = "attiny13.dat"
$crystal = 4800000
$hwstack = 32
$swstack = 8
$framesize = 16


Stop Ac                                                     'Analogen Komparator ausschalten

Dim Modus As Bit
Dim Vbatt As Word



Config Adc = Single , Prescaler = Auto , Reference = Internal       '1,1Volt interne Referenzspannung
' 1,1V / 1024 = 0,00107V Auflösung; direkt am ADC
' mit Spannungsteiler :4,54545... kann bis 5V gemessen werden (Auflösung real ca.0,02V)


Config Int0 = Change
On Pcint0 Interrupt


Config Portb.0 = Input                                      '=0, dann Entladen und Tiefentladeschutz / =1, dann Laden und Ladeschluss
Config Portb.1 = Output                                     '=0, dann Lämpchen aus
Config Portb.2 = Output                                     '=1, dann Ladestrom aus / =0, dann Ladestrom an
Config Portb.4 = Output                                     'LED + Piezo



'___________________________________________________________________________________________________________________________________

Enable Interrupts
Enable Int0



If Pinb.0 = 0 Then
   Gosub Entladen
End If

If Pinb.0 = 1 Then
   Gosub Laden
End If

'##################################################

Entladen:
Portb.2 = 1                                                 'Ladestrom aus                                               '
Portb.1 = 1                                                 'Lämpchen an

Do


If Modus = 1 Then                                           'Abfrage nach wiederaufwachen nach Powerdown
   Goto Laden
End If


Vbatt = Getadc(3)

If Vbatt < 615 Then                                         '615 entspricht 3V bei Spannungsteiler ducrch 4,545 an ADC3
   Portb.1 = 0
   Sound Portb.4 , 400 , 600
   Waitms 1000
   Sound Portb.4 , 400 , 600
   Config Powermode = Powerdown
End If

Loop
Stop



'##################################################



Laden:
Portb.2 = 0                                                 'Ladestrom an
Portb.1 = 0                                                 'Lämpchen unbedingt aus
Portb.4 = 1                                                 'Kontroll-LED an => Laden
Do
Waitms 60000                                                '60s laden, dann Spannung ohne Ladestrom messen
Portb.2 = 1                                                 'Ladestrom aus
Waitms 1000                                                 '1s vor Messung warten

Vbatt = Getadc(3)


If Vbatt > 881 Then                                         '881 entspricht 4,3V
   Portb.2 = 1                                              'ladestrom aus
   Sound Portb.4 , 800 , 400
   Portb.4 = 0                                              'Kontroll-LED aus => geladen
Else
   Portb.2 = 0                                              'Ladestrom wieder an
End If


Loop
Stop




'##################################################



Interrupt:

Waitms 100
Modus = Pinb.0                                              'Modus=0, dann Entladen / Modus=1, dann Laden

If Modus = 0 Then
   Gosub Entladen
End If

If Modus = 1 Then
   Gosub Laden
End If

Return
Vielleicht habe ich einfach nur was übersehen, denn ich bin noch Anfänger.....

Ich wäre dankbar über jede Hilfe und freue mich auf Rückmeldungen.

Beste Grüße so kurz vor Weihnachten,
Jo