Hallo, ich hab da eine kleine Frage. Ich möchte 2 Funktionen meines Timers ausnutzen. Einmal die Capture Funktion und einmal die Match Funktion. Nun will ich aber, dass bei Capture was anderes passiert und bei Match. Soweit ich weiß, hat jeder Timer nur eine ISR. Ich habe mir gedacht, dass ich in der ISR überprüfe, welches Bit denn nun gesetzt worden ist, sprich ich überprüfe, ob der Capture jetzt auf "1" gegangen ist oder Match. Habe es auch ausprobiert, aber leider bleibt der in der ISR an dieser Stelle hängen. Deswegen habe ich mir gedacht, ich frage direkt in der main() (hab also die komplette Match Funktion rausgenommen) den Wert des Timer Counter Registers ab (soll bei einer Minute eine Variable hochzählen). Doch der geht nicht mal in die Bedingung rein, obwohl mein Timer aufgrund des Captures schon gestartet hat. Also im TC stehen Werte, aber die Bedingung in meiner main() wird komischerweise nie erfüllt. Kann mir jemand mal einen Tipp geben? Vielen Dank.
Gast
#3774289
Merve B. schrieb: > Kann mir jemand mal einen Tipp geben? ohne den µC zu kennen - nein.
Tut mir leid. Ich benutze einen LPC2368
Gast
#3774332
Merve B. schrieb: > Ich benutze einen LPC2368 Der hat doch genug Timer
@Mike Ja das ist mir klar, aber mein Timer startet, wenn ein Capture anliegt und soll dann, wenn kein 2. Capture kommt, stoppen (nach 1 Minute).
@ Merve B. (student1990) >Ja das ist mir klar, aber mein Timer startet, wenn ein Capture anliegt Nö. Der Timer läuft STÄNDIG. Wenn ein Capture-Ereignis erkannt wird, wird der aktuelle Zählerstand in das Capture-Register kopiert. >und soll dann, wenn kein 2. Capture kommt, stoppen (nach 1 Minute). Das ist eine leichte Übung. In fast jedem Mikrcontrollerprogramm braucht man so oder so eine Zeitbasis, hier reichen 100ms locker. Also muss der oder ein anderer Timer einen Interrupt alle 100ms erzeugen. Dort kannst du dann deine 1 Minute runterzählen und entsprechend reagieren. Siehe Interrupt, Timer und Statemachine.
@Falk Brunner Was ich gemeint habe, dass mein Timer erst bei einem Interrupt startet. Folglich läuft er davor nicht. Danke für die Links. Ich habe es mir durchgelesen. Habe jetzt mal was anderes ausprobiert und mit 2 Timern gearbeitet, wobei der eine Timer vom anderen abhängt. Hierfür habe ich dann eine extra ISR geschrieben, welche mit dem Match arbeitet. Das ganze habe ich ausprobiert. Beide Timer starten FAST zeitgleich, ABER jetzt zu meinem Problem. Obwohl ich den 2. Timer mit dem Match arbeiten lasse, geht er nicht in die entsprechende ISR rein. Ich sehe zwar, dass er den TC-Register wieder auf Null setzt, aber der Timer läuft ständig weiter. Was mir noch aufgefallen ist-der ist irgendwie ständig in der ISR von dem anderen Timer (der mit dem Capture arbeitet), obwohl ich eigentlich die Flags wieder freigebe. An was kann das liegen? Komplett Lösungen oder sowas möchte ich nicht keine Sorge. Will lediglich nur Tipps, die mir weiterhelfen könnten. Will ja was lernen und nicht ständig euch damit belästigen. Vielen dank im voraus. Hier mein Code (der leider nicht so sauber programmiert ist)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | |
221 | |
Habe gerade einen Fehler entdeckt! Ich habe vergessen von Timer 3 die Einstellungen für das Match-Register raus zu nehmen. Vielleicht lag es daran. Ich probiere es gleich aus und werde hier dann das Verhalten schreiben.
Hab es ausprobiert. Mein Problem ist, dass er nicht in die entsprechende ISR reinspringt. Das ist total seltsam, denn als ich ein Testprogramm geschrieben habe, hat das alles wunderbar funktioniert und es waren die selben Einstellungen für den Timer... Kann mir wirklich keiner einen Tipp geben, warum er nicht in die ISR reinspringt, obwohl er ein Match erkennt? Danke
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.