mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pic10F200 - Programm mit Taste (Ein/Aus)


Autor: Heinrich Picker (piccer)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: roeben (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Heinrich Picker (piccer)
Datum:

Bewertung
0 lesenswert
nicht 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 :
  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>

; Configuration festlegen:
;  kein codeprotection
;  kein WDT-Timer
;  kein Reset-Pin

  __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF

;***********************************************************************
; Variablen festlegen ab 10h

  cblock  0x10
  loops
  loops2
  endc
  wert

  #define  LED  GPIO,0
  #define TASTE  GPIO,3

;*******************************************************
; Beginn des Programmcodes

  org  0x0000

  movwf  OSCCAL    ; Oszillator kalibrieren

  movlw  b'00001110'  ; GP0 output
  tris  GPIO

;  bcf  CMCON0,CMPON  ; Comparator off nur bei 10F204/206
;*******************************************************
; Warten auf Taste GP3


Taste1
  btfsc  TASTE    ; Wenn Taste gedrueckt
  call Mainloop    ; Bei Taste ins Unterprogramm
  goto  Taste1    ; bei keiner Taste weiter


;*******************************************************


;*******************************************************
Mainloop
  bsf  LED    ; LED an
  call  WAIT1    ; 250 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT2    ; 100 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT3    ; 150 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT4    ; 200 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT5    ; 300 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT6    ; 275 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT7    ; 180 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  bsf  LED    ; LED an
  call  WAIT8    ; 400 ms warten
  bcf  LED    ; LED aus
  call  WAIT9    ; 50 ms warten

  Return      ; Springe ins Hauptprogramm

;*******************************************************
; Warteschleife für 50 ms
WAIT1
  movlw  .250
  movwf  loops

; die top-Schleife verzögert 1 ms = 250 x 4µs
top11  
  movlw   .250
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top12
  nop
        decfsz  loops2, F 
        goto    top12
        decfsz  loops, F
        goto    top11
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 100 ms
WAIT2
  movlw  .100
  movwf  loops

; die top-Schleife verzögert 1 ms = 15 x 4µs
top21
  movlw   .100
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top22
  nop
        decfsz  loops2, F 
        goto    top22
        decfsz  loops, F
        goto    top21
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 150 ms
WAIT3
  movlw  .150
  movwf  loops

; die top-Schleife verzögert 1 ms = 150 x 4µs
top31  
  movlw   .150
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top32
  nop
        decfsz  loops2, F 
        goto    top32
        decfsz  loops, F
        goto    top31
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 200 ms

WAIT4
  movlw  .200
  movwf  loops

; die top-Schleife verzögert 1 ms = 200 x 4µs
top41  
  movlw   .200
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top42
  nop
        decfsz  loops2, F 
        goto    top42
        decfsz  loops, F
        goto    top41
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 300 ms
WAIT5
  movlw  .300
  movwf  loops

; die top-Schleife verzögert 1 ms = 300 x 4µs
top51  
  movlw   .300
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top52
  nop
        decfsz  loops2, F 
        goto    top52
        decfsz  loops, F
        goto    top51
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 275 ms
WAIT6
  movlw  .275
  movwf  loops

; die top-Schleife verzögert 1 ms = 275 x 4µs
top61  
  movlw   .275
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top62
  nop
        decfsz  loops2, F 
        goto    top62
        decfsz  loops, F
        goto    top61
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 180 ms
WAIT7
  movlw  .180
  movwf  loops

; die top-Schleife verzögert 1 ms = 180 x 4µs
top71  
  movlw   .180
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top72
  nop
        decfsz  loops2, F 
        goto    top72
        decfsz  loops, F
        goto    top71
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 400 ms
WAIT8
  movlw  .400
  movwf  loops

; die top-Schleife verzögert 1 ms = 400 x 4µs
top81  
  movlw   .400
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top82
  nop
        decfsz  loops2, F 
        goto    top82
        decfsz  loops, F
        goto    top81
        retlw  .0

  RETURN

;*******************************************************
; Warteschleife für 50 ms
WAIT9
  movlw  .50
  movwf  loops

; die top-Schleife verzögert 1 ms = 50 x 4µs
top91  
  movlw   .50
        movwf   loops2
; die top2-Schleife verzögert 4 Takte = 4 µs
top92
  nop
        decfsz  loops2, F 
        goto    top92
        decfsz  loops, F
        goto    top91
        retlw  .0

  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

Autor: roeben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: roeben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja schon gut. Habs jetzt auch gesehen...

Autor: Chris S. (schris)
Datum:

Bewertung
0 lesenswert
nicht 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


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
  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


Taste1


;*******************************************************


;*******************************************************
Mainloop
  movlw  b'00001110'  ; GP0 output
  tris  GPIO
  bcf LED
  btfss  TASTE    ; Wenn Taste nicht gedrueckt
  goto Mainloop    ; dann springe
  movlw 25
  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 Mainloop      ; Springe ins Hauptprogramm

;*******************************************************

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
  return



Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Chris S. (schris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die goto $ kommen von einem delay-generator, also automatisch generiert.
Sorry.

Autor: Heinrich Picker (piccer)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heinrich Picker (piccer)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.