Forum: Mikrocontroller und Digitale Elektronik Komparator Interrupt


von Kicker99 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich programmiere zur Zeit einen Tiny13 in Assembler.

Der µC läuft eine bestimmte Zeit (StBy-Schleife) bis er dann auf den
Ausgang durchschaltet.
Wenn ein Ereignis passiert (ÜBER EIN COMPARATOR INTERRUPT REALISIERT),
dann zählt der µC eine separate Zeit.

Die Zeit, die während des Interrupts verstreicht möchte ich
in der StBy-Schleife addieren (d.h. Zeit des Interrupts wird in 
StBy-Schleife eingerechnet)

PROBLEM: - am Simulator wird die Int-Zeit eingerechnet ->OK
         - sobald ich es an der Hardware(µC-Peripherie + Relais am 
Ausgang)
           anwende, wird der µC-Ausgang in der Form durchgeschaltet, 
dass
           die Abschaltzeit StBy-Zeit+Int-Zeit beträgt!!!???

Im Anhang ist die Syntax zu finden.
von Karl H. (kbuchegg)


Lesenswert?

Bitte:
Poste doch Programmtext nicht als PDF.
Ein Programm ist erst mal nur ein Text. Für verschiedene Arten von Text 
kann das Forum da ein Syntaxhighlighting machen.
Das ist für dich angenehmer (weil du weniger Arbeit hast) und auch für 
uns (weil es besser lesbar ist)
1
;********************* StBySchleife **********************
2
NulldurchgangStBy:
3
  cbr Flagregister, pFlanke
4
  rjmp FlankeStBy0
5
6
FlankeStBy1:
7
  sbr Flagregister, pFlanke
8
9
FlankeStBy0:
10
  sbis pinb, 0
11
  rjmp FlankeStBy1
12
  sbrs Flagregister, 5
13
  rjmp FlankeStBy0
14
15
StBy:
16
  inc Timertaktzaehler
17
  cpi Timertaktzaehler, 50 ; entspricht 1 Sec
18
  brne Sprungziel11
19
  clr Timertaktzaehler
20
  add StBySec, IntSec ; hier die Addition: am Simulator klappts, aber an der Hardware
21
;läuft der Controller über die 35 Sec, und zwar der Zeit
22
;entsprechend (Faktor x 5Sec), wie oft ein Interrupt am
23
;Komparator passiert!!!
24
;-> d.h. er addiert die im Interrupt verstrichene Zeit im Register
25
;anscheinend nicht dazu
26
;BITTE UM HILFE falls Ideen vorhanden
27
  clr IntSec
28
  inc StBySec
29
  cpi StBySec, 35 ;Bei voller Minutenzahl auf 60 stellen.
30
  brne Sprungziel11
31
  clr StBySec
32
  rcall Schalter_abschalten
33
34
Sprungziel11:
35
  rjmp NulldurchgangStBy
36
37
;**************** Comparator Interruptroutine **************
38
Comparator:
39
  inc ImpulsZaehler
40
  cpi ImpulsZaehler, 2
41
  brne ersterInt
42
  dec ImpulsZaehler
43
  rjmp Timer_Countdown
44
ersterInt:
45
  reti
46
47
Nulldurchgang:
48
  cbr Flagregister, pFlanke
49
  rjmp Flanke0
50
Flanke1:
51
  sbr Flagregister, pFlanke
52
Flanke0:
53
  sbis pinb, 0
54
  rjmp Flanke1
55
  sbrs Flagregister, 5
56
  rjmp Flanke0
57
Timer_Countdown:
58
  sbr Flagregister, Timerroutine
59
  inc Timertaktzaehler
60
  cpi Timertaktzaehler, 50
61
  brne Sprungziel1
62
  clr Timertaktzaehler
63
  inc BruehSec
64
  mov IntSec, BruehSec ; IntSec wird immer überschrieben, bis 5Sec erreicht
65
                       ;sind-> dann reti
66
                       ;-> diese Zeit wird dann in der StBy-Schleife addiert,
67
                       ;damit die Interrupt-Zeit im ganzen Programm
68
                       ;mitberücksichtigt wird
69
                       ;geht der μC in reti, so zählt der μC nur Nettozeit der
70
                       ;StBy-Schleife, da die Zeit, die im Interrupt verstreicht
71
                       ;im Register draufaddiert wird-> siehe StBy-Schleife
72
  cpi BruehSec, 5
73
                       ;Zeit, wo Druckmatic abschaltet
74
  brne Sprungziel1 ;Bei voller Minutenzahl auf 60 stellen
75
  clr BruehSec
76
  reti
77
Sprungziel1:
78
  rjmp Nulldurchgang
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.