Pic10F200 - Programm mit Taste (Ein/Aus)

#1057505
Lesenswert?

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.
Gast #1057767
Lesenswert?

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.
Angehängte Dateien:
#1058567
Lesenswert?

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
Gast #1058597
Lesenswert?

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.
#1058742
Lesenswert?

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
#1062603
Lesenswert?

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.
Gast #1062814
Lesenswert?

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
#1076519
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren