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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.