Hallo, bin neu hier und auch unerfahren im Umgang mit der Pic-Programmierung. Ich habe einen Pic10F200 und möchte mit dem einem Ausgang einen Lampe ansteuern. Mit einem anderen Eingang möchte ich m,it einer Taste diese Lampe sowohl ein-, als auch ausschalten können. Da ich ganz neu bin habe ich mir das Programm "BlinkLED" genommen, doch das schalten habe ich nicht hin bekommen. Habe mich bisher auch nur in .asm eingelesen. Ich hoffe, hier kann mir jemand helfen. Wenn es sein muß, werde ich mich auch noch in "C" schlau machen, um das Problem lösen zu können. Hat ausserdem noch jemand eine hilfe, wie ich ein Flackerlicht hin bekomme. Habe bis jetzt 10 Schleifen mit unterschiedlichen Zeiten für das Leuchten der LED benutzt. Vielen Dank schon einmal. Euer Piccer.
Hallo piccer, schau mal, ob Du hiermit was anfangen kannst. In dem Code wird eine Taste an GP3 abgefragt (kurz drücken = EIN/AUS, lange drücken = nächster Modus). Je nach Modus werden an 2 Ausgängen PWM-Werte erzeugt. Was Du nicht brauchst, kannst Du ganz einfach rauswerfen; Timer oder sonstiges hab ich nicht eingesetzt.
Hallo, bei verschiedenen Benutzern schwirrt eine Glaskugel herum, leider fehlt mir die, um den Schaltplan, sowie die asm anzusehen, damit ich dir helfen könnte.
Also, danke erst einmal für das C-Programm. Schaffe es aber leider nicht es in irgend einer weise so zu compilieren, oder so, um es auf den PIC zu bekommen. Eventuell kannst du mir ja sagen, wie ich das machen kann. Danke. Wegen der Glaskugel! Ich habe auch keine, versuche aber jetzt klarheit in die Sache zu bringen. Hier die .asm :
1 | list p=10f200 |
2 | ;*********************************************************************** |
3 | ;* Pinbelegung |
4 | ;* ---------------------------------- |
5 | ;* GP: 0 > LED mit 1 kOhm Vorwiderstand |
6 | ;* 1 - |
7 | ;* 2 - |
8 | ;* GP: 3 > Taster als Eingang |
9 | ;* |
10 | ;*********************************************************************** |
11 | ; |
12 | ;sprut (zero) Bredendiek 05/2005 |
13 | ; |
14 | ; Blinklicht mit PIC10F202 am Pin GP0 |
15 | ; |
16 | ; Prozessor 10F202 (oder 10F200) |
17 | ; |
18 | ; Prozessor-Takt 4 MHz intern |
19 | ; |
20 | ; |
21 | ;*********************************************************************** |
22 | ; Includedatei für den 10F202 einbinden |
23 | |
24 | #include <p10f202.inc> |
25 | |
26 | ; Configuration festlegen: |
27 | ; kein codeprotection |
28 | ; kein WDT-Timer |
29 | ; kein Reset-Pin |
30 | |
31 | __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF |
32 | |
33 | ;*********************************************************************** |
34 | ; Variablen festlegen ab 10h |
35 | |
36 | cblock 0x10 |
37 | loops |
38 | loops2 |
39 | endc |
40 | wert |
41 | |
42 | #define LED GPIO,0 |
43 | #define TASTE GPIO,3 |
44 | |
45 | ;******************************************************* |
46 | ; Beginn des Programmcodes |
47 | |
48 | org 0x0000 |
49 | |
50 | movwf OSCCAL ; Oszillator kalibrieren |
51 | |
52 | movlw b'00001110' ; GP0 output |
53 | tris GPIO |
54 | |
55 | ; bcf CMCON0,CMPON ; Comparator off nur bei 10F204/206 |
56 | ;******************************************************* |
57 | ; Warten auf Taste GP3 |
58 | |
59 | |
60 | Taste1 |
61 | btfsc TASTE ; Wenn Taste gedrueckt |
62 | call Mainloop ; Bei Taste ins Unterprogramm |
63 | goto Taste1 ; bei keiner Taste weiter |
64 | |
65 | |
66 | ;******************************************************* |
67 | |
68 | |
69 | ;******************************************************* |
70 | Mainloop |
71 | bsf LED ; LED an |
72 | call WAIT1 ; 250 ms warten |
73 | bcf LED ; LED aus |
74 | call WAIT9 ; 50 ms warten |
75 | |
76 | bsf LED ; LED an |
77 | call WAIT2 ; 100 ms warten |
78 | bcf LED ; LED aus |
79 | call WAIT9 ; 50 ms warten |
80 | |
81 | bsf LED ; LED an |
82 | call WAIT3 ; 150 ms warten |
83 | bcf LED ; LED aus |
84 | call WAIT9 ; 50 ms warten |
85 | |
86 | bsf LED ; LED an |
87 | call WAIT4 ; 200 ms warten |
88 | bcf LED ; LED aus |
89 | call WAIT9 ; 50 ms warten |
90 | |
91 | bsf LED ; LED an |
92 | call WAIT5 ; 300 ms warten |
93 | bcf LED ; LED aus |
94 | call WAIT9 ; 50 ms warten |
95 | |
96 | bsf LED ; LED an |
97 | call WAIT6 ; 275 ms warten |
98 | bcf LED ; LED aus |
99 | call WAIT9 ; 50 ms warten |
100 | |
101 | bsf LED ; LED an |
102 | call WAIT7 ; 180 ms warten |
103 | bcf LED ; LED aus |
104 | call WAIT9 ; 50 ms warten |
105 | |
106 | bsf LED ; LED an |
107 | call WAIT8 ; 400 ms warten |
108 | bcf LED ; LED aus |
109 | call WAIT9 ; 50 ms warten |
110 | |
111 | Return ; Springe ins Hauptprogramm |
112 | |
113 | ;******************************************************* |
114 | ; Warteschleife für 50 ms |
115 | WAIT1 |
116 | movlw .250 |
117 | movwf loops |
118 | |
119 | ; die top-Schleife verzögert 1 ms = 250 x 4µs |
120 | top11 |
121 | movlw .250 |
122 | movwf loops2 |
123 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
124 | top12 |
125 | nop |
126 | decfsz loops2, F |
127 | goto top12 |
128 | decfsz loops, F |
129 | goto top11 |
130 | retlw .0 |
131 | |
132 | RETURN |
133 | |
134 | ;******************************************************* |
135 | ; Warteschleife für 100 ms |
136 | WAIT2 |
137 | movlw .100 |
138 | movwf loops |
139 | |
140 | ; die top-Schleife verzögert 1 ms = 15 x 4µs |
141 | top21 |
142 | movlw .100 |
143 | movwf loops2 |
144 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
145 | top22 |
146 | nop |
147 | decfsz loops2, F |
148 | goto top22 |
149 | decfsz loops, F |
150 | goto top21 |
151 | retlw .0 |
152 | |
153 | RETURN |
154 | |
155 | ;******************************************************* |
156 | ; Warteschleife für 150 ms |
157 | WAIT3 |
158 | movlw .150 |
159 | movwf loops |
160 | |
161 | ; die top-Schleife verzögert 1 ms = 150 x 4µs |
162 | top31 |
163 | movlw .150 |
164 | movwf loops2 |
165 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
166 | top32 |
167 | nop |
168 | decfsz loops2, F |
169 | goto top32 |
170 | decfsz loops, F |
171 | goto top31 |
172 | retlw .0 |
173 | |
174 | RETURN |
175 | |
176 | ;******************************************************* |
177 | ; Warteschleife für 200 ms |
178 | |
179 | WAIT4 |
180 | movlw .200 |
181 | movwf loops |
182 | |
183 | ; die top-Schleife verzögert 1 ms = 200 x 4µs |
184 | top41 |
185 | movlw .200 |
186 | movwf loops2 |
187 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
188 | top42 |
189 | nop |
190 | decfsz loops2, F |
191 | goto top42 |
192 | decfsz loops, F |
193 | goto top41 |
194 | retlw .0 |
195 | |
196 | RETURN |
197 | |
198 | ;******************************************************* |
199 | ; Warteschleife für 300 ms |
200 | WAIT5 |
201 | movlw .300 |
202 | movwf loops |
203 | |
204 | ; die top-Schleife verzögert 1 ms = 300 x 4µs |
205 | top51 |
206 | movlw .300 |
207 | movwf loops2 |
208 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
209 | top52 |
210 | nop |
211 | decfsz loops2, F |
212 | goto top52 |
213 | decfsz loops, F |
214 | goto top51 |
215 | retlw .0 |
216 | |
217 | RETURN |
218 | |
219 | ;******************************************************* |
220 | ; Warteschleife für 275 ms |
221 | WAIT6 |
222 | movlw .275 |
223 | movwf loops |
224 | |
225 | ; die top-Schleife verzögert 1 ms = 275 x 4µs |
226 | top61 |
227 | movlw .275 |
228 | movwf loops2 |
229 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
230 | top62 |
231 | nop |
232 | decfsz loops2, F |
233 | goto top62 |
234 | decfsz loops, F |
235 | goto top61 |
236 | retlw .0 |
237 | |
238 | RETURN |
239 | |
240 | ;******************************************************* |
241 | ; Warteschleife für 180 ms |
242 | WAIT7 |
243 | movlw .180 |
244 | movwf loops |
245 | |
246 | ; die top-Schleife verzögert 1 ms = 180 x 4µs |
247 | top71 |
248 | movlw .180 |
249 | movwf loops2 |
250 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
251 | top72 |
252 | nop |
253 | decfsz loops2, F |
254 | goto top72 |
255 | decfsz loops, F |
256 | goto top71 |
257 | retlw .0 |
258 | |
259 | RETURN |
260 | |
261 | ;******************************************************* |
262 | ; Warteschleife für 400 ms |
263 | WAIT8 |
264 | movlw .400 |
265 | movwf loops |
266 | |
267 | ; die top-Schleife verzögert 1 ms = 400 x 4µs |
268 | top81 |
269 | movlw .400 |
270 | movwf loops2 |
271 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
272 | top82 |
273 | nop |
274 | decfsz loops2, F |
275 | goto top82 |
276 | decfsz loops, F |
277 | goto top81 |
278 | retlw .0 |
279 | |
280 | RETURN |
281 | |
282 | ;******************************************************* |
283 | ; Warteschleife für 50 ms |
284 | WAIT9 |
285 | movlw .50 |
286 | movwf loops |
287 | |
288 | ; die top-Schleife verzögert 1 ms = 50 x 4µs |
289 | top91 |
290 | movlw .50 |
291 | movwf loops2 |
292 | ; die top2-Schleife verzögert 4 Takte = 4 µs |
293 | top92 |
294 | nop |
295 | decfsz loops2, F |
296 | goto top92 |
297 | decfsz loops, F |
298 | goto top91 |
299 | retlw .0 |
300 | |
301 | end |
Und die Schaltung soll so sein, das ich mit dem Ausgang 0 eine LED ansteuere und an dem Eingang 3 einen Taster habe, der mir die LED flackern lassen soll, oder aus macht. Hoffe, jetzt ist eine Glaskugel nicht mehr notwendig. Wenn noch was unklar ist, einfach schreiben. Bin total verzweifelt. Danke
Hallo piccer, mit ASM kanst Du mich so jagen, wie ich Dich mit C. Ich habe das ganze in MPLAB mit dem freien C-Compiler von Hi-Tech gemacht. Wenn Du eine aktuelle Version von MPLAB installierst, wird das im Anschluß gleich mitinsatlliert. Danach musst Du natürlich noch das Projekt entsprechend einrichten. Kann ich Dir bei Bedarf heute Abend mehr zu sagen, wenn ich zu Hause bin; Oder anders herum: Definiere das Flackern doch mal etwas genauer, dann kann ich Dir mit ein paar Zeilen entgegen kommen.
Hallo, bei der schnellen Durchsicht ist mir aufgefallen, daß die pull-ups nicht eingeschalten sind. Warscheinlich liegt es daran. hier dann noch der Code
1 | Hier die .asm : list p=10f200 |
2 | ;*********************************************************************** |
3 | ;* Pinbelegung |
4 | ;* ---------------------------------- |
5 | ;* GP: 0 > LED mit 1 kOhm Vorwiderstand |
6 | ;* 1 - |
7 | ;* 2 - |
8 | ;* GP: 3 > Taster als Eingang |
9 | ;* |
10 | ;*********************************************************************** |
11 | ; |
12 | ;sprut (zero) Bredendiek 05/2005 |
13 | ; |
14 | ; Blinklicht mit PIC10F202 am Pin GP0 |
15 | ; |
16 | ; Prozessor 10F202 (oder 10F200) |
17 | ; |
18 | ; Prozessor-Takt 4 MHz intern |
19 | ; |
20 | ; |
21 | ;*********************************************************************** |
22 | ; Includedatei für den 10F202 einbinden |
23 | |
24 | #include <p10f202.inc> |
25 | |
26 | radix dec |
27 | |
28 | ; Configuration festlegen: |
29 | ; kein codeprotection |
30 | ; kein WDT-Timer |
31 | ; kein Reset-Pin |
32 | |
33 | __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF |
34 | |
35 | ;*********************************************************************** |
36 | ; Variablen festlegen ab 10h |
37 | |
38 | cblock |
39 | dly_0 |
40 | dly_1 |
41 | dly_2 |
42 | endc |
43 | |
44 | #define LED GPIO,0 |
45 | #define TASTE GPIO,3 |
46 | |
47 | ;******************************************************* |
48 | ; Beginn des Programmcodes |
49 | |
50 | org 0x0000 |
51 | |
52 | movwf OSCCAL ; Oszillator kalibrieren |
53 | |
54 | movlw b'01001111' ; OPTION Pull-UP |
55 | option |
56 | |
57 | ; bcf CMCON0,CMPON ; Comparator off nur bei 10F204/206 |
58 | ;******************************************************* |
59 | ; Warten auf Taste GP3 |
60 | |
61 | |
62 | Taste1 |
63 | |
64 | |
65 | ;******************************************************* |
66 | |
67 | |
68 | ;******************************************************* |
69 | Mainloop |
70 | movlw b'00001110' ; GP0 output |
71 | tris GPIO |
72 | bcf LED |
73 | btfss TASTE ; Wenn Taste nicht gedrueckt |
74 | goto Mainloop ; dann springe |
75 | movlw 25 |
76 | call led_on |
77 | movlw 10 |
78 | call led_on |
79 | movlw 15 |
80 | call led_on |
81 | movlw 20 |
82 | call led_on |
83 | movlw 30 |
84 | call led_on |
85 | movlw 27 |
86 | call led_on |
87 | movlw 18 |
88 | call led_on |
89 | movlw 40 |
90 | call led_on |
91 | goto Mainloop ; Springe ins Hauptprogramm |
92 | |
93 | ;******************************************************* |
94 | |
95 | led_on |
96 | bsf LED |
97 | call delay_10ms |
98 | bcf LED |
99 | movlw 5 |
100 | |
101 | ;******************************************************* |
102 | |
103 | delay_10ms |
104 | movwf dly_0 |
105 | movlw 0xCE |
106 | movwf dly_1 |
107 | movlw 0x08 |
108 | movwf dly_2 |
109 | decfsz dly_1, f |
110 | goto $+2 |
111 | decfsz dly_2, f |
112 | goto $-3 |
113 | decfsz dly_0, f |
114 | goto delay_10ms |
115 | return |
Die verschachtelten Rücksprünge bei led_on würde ich nicht so machen auch wenn es in dieser Variante funktioniert. Besser wäre: led_on bsf LED call delay_10ms bcf LED movlw 5 call delay_10ms return auch die goto $ sollte man sich nicht erst angewöhnen. Ein zusatzlicher Befehl dazwischen und nichts geht mehr...
Die goto $ kommen von einem delay-generator, also automatisch generiert. Sorry.
So, habe das Prog. mal getestet. Doch leider ohne Erfolg. Wenn ich den Taster drücke, bleibt die LED dauerhaft an und geht nicht mehr aus. Als funktioniert die Schleife und das EIN7AUS schalten nicht. Schade, hatte mich so darauf gefreut. Eventuell kann ja noch mal einer nachscheuen, was der Fehler sein könnte. Noch mal zur Funktion : 1. Ich möchte mit dem Taster an GP3 eine Funktion ein- und wieder ausschalten (Wenn sie eingeschaltet ist, soll Sie solange die Funktion ausführen, bis die Taste erneut gedrückt wird.) 2. Die Funktion soll ein Flackerlicht sein, Ähnlich einem Feuer. (Mal länger oder kürzer an, oder mal länger oder kürzer aus) 3. Wenn es geht das Programm in .asm damit ich es verstehe Wenn es in C ist, auch kein Problem, aber dann bitte mit kleiner Anleitung, wie ich es in den Baustein bekomme. Danke. 4. Es muß alles in den PIC10F200 passen, denn das ist der Baustein, den ich dafür nehmen will und muß. Schon mal vielen Dank an Alle, die mir bisher geholfen haben und noch helfen werden ! Euer Piccer.
Hallo Piccer, 1. Du hast deine Taste nicht entprellt. 2. Momentan bleibt deine LED nur aus, wenn du die Taste ständig gedrückt hältst. Mainloop movlw b'00001110' ; GP0 output tris GPIO bcf LED ;LED ist aus btfss TASTE ; Wenn Taste nicht gedrueckt ;dann gehe zum restl. Code goto Mainloop ; dann springe ;solange die Taste gedrückt tu mal so: Hier die .asm : list p=10f200 ;*********************************************************************** ;* Pinbelegung ;* ---------------------------------- ;* GP: 0 > LED mit 1 kOhm Vorwiderstand ;* 1 - ;* 2 - ;* GP: 3 > Taster als Eingang ;* ;*********************************************************************** ; ;sprut (zero) Bredendiek 05/2005 ; ; Blinklicht mit PIC10F202 am Pin GP0 ; ; Prozessor 10F202 (oder 10F200) ; ; Prozessor-Takt 4 MHz intern ; ; ;*********************************************************************** ; Includedatei für den 10F202 einbinden #include <p10f202.inc> radix dec ; Configuration festlegen: ; kein codeprotection ; kein WDT-Timer ; kein Reset-Pin __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF ;*********************************************************************** ; Variablen festlegen ab 10h cblock dly_0 dly_1 dly_2 M0 endc #define LED GPIO,0 #define TASTE GPIO,3 ;******************************************************* ; Beginn des Programmcodes org 0x0000 movwf OSCCAL ; Oszillator kalibrieren movlw b'01001111' ; OPTION Pull-UP option ; bcf CMCON0,CMPON ; Comparator off nur bei 10F204/206 ;******************************************************* ; Warten auf Taste GP3 ;******************************************************* ;******************************************************* Mainloop movlw b'00001110' ; GP0 output tris GPIO bcf LED bcf M0,0 ;Merker gelöscht ; Start btfss M0,0 ;Funktion ein oder aus? goto Taste_ein ;Funktion ist aus, soll eingeschaltet werden Taste_aus btfss TASTE ; Taste gedrückt? goto AUS ;ja, dann schalte Flackerlicht aus movlw 25 ;nein, Flackerlicht an call led_on movlw 10 call led_on movlw 15 call led_on movlw 20 call led_on movlw 30 call led_on movlw 27 call led_on movlw 18 call led_on movlw 40 call led_on goto Start ; Springe ins Hauptprogramm AUS movlw .10 call delay_10ms ;Entprellung btfsc TASTE ;Taste immer noch gedrückt? goto Start ;nein, Abbruch btfss TASTE ;Warten bis Taste losgelassen goto $-1 bcf LED ;LED aus bcf M0,0 ;Merker löschen movlw .5 call delay_10ms goto Start Taste_ein btfsc TASTE ;Taste gedrückt? goto Start ;nein movlw .10 ;ja call delay_10ms ;Entprellung btfsc TASTE ;Taste immer noch gedrückt? goto Start ;nein, Abbruch btfss TASTE ;ja,warten bis Taste losgelassen goto $-1 bsf M0,0 ;ja, Flackerlicht ein movlw .5 call delay_10ms goto Start ;******************************************************* led_on bsf LED call delay_10ms bcf LED movlw 5 ;******************************************************* delay_10ms movwf dly_0 movlw 0xCE movwf dly_1 movlw 0x08 movwf dly_2 decfsz dly_1, f goto $+2 decfsz dly_2, f goto $-3 decfsz dly_0, f goto delay_10ms retlw 0 ;*******************************************************+++ end Das Programm habe ich nicht getestet, also keine Garantie darauf! Vielleicht hilft dir das auch so weiter. Ich muß jetzt auf dem Weihnachtsmarkt! Viel Glück für dein Krippenlagerfeuer!!! MfG Erhard
Sorry, das ich mich erst jetzt wieder melde. Hatte ein wenig Stress auf der Arbeit!! Ich habe Dein (@Erhard) Programm getestet, doch leider scheint etwas nicht zu funktionieren! Wenn ich den Pic10F200 schiesse und dann einstecke, ist die LED sofort an und reagiert auch nicht auf den Taster! Man sieht auch kein Flackern! SCHADE ! Doch es wird langsam Zeit, da meine Frau immer mehr am drängeln ist ! Die Krippe hat immer noch kein Feuer !!! :-( Ich hoffe, jemand kann mir den entscheidenden Tip geben! Entweder eines der oberen Programme zu erweitern, oder einen anderen Vorschlag zu unterbreiten, der funktioniert. Vielen Dank schon einmal für alle tatkräftige Unterstützung. Ich wünsche schon mal allen ein schönes und frohes Weihnachtsfest. Euer Piccer.
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.