Академический Документы
Профессиональный Документы
Культура Документы
Casa
También necesitarás:
PIC2 USB Burner (MPASM y MPLAB vienen con PIC2) e incluye cable USB
Notepad2.zip Notepad2.exe
Biblioteca de Sub-rutinas "Cortar y Pegar"
Biblioteca de rutinas: AE EP PZ.
INSTRUCCIONES DE USO
Configure los dos detectores IR y los dos LED IR (transmisores) para que el circuito emita un pitido grave
cuando se interrumpe el detector izquierdo y un pitido agudo cuando se interrumpe el detector derecho.
El circuito
El circuito es muy simple. Son solo 2 LEDs IR, dos receptores IR, un interruptor para escuchar el conteo
(los pitidos de tonos bajos representan los 10 y los pitidos agudos representan los de 1) y un diafragma
piezoeléctrico. Todo el trabajo es realizado por el micro. Está alimentado por 4 células AAA.
CONSTRUCCIÓN
Puedes construir el circuito en placa matriz.
El kit de componentes incluye todas las piezas que necesita para que el proyecto funcione, incluido un
chip preprogramado y la placa de matriz.
Para modificar el programa, necesitará un programador PICkit-2, que viene con 2 CD que contienen todo
el software necesario para la programación en circuito.
También necesitará un cable (viene con PICkit-2) para conectar el programador a su ordenador portátil a
través del puerto USB y un adaptador que llamamos Adaptador de 6 pines a 5 pines para conectar el
PICkit-2 a su proyecto.
PROGRAMANDO EL CHIP
El kit viene con un chip PIC preprogramado, pero si desea programar su propio chip o modificar el
programa, el archivo .hex está disponible, así como el archivo de ensamblaje, para que pueda ver cómo se
ha escrito el programa y ver el Comentarios para cada línea de código.
El PIC12F629 es uno de los micros más pequeños de la gama, pero se sorprenderá de lo mucho que se
puede lograr con un micro tan pequeño.
El programa contiene sub-rutinas para producir retrasos, secuencias en la pantalla y tanto leer como
escribir EEPROM; los trabajos que requieren un código preciso, incluida una secuencia especial, se
denominan una secuencia de intercambio que evita que se escriba la EEPROM debido a problemas
técnicos.
Incluso un programa tan simple como este no es fácil de armar y para ayudar en esta área, hemos
proporcionado una gran cantidad de material de apoyo.
No solo proporcionamos una serie de programas con documentación completa, sino que nuestro
enfoque de la programación es simple.
Implica un método de "copiar y pegar" mediante el cual las subrutinas se toman de un código escrito
previamente y se copian en su programa. Las modificaciones se realizan en pasos muy pequeños para que
cada una pueda probarse antes de agregar más código.
Así es exactamente como producimos un proyecto complejo. Cada paso se escribe y se prueba antes de
agregar el siguiente paso.
Esto ahorra mucha frustración ya que es muy fácil agregar una línea de código que es incorrecta y
obtener un resultado insospechado.
Si sigue nuestras sugerencias, comprará un programador ("quemador") llamado PICkit-2 si está usando
una computadora portátil. Es el mejor y más barato del mercado y viene con un cable USB y 2 CD que
contienen los programas necesarios para "quemar" el chip. Si está utilizando un escritorio y / o una torre con
un puerto serie, puede usar un programador más económico llamado MultiChip Programmer de Talking
Electronics. También necesitarás NotePad2 para escribir tu programa .asm. Esto se puede descargar
desde el sitio web de Talking Electronics. Usará BeeCounter.asm o BeeCounter-asm.txt como base y es
mejor cambiar solo unas pocas líneas a la vez para ver qué efecto se crea. También necesitará un conector
de 6 a 5 pines que se ajuste entre el quemador y el proyecto. Esto también está disponible en el sitio web
de Talking Electronics.
Como dijimos anteriormente, este proyecto es para programadores de nivel medio a avanzado ya que es
muy compacto y no tiene patillas de programación en el circuito.
Para poder modificar el chip, necesitará un zócalo de programación y esto se puede obtener de uno de
nuestros otros proyectos que contiene los 5 pines para la programación en circuito. O puede construir un
zócalo de programación agregando un zócalo a una placa de PC de montaje en superficie y soldando 5
pines a un borde y conectando el zócalo a los pines.
A continuación, puede poner el chip en el zócalo y programarlo.
LENGUAJE DE PROGRAMACIÓN
Hay una serie de kits, programas y cursos en el mercado que afirman y sugieren que enseñan
Programación PIC.
La mayoría de estos módulos y cursos utilizan un microcontrolador PIC como el chip que lleva a cabo los
procesos, pero la programación real se realiza mediante un lenguaje patentado inventado por el diseñador
del curso.
Aunque estos cursos son maravillosos para ingresar a "Microcontroladores de programación", no utilizan
ninguno de los términos o códigos que se aplican a la familia de microcontroladores PIC.
Todos nuestros proyectos utilizan las 33 instrucciones que vienen con el microcontrolador PIC y son muy
fáciles de aprender.
Utilizamos toda la capacidad del micro y nuestro chip preprogramado es menor que el costo de hacerlo
de otra manera.
Además, cualquier cosa diseñada a través de nuestro método puede transferirse instantáneamente a un
dado PIC y producirse en masa. Y usamos todos los pines de entrada y toda la memoria del chip. Los otros
enfoques utilizan menos del 25% de la capacidad de la memoria y uno de los pines no está disponible.
De hecho, sería difícil reproducir este proyecto a través de cualquiera de los métodos de oposición.
Requeriría un chip más grande y más gasto.
Puedes usar nuestro método o la oposición. Solo ten en cuenta que los dos no son intercambiables.
La nuestra está clasificada como la "forma" (nivel) más baja de la programación, comúnmente llamada
código de máquina, inventada en los primeros días de los microprocesadores, y ahora llamada
programación mnemónica, ya que cada línea de código está formada por letras de un conjunto de palabras.
La oposición utiliza un lenguaje de nivel superior donde una instrucción puede realizar una operación similar
a una sub-rutina.
Pero tienes que aprender el "lenguaje de nivel superior" para crear un programa. Y esto requiere una
buena cantidad de habilidad y capacidad.
Suena genial y es una buena idea. Pero si quieres aprender programación PIC, no te ayuda. Es "un paso
eliminado" de aprender el lenguaje PIC. La otra desventaja de la oposición es la "sobrecarga". Los 1,000
espacios asignados para su programa están llenos de sub-rutinas escritas previamente. Es posible que solo
necesite 10 de estas sub-rutinas, pero TODAS se cargan en el espacio de la memoria. Y se llevan toda la
memoria.
No tienes espacio para tu propio programa.
Para evitar esto, la oposición usa los 128 bytes en EEPROM para entregar instrucciones sobre cómo
aplicar las subrutinas. Esto proporciona aproximadamente 30 instrucciones poderosas que usan su lenguaje
llamado BÁSICO (o un idioma similar).
Es un poco como vender un diario lleno de todos los párrafos que necesita para expresarse, y dejar
algunas páginas en blanco en la parte posterior para que escriba líneas simples, tales como: vea la página
24, párrafo 7, vea la página 63 párrafo 4, para Crea tus entradas de diario.
Depende de cuánto quieras estar a cargo de escribir un programa. Usar nuestro método es como escribir
tu propia auto-biografía. Usar la oposición es como conseguir un "escritor fantasma".
Al utilizar un lenguaje de nivel superior para crear un programa, no tiene absolutamente ninguna idea de
cómo se genera el código para el micro.
En algunos de los kits de desarrollo, el código está "bloqueado" y NUNCA puede acceder a él.
Todo funciona sin problemas hasta que aparece una falla. Con nuestro método puedes ver el código.
Con los otros métodos, no puede ver el código; es como hacer una cirugía de agujero de llave sin la ventaja
de un endoscopio iluminado para ver lo que está haciendo.
Todo tiene su lugar y nuestro método de ensamblaje a mano solo es adecuado para micros muy
pequeños y eventualmente necesitará "aprender un lenguaje de alto nivel". El PIC12F629 tiene más de
1,000 ubicaciones para el código y esto equivale a más de 20 páginas cuando se imprime, por lo que se
trata del límite para hacer las cosas a mano.
Pero nuestro impulso es mostrar cuánto se puede hacer con los dispositivos más simples del mercado, al
menor costo.
Cualquiera puede mostrarle alta tecnología a un alto precio, pero no es aquí donde comienza y no es
donde adquiere entusiasmo.
Te proporcionamos las cosas para que comiences. Esa es la diferencia.
El programa
El programa se inicia en un bucle para detectar cuándo se interrumpe el detector IR izquierdo. Luego
pasa a un segundo bucle para detectar cuándo se interrumpe el detector IR correcto. Cuando se interrumpe
un detector de IR, la salida se pone en ALTO. La sensibilidad se puede ajustar moviendo el LED IR más
cerca del receptor. También se incluye una olla de 10k para ajustar la sensibilidad.
Cuando se interrumpe el detector IR derecho, se incrementa un "archivo de conteo" y se produce una
salida de 10 ms a través de un transistor PNP. Una 100R en la salida protege al transistor de cualquier
cortocircuito.
Un LED indica que la salida ha sido enviada.
El proyecto mantiene una cuenta del número de "ciclos" y esto se puede "leer" presionando el interruptor.
El conteo se registra al escuchar los tonos bajos para representar los 10 y los tonos altos para
representar los 1.
;**************************************************************
;; Contador de abejas .asm
;**************************************************************
; El IR izquierdo detecta y luego aumenta la cuenta en la detección del lado
derecho
; 12F629.asm
; 8-1-2012
lista p = 12F629
radix dec
incluye "p12f629.inc"
; ************************************************** ***************
; Es igual a
; ************************************************** ***************
estado equ 0x03
rp1 equ 0x06
rp0 equ 0x05
GPIO equ 0x05
; bits en GPIO
bits
; ************************************************** ***************
; Inicio del programa
; ************************************************** ***************
Iniciar org 0x00; restablecer dirección de vector
nop
nop
nop
nop; NOP para pasar la dirección de reinicio del vector
nop
nop; configurar para permitir el conteo desde un oscilador externo
; ************************************************** ***************
; * Retrasos
; ************************************************** ***************
_10mS movlw 0Ah
movwf temp2
D_a nop
decfsz temp1,1
goto D_a
decfsz temp2,1
goto D_a
retlw 00
; ****************************
; * Sub-rutinas *
; ****************************
pitido corto
movlw 0ffh
movwf del_y
movlw .45
movwf del_x
nop
decfsz del_x, 1
goto $ -2
movlw b'00010000 '
xorwf gpio, 1; alternar GP4
decfsz del_y, 1
goto $ -8
llamada D_250mS
retlw 00
unidades beep
movlw 80h
movwf del_y
movlw .45
movwf del_x
nop
decfsz del_x, 1
goto $ -2
movlw b'00010000'
xorwf gpio, 1; alternar GP4
decfsz del_y, 1
goto $ -8
llamada D_250mS
llamada D_250mS
retlw 00
bip de la izquierda
movlw 80h
movwf del_y
movlw .45
movwf del_x
nop
decfsz del_x, 1
goto $ -2
movlw b'00010000 '
xorwf gpio, 1; alternar GP4
decfsz del_y, 1
goto $ -8
llamada D_250mS
llamada D_250mS
retlw 00
Tensión
movlw 0ffh
movwf del_y
movlw 0ffh
movwf del_x
nop
decfsz del_x, 1
goto $ -2
movlw b'00010000 '
xorwf gpio, 1; alternar GP4
decfsz del_y, 1
goto $ -8
llamada D_250mS
llamada D_250mS
retlw 00
beep derecho
movlw 0ffh
movwf del_y
movlw 0ffh
movwf del_x
nop
decfsz del_x, 1
goto $ -2
movlw b'00010000 '
xorwf gpio, 1; alternar GP4
decfsz del_y, 1
goto $ -8
llamada D_250mS
llamada D_250mS
retlw 00
; ************************************************** ***************
;* Principal *
; ************************************************** ***************
Estado bsf principal, rp0; Banco 1
movlw b'11101101 '; conmutadores y receptores IR GP0 GP2 GP3
movwf trisio
estado bcf, rp0; banco 0
bsf GPIO, 1; apagar el LED de salida
llamada D_250mS
btfss GPIO, 2; la entrada será BAJA cuando se pulsa sw
salida de llamada
nop
btfss GPIO, 0; la entrada será ALTA cuando se detecte una abeja
goto $ -5; el IR izquierdo no detecta
llamar a la izquierda
llamada D_250mS
btfss GPIO, 2; la entrada será BAJA cuando se pulsa sw
salida de llamada
nop
btfss GPIO, 3; la entrada será ALTA cuando se detecte una abeja
goto $ -5; no se detecta el IR derecho
llamada, cuenta de incremento
llamar a la derecha
bcf gpio, 1
llamar a _10mS
bsf gpio, 1
goto $ -18
fin
2 - resistencias 100R SM
2 - resistencias 330R SM
2 - resistencias 1k SM
3 - resistencias 2k2 SM
2 - resistencias 4k7 SM
1 - resistencia de 10k SM
1 - transistor BC847 SM
1 - transistor BC857 SM
1 - 1N4004 diodo SM
2 - LEDs IR (suministrados en el kit)
2 - Transistores IR (suministrados en kit)
01/09/2012
BEE COUNTER
Home
The design for the project comes from a University research scientist.
His requirement was to count the movement of a bee in a tube.
Two sets of Infrared photo-detectors were set up so movement from one end of the tube could be
counted when the bee returns to the opposite end of the tube. It's a simple flip-flop or toggle requirement.
The CIRCUIT
The circuit is very simple. It is just 2 IR LEDs, two IR receivers a switch to listen to the count (low-tone
beeps represent 10's and high-pitched beeps represent 1's) and a piezo diaphragm. All the work is done by
the micro. It is powered by 4 AAA cells.
CONSTRUCTION
You can build the circuit on matrix board.
The kit of components comes with all the parts you need to get the project working, including a pre-
programmed chip and the matrix board.
To modify the program you will need a PICkit-2 programmer and this comes with 2 CD's containing all the
software needed for In-Circuit Programming.
You will also need a lead (comes with PICkit-2) to connect the programmer to your lap top via the USB
port and an adapter we call 6pin to 5 pin Adapter to connect the PICkit-2 to your project.
PROGRAMMING LANGUAGE
There are a number of kits, programs and courses on the market that claim and suggest they teach PIC
Programming.
Most of these modules and courses use a PIC microcontroller as the chip carrying out the processes, but
the actual programming is done by a proprietary language invented by the designer of the course.
Although these courses are wonderful to get you into "Programming Microcontrollers" they do not use any
of the terms or codes that apply to the PIC microcontroller family.
All our projects use the 33 instructions that come with the PIC Microcontroller and these are very easy to
learn.
We use the full capability of the micro and our pre-programmed chip is less than the cost of doing it any
other way.
In addition, anything designed via our method can be instantly transferred to a PIC die and mass
produced. And we use all the input pins and all the memory of the chip. The other approaches use less than
25% of the capability of the memory and one of the pins is not available.
In fact it would be difficult to reproduce this project via any of the opposition methods. It would require a
larger chip and more expense.
You can use our method or the opposition. Just be aware that the two are not interchangeable.
Ours is classified as the lowest "form" (level) of programming - commonly called machine code - invented
in the early days of microprocessors - and now called mnemonic programming as each line of code is made
up of letters of a set of words. The opposition uses a higher level language where one instruction can carry
out an operation similar to a sub-routine.
But you have to learn the "higher level language" in order to create a program. And this requires a fair
amount of skill and capability.
It sounds great and it is a good idea. But if you want to learn PIC programming, it does not assist you. It is
"a step removed" from learning PIC language. The other disadvantage of the opposition is the "overhead."
The 1,000 spaces allocated for your program is filled with pre-written sub-routines. You may require only 10
of these sub-routines but ALL of them are loaded in the memory space. And they take up all the memory.
You have no room for your own program.
To get around this the opposition uses the 128 bytes in EEPROM to deliver instructions on how to apply
the sub-routines. This provides about 30 powerful instructions using their language called BASIC (or a similar
language).
It's a bit like selling a diary filled with all the paragraphs you need to express yourself, and leaving a few
blank pages at the back for you to write single lines such as: see page 24, paragraph 7, see page 63
paragraph 4, to create your diary entries.
It depends on how much you want to be in charge of writing a program. Using our method is like writing
your own auto-biography. Using the opposition is like getting a "ghost writer."
When using a higher level language to create a program, you have absolutely no idea how the code is
generated for the micro.
In some of the developmental kits, the code is "locked away" and you are NEVER able to access it.
Everything runs smoothly until a fault appears. With our method you can see the code. With the other
methods, you cannot see the code - it's like doing key-hole surgery without the advantage of an illuminated
endoscope to see what you are doing.
Everything has its place and our method of hand-assembly is only suitable for very small micros and you
will eventually need to "learn a high level language." The PIC12F629 has over 1,000 locations for code and
this equates to more than 20 pages when printed, so this is about the limit to doing things by hand.
But our drive is to show how much can be done with the simplest devices on the market, at the lowest
cost.
Anyone can show you high-technology at a high price but this is not where you start and this is not where
you get enthusiasm.
We provide the things to get you started. That's the difference.
The PROGRAM
The program starts in a loop to detect when the left IR detector is interrupted. It then goes to a second
loop to detect when the right IR detector is interrupted. When an IR detector is interrupted, the output goes
HIGH. The sensitivity can be adjusted by moving the IR LED closer to the receiver. A 10k pot is also included
to adjust the sensitivity.
When the right IR detector is interrupted, a "count file" is incremented and a 10mS output is produced via
a PNP transistor. A 100R on the output protects the transistor from any short-circuits.
A LED indicates the output has been sent.
The project keeps a tally of the number of "cycles" and this can be "read" by pressing the switch.
The count is recorded by listening to low-pitched beeps to represent 10's and high-pitched beeps to
represent 1's.
;*************************************************************
; Bee Counter.asm
;*************************************************************
;Left IR detects then increments count on right-side detection
; 12F629.asm
; 8-1-2012
list p=12F629
radix dec
include "p12f629.inc"
;****************************************************************
;Equates
;****************************************************************
status equ 0x03
rp1 equ 0x06
rp0 equ 0x05
GPIO equ 0x05
; bits on GPIO
pin7 equ 0 ;GP0 left IR detector - input
pin6 equ 1 ;GP1 goes low to produce HIGH signal - output
pin5 equ 2 ;GP2 Sw input sends count to beeper - input
pin4 equ 3 ;GP3 right IR detector - input
pin3 equ 4 ;GP4 beeper - output
pin2 equ 5 ;GP5
;bits
rp0 equ 5 ;bit 5 of the status register
;****************************************************************
;Beginning of program
;****************************************************************
Start org 0x00 ;reset vector address
nop
nop
nop
nop ;NOPs to get past reset vector address
nop
nop ;set up to allow counting from external oscillator
;****************************************************************
;* Delays
;****************************************************************
_10mS movlw 0Ah
movwf temp2
D_a nop
decfsz temp1,1
goto D_a
decfsz temp2,1
goto D_a
retlw 00
;Delay 0.25 sec
;****************************
;* Sub-routines *
;****************************
;output produces long beeps for tens
;and short beeps for units to signify count.
shortbeep
movlw 0ffh
movwf del_y
movlw .45
movwf del_x
nop
decfsz del_x,1
goto $-2
movlw b'00010000'
xorwf gpio,1 ;toggle GP4
decfsz del_y,1
goto $-8
call D_250mS
retlw 00
unitsbeep
movlw 80h
movwf del_y
movlw .45
movwf del_x
nop
decfsz del_x,1
goto $-2
movlw b'00010000'
xorwf gpio,1 ;toggle GP4
decfsz del_y,1
goto $-8
call D_250mS
call D_250mS
retlw 00
leftbeep
movlw 80h
movwf del_y
movlw .45
movwf del_x
nop
decfsz del_x,1
goto $-2
movlw b'00010000'
xorwf gpio,1 ;toggle GP4
decfsz del_y,1
goto $-8
call D_250mS
call D_250mS
retlw 00
tensbeep
movlw 0ffh
movwf del_y
movlw 0ffh
movwf del_x
nop
decfsz del_x,1
goto $-2
movlw b'00010000'
xorwf gpio,1 ;toggle GP4
decfsz del_y,1
goto $-8
call D_250mS
call D_250mS
retlw 00
rightbeep
movlw 0ffh
movwf del_y
movlw 0ffh
movwf del_x
nop
decfsz del_x,1
goto $-2
movlw b'00010000'
xorwf gpio,1 ;toggle GP4
decfsz del_y,1
goto $-8
call D_250mS
call D_250mS
retlw 00
Up incf units,1
movlw 0Ah ;put 10 into w
xorwf units,0 ;compare units file with 10
btfss status,2 ;zero flag will be set if units is 10
retlw 00
clrf units
incf tens,1
movlw 0Ah ;put 10 into w
xorwf tens,0 ;compare units file with 10
btfss status,2 ;zero flag will be set if tens is 10
retlw 00
clrf tens
retlw 00
;****************************************************************
;* Main *
;****************************************************************
Main bsf status, rp0 ;Bank 1
movlw b'11101101' ;switch and IR receivers GP0 GP2 GP3
movwf TRISIO
bcf status, rp0 ;bank 0
bsf GPIO,1 ;turn off output LED
call D_250mS
btfss GPIO,2 ;input will be LOW when sw pressed
call output
nop
btfss GPIO,0 ;input will be HIGH when bee detected
goto $-5 ;Left IR not detecting
call leftbeep
call D_250mS
btfss GPIO,2 ;input will be LOW when sw pressed
call output
nop
btfss GPIO,3 ;input will be HIGH when bee detected
goto $-5 ;right IR not detecting
call Up ;increment count
call rightbeep
bcf gpio,1
call _10mS
bsf gpio,1
goto $-18
end
2- 100R SM resistors
2- 330R SM resistors
2- 1k SM resistors
3- 2k2 SM resistors
2- 4k7 SM resistors
1- 10k SM resistor
1 - 100n SM capacitor
2 - 1u SM electrolytics
2 - 10u SM electrolytics
1- BC847 SM transistor
1- BC857 SM transistor
1- 1N4004 SM diode
2- IR LEDs (supplied in kit)
2- IR transistors (supplied in kit)
9/1/2012