A todos:
Acabo de hablar con la gente de elemon, que son los distribuidores de Microchip en Argentina
( Distributors
Electronica Elemon S.A.
Franklin D. Roosevelt 5415
Ciudad de Buenos Aires, C1431 BZM
Argentina
Phone: +54-11-4523-5555
Fax: +54-11-4522-7335
Email: ventas@elemon.com.ar
y en cuanto les comento sobre los elementos para el mtouch que me habia comentado nocturno, la respuesta que obtuve fue algo parecido a :
-Uh?
Eso es todo. Después, tras intentar aclarar algo, me comentó que ellos traían los materiales de acuerdo al interés que demostraban los posibles clientes en los productos. Que por el momento no lo tenían , ni sabían de la existencia. Así que le expliqué al vendedor lo que yo había aprendido leyendo la página. Por lo menos uno de los dos terminó sabiendo algo mas.
Así que, habiendo conseguido unicamente el pic12c508 y el programador que venden en mercado libre
Foto del Grabador de picvoy a tratar de encarar el primer proyecto del sensor de la elektor del 2004 con pic12c508.
http://www.elektor-electronics.co.uk/magazines/2004/february/magazines/2004/february/touch-controlled-switch.56808.lynkxExplicacion del proyecto:
You don’t need special ICs when a capacitive (or ‘touch’) switch can also be realised with an inexpensive PIC controller. This article shows how it’s done.Over the past few years several manufacturers have come up with special integrated circuits for touch control switches. These ICs usually operate on the principle of capacitive change, work perfectly but are hard to obtain as well as relatively expensive. Fortunately, a capacitive switch may also be realised using ‘traditional’ means, i.e., a little physics and a microcontroller.
Components
Resistors:
R1,R6 = 10kO (SMD shape 0805)
R2,R3,R4 = 100kO (SMD shape 0805)
R5 = 1kO (SMD shape 0805)
R7 = 470Ohm (SMD shape 0805)
Capacitors:
C1 = 470nF(SMD shape 1206)
C2 = 100nF (SMD shape 0805)
Semiconductors:
D1 = Chip LED, red, (SMD shape 0805)
T1 = BC847 (SOT23 case)
IC1 = PIC12C508A04/SO8, programmed, order code 030214-41
Miscellaneous:
K1 = 4-way mini PCB terminal block, lead pitch 2.5mm
PAD = sensor area (see text)
Disk, PIC source code file, order code 030214-11 or Free Download
=====================================
;**********************************************************************
; C_TASTE2.ASM *
; Kapazitive Taste fuer PIC12C50x *
; 25.09.2003 Juergen Wickenhaeuser WWW.WICKENHAEUSER.DE *
; *
; Versioninfo @ Binaries End! *
; *
;**********************************************************************
list p=12c509 ; list directive to define processor
#include <p12c509.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_ON & _MCLRE_OFF & _IntRC_OSC
RADIX dec
;***** CONSTANTS
MAXCNTH EQU 42 ; fuer ca. 80 msec, zaehlt max. ADH=MAXCNTH
LEVEL EQU 10 ; Sollwert fuer TRIG=ADH-LEVEL (Ausl. wenn ADH<TRIG)
SVLOOPS EQU 50 ; Anzahl Messungen pro Servo-Korrektur nach unten
;***** VARIABLE DEFINITIONS (start at Adr 7 on PIC12)
CNT EQU 7
ADL EQU 8 ; Messwert Low
ADH EQU 9 ; Messwert High
SIG EQU 10 ; Aktuelle Bit-Werte der OUT-Pins
TRIG EQU 11 ; Trigger-Wert (fuer ADL)
WFB EQU 12 ; Mathematisches Hilfs-W-Register B
SVCNT EQU 13 ; Alle x Scans Servo
;***** PIN DEFINITION
RPORT EQU GPIO ; Make it portable to other devices...
DPIN EQU 0 ; O/T Discharge-Pin
HPIN EQU 1 ; O/T Hold-Pin
CPIN EQU 2 ; O/T Charge-Pin
QPIN EQU 3 ; I Querry (Kollektor-Sensor)
SPIN EQU 4 ; O Signal-Pin
BPIN EQU 5 ; O Bit-Pin Ausgabe der Cnts
; ***** PROGRAM ****
ORG 0x000
; movlw 2
; movwf TRIG ; Triggerschwelle setzen
; movlw 5
; movwf ADH ; Triggerschwelle setzen
; movlw 2
; movwf SVCNT
;x: call servo
; goto x
; *** Initialisieren
movlw 128+64+7+8 ; Disable Pullups, Watchdog slow, No Wake on Pin Change
option
btfss STATUS,NOT_TO
goto main ; skipped if was a power up
clrf SIG ; Power-On-Reset Kein Signal
clrf TRIG ; Unempfindlich am Anfang!
movlw 1
movwf SVCNT ; sofortstart
; *** MAIN-Schleife
main:
clrwdt ; Watchdog ca. 1/sec.
call disch
call load
call trigger ; Vergleichen?
call servo ; Nachfuehren
call pulsel ; Wenig Pulse reichen...
goto main
; *** trigger: Schwelle vergleichen und evtl LED ausloesen, Ausgabe spaeter...
trigger: movf TRIG,W
movwf WFB ; WFB=TRIGER
movlw LEVEL/2 ; Trigger-Schwelle
btfss SIG,SPIN ; Wenn ausgeloest: Trigger hoch!
addwf WFB,F
movf ADH,W
subwf WFB,W
btfsc STATUS,C
goto t1
; * ADH >= TRIG: Led aus
bsf SIG,SPIN
retlw 0
t1: ; * ADH < TRIG: Led an
bcf SIG,SPIN
retlw 0
; *** Servo: fuehrt TRIG alle x Aufrufe nach
servo: movlw LEVEL
addwf TRIG,W
movwf WFB ; W = WFB = TRIG+LEVEL
subwf ADH,W ; ADH-(TRIG+LEVEL); C wenn <0
btfss STATUS,C
goto s2
movf ADH,W
subwf WFB,W ; (TRIG+LEVEL)-ADH: C wenn <0
btfss STATUS,C
goto s1
retlw 0
s1: incf TRIG,F ; Schwelle hoch sofort
retlw 0
s2: decfsz SVCNT,F ; Schwelle runter langsam
retlw 0
movlw SVLOOPS
movwf SVCNT ; Loop neu setzen
decfsz TRIG,W
movwf TRIG
retlw 0
; *** Pulse ausgeben am BPIN (ADH:ADL) (0 ist technisch gesehen nicht moeglich->Fehler in HW?)
; *** Pulse werden per Open-Drain ausgegeben, d. h. ohne Pull-Up gibt es keine Stoerungen!
; *** 1. Version: Alle Pulse ausgeben
;pulseh: movf ADL,F
; btfss STATUS,Z
; incf ADH,F ; Wenn nicht Zero: Incrementieren!
; movf SIG,W ;
; andlw ~(1<<BPIN) ; B-Pin auf 0 (Pull-Down)
; movwf RPORT ; -> Pulse E
;p1: movlw ~((1<<DPIN)|(1<<HPIN)|(1<<CPIN)|(1<<SPIN)) ; Alle Output-Pins ausser BPIN ausgeben
; tris RPORT
; movlw ~((1<<DPIN)|(1<<HPIN)|(1<<CPIN)|(1<<SPIN)|(1<<BPIN)) ; Alle Output-Pins inkl. BPIN ausgeben
; tris RPORT
; decfsz ADL,F
; goto p1
; decfsz ADH,F
; goto p1
; retlw 0
; *** 2. Version: Nur ADH-Pulse+1
pulsel: incf ADH,F ; ADH+=1
movf SIG,W ;
andlw ~(1<<BPIN) ; B-Pin auf 0 (Pull-Down)
movwf RPORT ; -> Pulse E
p2: movlw ~((1<<DPIN)|(1<<HPIN)|(1<<CPIN)|(1<<SPIN)) ; Alle Output-Pins ausser BPIN ausgeben
tris RPORT
movlw ~((1<<DPIN)|(1<<HPIN)|(1<<CPIN)|(1<<SPIN)|(1<<BPIN)) ; Alle Output-Pins inkl. BPIN ausgeben
tris RPORT
decfsz ADH,F
goto p2
retlw 0
; *** Kondensator total entladen und AD-Zaehler loeschen
disch:
; * zur Sicherheit SIG maskieren
movf SIG,W
andlw (1<<SPIN) ; Nur Sigpin ist statisch...
movwf SIG
movwf RPORT
movlw ~((1<<DPIN)|(1<<HPIN)|(1<<CPIN)|(1<<SPIN)|(1<<BPIN)) ; Alle Output-Pins ausgeben
tris RPORT
movlw 250 ; ca. 1 msec: ca. 10 Tau sollten reichen fuer 100 nF/1k
goto delay ; spart return...
; *** Kondensator laden bis Signal an Q-Pin, Preload muss Teiler von 256 sein!
; *** Das Laden erfolgt etwas "verrauscht"
load: ; * Zaehler vorladen
clrf ADL
movlw (-MAXCNTH) ; Offset abziehen (bis 0000)
movwf ADH
movf SIG,W ; Maske der O-Pins holen
iorlw (1<<CPIN) ; CPIN=1, HPIN=0 dazu
movwf RPORT
movlw ~((1<<HPIN)|(1<<CPIN)|(1<<SPIN)|(1<<BPIN)) ; Ausgabepins setzen
load1: tris RPORT ; [1] W an Rport
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
tris RPORT ; [1]
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
btfss RPORT,QPIN ; [2]wenn Signal: Ende!
goto loadx ; [-] 0 addieren
incf ADL,F ; [1]
tris RPORT ; [1] W an Rport
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
tris RPORT ; [1]
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
btfss RPORT,QPIN ; [2]wenn Signal: Ende!
goto loadx ; [-] Ende
incf ADL,F ; [1]
nop
nop
nop
tris RPORT ; [1] W an Rport
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
tris RPORT ; [1]
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
btfss RPORT,QPIN ; [2]wenn Signal: Ende!
goto loadx ; [-] Ende
incf ADL,F ; [1]
nop
tris RPORT ; [1] W an Rport
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
tris RPORT ; [1]
xorlw (1<<CPIN)|(1<<HPIN) ; [1]
btfss RPORT,QPIN ; [2]wenn Signal: Ende!
goto loadx ; [-] Ende
incfsz ADL,F ; [1]
goto load1 ; [2, Summe: 33/4: ca. 120kHz] Low-Byte
incfsz ADH,F ; High-Byte
goto load1 ; Ansonsten kein Signal (0000)
loadx: movlw MAXCNTH
addwf ADH,F ; Offset addieren
retlw 0 ; und Ende...
; *** Delay W * 4 cycles (1 Dig = 4 usec, verwendet CNT)
delay: movwf CNT
del1: clrwdt
nop
decfsz CNT,F ; 4*W pulses
goto del1
retlw 0
; *** Versioninfo ***
info: retlw 'V'
retlw '1'
retlw '.'
retlw '0'
retlw '0'
retlw 0xFF ; END Sentinel
END ; <END>
=====================================
Primera pregunta: Es este el lugar donde postear estos temas o tengo que abrir otro post en algun otro lado?