Beruflich Dokumente
Kultur Dokumente
Universidad De Guadalajara
juanjosaan@yahoo.com.mx
1. Desarrollo
1.1 Frecuencímetro con PIC y Display LCD
1.1.1 Ensamblador
1.1.2 Compilado
2. Bases teóricas
2.1 Los Reguladores de Tensión
2.3.3 Programadores
2.3.5 Emuladores
2.3.7 Características
2.4 LCD
La idea de hacer este circuito nace de las peticiones constantes por la falta de más
frecuencímetros que no es muy común verlos tanto como los voltímetros, amperímetros,
osciloscopios, etc.
También con este trabajo se desea que los conocimientos adquiridos por los estudiantes a lo
largo de sus cursos, sean aplicados en este tipo de proyectos, para cumplir con el fin en común
de todos los ingenieros, que es el de diseñar.
Se recomienda que se cuide bastante al armar el circuito los ajustes que se le deben hacer y que
alimentaciones sean correctas para que no se dañe el equipo, sobretodo el microcontrolador y
la pantalla.
ANTECEDENTES
Frecuencímetro Virtual
• PIC12C508 programado
• Alimentación: 9V CD
• Puerto: serial
• Señal: hasta 15 Volts
• Acondicionador: 74HC14
• Diagrama esquemático
Este frecuencímetro virtual se presenta en una tarjeta de circuito impreso de fibra de vidrio con
un PIC12C508 a bordo preprogramado. Se suministra con un cable para conectarse al puerto
serial de una PC. Y con un broche para instalar una batería de 9V. El software para Windows
95/98 es muy amigable y se proporciona en un disco de 3 1/2, junto con el diagrama
esquemático.
Cuenta con bornes atornillables para instalar los cables que se requieren para hacer las
medicioneS de frecuencia.
1. DESARROLLO
1.1 Frecuencímetro con PIC y Display LCD
Este dispositivo muestra en una pantalla de cristal líquido de 16 caracteres y una línea el valor
de la frecuencia de una señal en su entrada.
Como se ve en el diagrama es muy fácil de armar, quedando todo el trabajo pesado para el
programa cargado en el PIC. Un solo ajuste es necesario: Deberá ajustar el preset de 500 Ohms
(en la base del transistor 2N4403) hasta leer en el punto marcado con X 5 voltios. Luego de
esto el sistema estará listo para funcionar.
Esta fuente es interesante ya que permite alimentar el sistema con sólo una tensión la cual
deberá ser igual o superior a 12v, con una corriente de 1 A.
;
;watchdog disabled
;
list P=16F84
ind equ 0h
rtcc equ 1h
pc equ 2h
status equ 3h
fsr equ 4h
port_a equ 5h
port_b equ 6h
;port_c equ 7h
c equ 0h
dc equ 1h
z equ 2h
pd equ 3h
to equ 4h
MSB equ 7h
LSB equ 0h
;
cnt equ 2h
rs equ 2h
rw equ 1h
e equ 0h
o equ 7h
;
count1 equ 2ch
count2 equ 2dh
in_reg equ 2eh
addcnt equ 2fh
gate equ 0Ch
cnt1 equ 0Dh
cnt2 equ 0Eh
cnt3 equ 0Fh
calc1 equ 10h
calc2 equ 11h
calc3 equ 12h
sum1 equ 13h
sum2 equ 14h
sum3 equ 15h
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 6
rtcc2 equ 16h
;
org 0
goto start
;
int_del movlw 0x05 ;delay 5.000 ms (4 MHz clock)
movwf count1
d1 movlw 0xA5
movwf count2
d2 decfsz count2 ,f
goto d2
decfsz count1 ,f
goto d1
retlw 0x00
;
lcd_out movwf port_b ;load data into port_b
movlw b'00000000' ;define port_b as output
tris port_b
bsf port_a,rs ;rs = data
bcf port_a,rw ;r/w = write
bsf port_a,e ;toggle enable
bcf port_a,e
movlw b'11111111' ;define port_b as input
tris port_b
bcf port_a,rs ;rs = instruction
bsf port_a,rw ;r/w = read
bsf port_a,e ;enable high
movf port_b,w ;get address counter
movwf addcnt
bsf addcnt,7
bcf port_a,e ;enable low
out1 bsf port_a,e ;enable high
btfss port_b,7 ;test busy flag
goto out2
bcf port_a,e ;enable low
goto out1
out2 bcf port_a,e ;enable low
goto shift
;
inst movwf port_b ;load instruction into port_b
movlw b'00000000' ;define port_b as output
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 7
tris port_b
bcf port_a,rs ;rs = instruction
bcf port_a,rw ;r/w = write
bsf port_a,e ;toggle enable
bcf port_a,e
movlw b'11111111' ;define port_b as input
tris port_b
bsf port_a,rw ;r/w = read
inst1 bsf port_a,e ;enable high
btfss port_b,7 ;test busy flag
goto inst2
bcf port_a,e ;enable low
goto inst1
inst2 bcf port_a,e ;enable low
retlw 0x00
;
shift btfss addcnt,0 ;shift to opposite side of display?
retlw 0x00
btfss addcnt,1
retlw 0x00
btfss addcnt,2
retlw 0x00
btfss addcnt,3
retlw 0x00
movlw 0x39
addwf addcnt ,f
bsf addcnt,7
movf addcnt,w
goto inst
;
sub bcf status,o ;clear overflow bit
movf calc1,w ;subtract calc1 from cnt1
subwf cnt1 ,f
btfsc status,c
goto sb1
movlw 0x01 ;borrow from cnt2 if overflow
subwf cnt2 ,f
btfsc status,c
goto sb1
subwf cnt3 ,f ;borrow from cnt3 if cnt2 overflow
btfss status,c
bsf status,o ;set overflow bit if result is negative
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 8
sb1 movf calc2,w ;subtract calc2 from cnt2
subwf cnt2 ,f
btfsc status,c
goto sb2
movlw 0x01 ;borrow from cnt3 if cnt2 overflow
subwf cnt3 ,f
btfss status,c
bsf status,o ;set overflow bit if result is negative
sb2 movf calc3,w ;subtract calc3 from cnt3
subwf cnt3 ,f
btfss status,c
bsf status,o ;set overflow bit if result is negative
retlw 0x00
;
add movf calc1,w ;add calc1 to cnt1
addwf cnt1 ,f
btfss status,c
goto ad1
incfsz cnt2 ,f ;add to cnt2 if cnt1 overflow
goto ad1
incf cnt3 ,f ;add to cnt3 if cnt2 overflow
ad1 movf calc2,w ;add calc2 to cnt2
addwf cnt2 ,f
btfsc status,c
incf cnt3 ,f ;add to cnt3 if cnt2 overflow
movf calc3,w ;add calc3 to cnt3
addwf cnt3 ,f
retlw 0x00
;
cnvt movlw 0x07 ;7 digits in display
movwf count1
movlw 0x19 ;set fsr for MSB in display
movwf fsr
movlw 0x2F ;one less that ASCII "0"
cnvt0 movwf ind
incf fsr ,f
decfsz count1 ,f
goto cnvt0
movlw 0x0F ;load "1,000,000" in calc1-3
movwf calc3
movlw 0x42
movwf calc2
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 9
movlw 0x40
movwf calc1
cnvt1 call sub ;subtract number from count
incf 19 ,f ;increment 1,000,000's register
movlw 0x3A
xorwf 19,w
btfsc status,z
goto overflow
btfss status,o ;check if overflow
goto cnvt1
call add ;add back last number
movlw 0x01 ;load "100,000" in calc1-3
movwf calc3
movlw 0x86
movwf calc2
movlw 0xA0
movwf calc1
cnvt2 call sub ;subtract number from count
incf 1A ,f ;increment 100,000's register
btfss status,o ;check if overflow
goto cnvt2
call add ;add back la st number
clrf calc3 ;load "10,000" in calc1-3
movlw 0x27
movwf calc2
movlw 0x10
movwf calc1
cnvt3 call sub ;subtract number from count
incf 1B ,f ;increment 10,000's register
btfss status,o ;check if overflow
goto cnvt3
call add ;add back last number
movlw 0x03 ;load "1,000" in calc1-3
movwf calc2
movlw 0xE8
movwf calc1
cnvt4 call sub ;subtract number from count
incf 1C ,f ;increment 1,000's register
btfss status,o ;check if overflow
goto cnvt4
call add ;add back last number
clrf calc2 ;load "100" in calc1-3
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 10
movlw 0x64
movwf calc1
cnvt5 call sub ;subtract number from count
incf 1D ,f ;increment 100's register
btfss status,o ;check if overflow
goto cnvt5
call add ;add back number
movlw 0x0A ;load "10" in calc1-3
movwf calc1
cnvt6 call sub ;subtract number from count
incf 1E ,f ;increment 10's register
btfss status,o ;check if overflow
goto cnvt6
call add ;add back last number
movf cnt1,w ;put remainder in 1's register
addwf 1F ,f
incf 1F ,f
retlw 0x00
;
count movlw b'00110111' ;rtcc = ext, 1/256
option
movlw b'00010000' ;define port_a as output
tris port_a
bcf port_a,3
bcf port_a,2
clrf cnt3
clrf rtcc
clrf rtcc2
bsf port_a,2 ;toggle rtcc pin
bcf port_a,2
movf gate,w ;get gate time
movwf count1
bsf port_a,3 ;start count
fr4 movlw 0xFA
movwf count2
goto fr6
fr5 nop
nop
nop
nop
nop
nop
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 11
fr6 movf rtcc,w ;test for rtcc rollover (12)
subwf rtcc2 ,f
btfss status,z
goto fr7
nop
goto fr8
fr7 btfsc status,c
incf cnt3 ,f
fr8 movwf rtcc2
nop
nop
nop
decfsz count2 ,f
goto fr5
decfsz count1 ,f
goto fr4
bcf port_a,3 ;stop count
movf rtcc,w ;get rtcc count
movwf cnt2
subwf rtcc2 ,f ;test for rtcc rollover
btfss status,c
goto fr9
btfss status,z
incf cnt3 ,f
fr9 clrf cnt1 ;set to get prescaler count
fr10 decf cnt1 ,f
bsf port_a,2 ;toggle rtcc pin
bcf port_a,2
movf rtcc,w ;test if rtcc has changed
xorwf cnt2,w
btfsc status,z
goto fr10
retlw 0x00
;
;***************************************************************************
***
; START
;***************************************************************************
***
;
start clrf port_a ;instruction, write, enable low
movlw b'00010000'
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 12
tris port_a
clrf port_b
movlw b'00000000'
tris port_b
call int_del
call int_del
call int_del
movlw 0x38 ;initialize display
movwf port_b
bsf port_a,e ;toggle enable
call int_del
bcf port_a,e
bsf port_a,e ;toggle enable
call int_del
bcf port_a,e
bsf port_a,e ;toggle enable
call int_del
bcf port_a,e
movlw 0x38 ;function
call inst
movlw b'00001100' ;display on, cursor off
call inst
movlw b'00000001' ;clear display
call inst
movlw b'00000110' ;entry mode
call inst
;
mhz movlw 0x14 ;0.1 sec gate
movwf gate
call count
call cnvt ;convert binary to BCD
movlw 0x30 ;test if "0"
xorwf 19,w
btfss status,z
goto mhz1
movlw 0x30 ;test if "0"
xorwf 1A,w
btfsc status,z
goto khz1
mhz1 movlw 0x82 ;set display address
call inst
movlw 0x02 ;output first 2 characters
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 13
movwf count1
movlw 0x19 ;MSD of freq
movwf fsr
mhz2 movlw 0x30 ;test if "0"
xorwf ind,w
btfss status,z
goto mhz3
movlw 0x20 ;change preceeding "0's" to "space"
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto mhz2
goto mhz4
mhz3 movf ind,w
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto mhz3
mhz4 movlw 0x2E ;"."
call lcd_out
movlw 0x05 ;output last 5 characters
movwf count1
mhz5 movf ind,w
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto mhz5
movlw 0x20 ;"space"
call lcd_out
movlw 0x4D ;"M"
call lcd_out
movlw 0x48 ;"H"
call lcd_out
movlw 0x7A ;"z"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
goto mhz
;
khz movlw 0x14 ;0.1 sec gate
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 14
movwf gate
call count
call cnvt ;convert binary to BCD
movlw 0x30 ;test if 0
xorwf 19,w
btfss status,z
goto mhz1
movlw 0x32 ;test if < 2
subwf 1A,w
btfsc status,c
goto mhz1
movlw 0x30 ;test if "0"
xorwf 1A,w
btfss status,z
goto khz1
movlw 0x30 ;test if "0"
xorwf 1B,w
btfsc status,z
goto xkhz
khz1 movlw 0x82 ;set display address
call inst
movlw 0x05 ;output first 5 characters
movwf count1
movlw 0x19 ;MSD of freq
movwf fsr
khz2 movlw 0x30 ;test if "0"
xorwf ind,w
btfss status,z
goto khz3
movlw 0x20 ;change preceeding "0's" to "space"
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto khz2
goto khz4
khz3 movf ind,w
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto khz3
khz4 movlw 0x2E ;"."
call lcd_out
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 15
movf ind,w ;output last 2 characters
call lcd_out
incf fsr ,f
movf ind,w
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x4B ;"K"
call lcd_out
movlw 0x48 ;"H"
call lcd_out
movlw 0x7A ;"z"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
goto khz
;
xkhz movlw 0xC8 ;1 sec gate
movwf gate
call count
call cnvt ;convert binary to BCD
movlw 0x30 ;test if 0
xorwf 19,w
btfss status,z
goto khz
movlw 0x32 ;test if < 2
subwf 1A,w
btfsc status,c
goto khz
movlw 0x30 ;test if 0
xorwf 1A,w
btfss status,z
goto xkhz1
movlw 0x30 ;test if 0
xorwf 1B,w
btfsc status,z
goto hz0
xkhz1 movlw 0x82 ;set display address
call inst
movlw 0x04 ;output first 4 characters
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 16
movwf count1
movlw 0x19 ;MSD of freq
movwf fsr
xkhz2 movlw 0x30 ;test if "0"
xorwf ind,w
btfss status,z
goto xkhz3
movlw 0x20 ;change preceeding "0's" to "space"
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto xkhz2
goto xkhz4
xkhz3 movf ind,w
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto xkhz3
xkhz4 movlw 0x2E ;"."
call lcd_out
movf ind,w ;output last 3 characters
call lcd_out
incf fsr ,f
movf ind,w
call lcd_out
incf fsr ,f
movf ind,w
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x4B ;"K"
call lcd_out
movlw 0x48 ;"H"
call lcd_out
movlw 0x7A ;"z"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
goto xkhz
;
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 17
hz movlw 0xC8 ;1 sec gate
movwf gate
call count
call cnvt ;convert binary to BCD
movlw 0x30 ;test if "0"
xorwf 19,w
btfss status,z
goto xkhz1
movlw 0x30 ;test if "0"
xorwf 1A,w
btfss status,z
goto xkhz1
movlw 0x32 ;test if < 2
subwf 1B,w
btfsc status,c
goto xkhz1
hz0 movlw 0x82 ;set display address
call inst
movlw 0x07 ;output first 7 characters
movwf count1
movlw 0x19 ;MSD of freq
movwf fsr
hz1 movlw 0x30 ;test if "0"
xorwf ind,w
btfss status,z
goto hz2
movlw 0x20 ;change preceeding "0's" to "space"
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto hz1
goto hz3
hz2 movf ind,w
call lcd_out
incf fsr ,f
decfsz count1 ,f
goto hz2
hz3 movlw 0x20 ;"space"
call lcd_out
movlw 0x48 ;"H"
call lcd_out
movlw 0x7A ;"z"
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 18
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
movlw 0x20 ;"space"
call lcd_out
goto hz
;
overflow movlw 0x01 ;clear display
call inst
movlw 0x84 ;display address
call inst
movlw 0x4F ;"O"
call lcd_out
movlw 0x76 ;"v"
call lcd_out
movlw 0x65 ;"e"
call lcd_out
movlw 0x72 ;"r"
call lcd_out
movlw 0x66 ;"f"
call lcd_out
movlw 0x6C ;"l"
call lcd_out
movlw 0x6F ;"o"
call lcd_out
movlw 0x77 ;"w"
call lcd_out
movlw 0x02 ;cursor at home
call inst
goto mhz
;
end
:10000000E7280530AC00A530AD00AD0B0528AC0BE2
:10001000032800348600003066000515851005149D
:100020000510FF3066000511851405140608AF00A1
:10003000AF1705100514861F1F2805101A28051074
:100040003228860000306600051185100514051061
:10005000FF30660085140514861F302805102B28F4
:10006000051000342F1C0034AF1C00342F1D003449
:10007000AF1D00343930AF07AF172F082128831385
:1000800010088D0203184B2801308E0203184B28EC
:100090008F02031C831711088E02031853280130A6
:1000A0008F02031C831712088F02031C831700346E
:1000B00010088D07031C5F288E0F5F288F0A110818
:1000C0008E0703188F0A12088F0700340730AC0020
:1000D000193084002F308000840AAC0B6B280F305D
:1000E000920042309100403090003F20990A3A300F
:1000F00019060319EB29831F752858200130920037
:1001000086309100A03090003F209A0A831F8428F7
:100110005820920127309100103090003F209B0A18
:10012000831F8E28582003309100E83090003F2034
:100130009C0A831F972858209101643090003F202B
:100140009D0A831F9F2858200A3090003F209E0A56
:10015000831FA62858200D089F079F0A00343730B8
:10016000620010306500851105118F018101960133
:10017000051505110C08AC008515FA30AD00C62830
:1001800000000000000000000000000001089602CE
:10019000031DCC280000CE2803188F0A960000000B
:1001A00000000000AD0BC028AC0BBD288511010874
:1001B0008E009602031CDE28031D8F0A8D018D031D
:1001C0000515051101080E060319DF280034850105
:1001D00010306500860100306600012001200120FA
:1001E0003830860005140120051005140120051083
:1001F000051401200510383021200C302120013059
:1002000021200630212014308C00AF2066203030B1
:100210001906031D0F2930301A0603194E298230A2
:1002200021200230AC001930840030300006031D5C
:100230001F2920300A20840AAC0B15292429000824
:100240000A20840AAC0B1F292E300A200530AC008E
:1002500000080A20840AAC0B282920300A204D30DF
:100260000A2048300A207A300A2020300A20203024
:100270000A20032914308C00AF2066203030190684
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 20
:10028000031D0F2932301A0203180F2930301A06C5
:10029000031D4E2930301B06031977298230212097
:1002A0000530AC001930840030300006031D5E2993
:1002B00020300A20840AAC0B5429632900080A2044
:1002C000840AAC0B5E292E300A2000080A20840A1A
:1002D00000080A2020300A204B300A2048300A202B
:1002E0007A300A2020300A2020300A203A29C830EB
:1002F0008C00AF20662030301906031D3A293230B9
:100300001A0203183A2930301A06031D8B2930309F
:100310001B060319C729823021200430AC00193094
:10032000840030300006031D9B2920300A20840AF7
:10033000AC0B9129A02900080A20840AAC0B9B2948
:100340002E300A2000080A20840A00080A20840AA5
:1003500000080A2020300A204B300A2048300A20AA
:100360007A300A2020300A2020300A207729C8302D
:100370008C00AF20662030301906031D8B293030E9
:100380001A06031D8B2932301B0203188B29823079
:1003900021200730AC001930840030300006031DE6
:1003A000D72920300A20840AAC0BCD29DC2900088B
:1003B0000A20840AAC0BD72920300A2048300A20B2
:1003C0007A300A2020300A2020300A2020300A20EB
:1003D00020300A20B72901302120843021204F30DD
:1003E0000A2076300A2065300A2072300A206630F2
:1003F0000A206C300A206F300A2077300A20023041
:04040000212003298B
:00000001FF
2. BASES TEÓRICAS
2.1 Los Reguladores de Tensión
Resumiendo, el 7812 nos dará una tensión de 12 volt y el 7815, una tensión de 15 volt. La
fuente de alimentación, tendrá que tener unos 3 volt mas, como mínimo, de la tensión de
salida.
Los rango de temperatura serán entre 0º y 125º, para una corriente de salida de 1 Amper, por lo
que es aconsejable colocarle un disipador de calor para evitar que este se queme.
El indice de error en la tensión de salida es de +/- 0,25 volt, así un 7805 podrá tener entre 4,75
y 5,25 volt de salida.
También tenemos que tener en cuenta a la hora de comprar un regulador, el tipo de regulador
que compramos ya que algunos vienen para 0,1 Amper y otros hasta 3 Ampers. Esto depende
de la serie del regulador, estas son las siguientes:
Tipo de Potencia en
Zocalo
Regulador Ampers
78XX 1,0 TO-204, TO-220
La puerta lógica NO-Y, más conocida por su nombre en inglés NAND, realiza la operación de
producto lógico negado. En la figura de la derecha pueden observarse sus símbolos en
electrónica.
0 0 1
0 1 1
1 0 1
1 1 0
Podemos definir la puerta NO-Y como aquella que proporciona a su salida un 0 lógico
únicamente cuando todas sus entradas están a 1. [3]
Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip
Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de
microelectrónica de General Instruments.
El PIC original se diseñó para ser usado con la nueva UCP de 16 bits de General Instruments,
el CP16000. Siendo en general una buena UCP, el CP1600 tenía malas prestaciones de E/S, y
el PIC de 8 bits se desarrolló en 1975 para mejorar el rendimiento del sistema quitando peso de
E/S a la UCP. El PIC utilizaba microcódigo simple almacenado en memoria ROM para
realizar estas tareas; y aunque el término no se usaba por aquel entonces, se trata de un diseño
RISC que ejecuta una instrucción cada 4 ciclos del oscilador.
El PIC usa un juego de instrucciones tipo RISC, cuyo número puede variar desde 35 para PICs
de gama baja a 70 para los de gama alta. Las instrucciones se clasifican entre las que realizan
operaciones entre el acumulador y una constante, entre el acumulador y una posición de
memoria, instrucciones de condicionamiento y de salto/retorno, implementación de
interrupciones y una para pasar a modo de bajo consumo llamada sleep.
Para Pascal existe un compilador de código abierto, JAL, lo mismo que PicForth para el
lenguaje Forth. GPUTILS es una colección de herramientas distribuídas bajo licencia GNU
que incluye ensamblador y enlazador, y funciona en Linux, MacOS y Microsoft Windows.
GPSIM es otra herramienta libre que permite simular diversos dispositivos hardware
conectados al PIC.
2.3.3 Programadores
• ICD2 (USB)
2.3.5 Emuladores
Los PICs actuales vienen con una amplia gama de mejoras hardware incorporadas:
Los viejos PICs con memoria PROM o EPROM se estan renovando gradualmente por chips
con memoria Flash. Así mismo, el juego de instrucciones original de 12 bits del PIC1650 y sus
descendientes directos ha sido suplantado por juegos de instrucciones de 14 y 16 bits.
Microchip todavía vende versiones PROM y EPROM de la mayoría de los PICs para soporte
de aplicaciones antiguas o grandes pedidos.
Por todos lados surgen compañías que ofrecen versiones del PIC más baratas o mejoradas. La
mayoría suelen desaparecer rápidamente. Una de ellas que va perdurando es Ubicorn
(antiguamente Scenix) que vende clones del PIC que funcionan mucho más rápido que el
original. OpenCores tiene un núcleo del PIC16F84 escrito en Verilog.
Ing. Juan Gilberto Mateos Suárez, Código;7917333, jmateos@proton.ucting.udg.mx
Proyecto de Diseño con Electrónica Integrada.
Página 27
2.3.8.3 PICs wireless
El microcontrolador rfPIC integra todas las prestaciones del PICmicro de Microchip con la
capacidad de comunicación wireless UHF para aplicaciones RF de baja potencia. Estos
dispositivos ofrecen un diseño muy comprimido para ajustarse a los cada vez más demanadado
requerimientos de miniaturización en aparatos electrónicos.
Los dsPICs son el último lanzamiento de Microchip, comenzando a producirlo s a gran escala a
finales de 2004. Son los primeros PICs con bus de datos inherente de 16 bits. Incorporan todas
las posibilidades de los anteriores PICs y añaden varias operaciones de DSP implementadas en
hardware, como multiplicación con suma de acumulador (multiply-accumulate, o MAC),
barrel shifting, bit reversion o multiplicación 16x16 bits.
LCD son las siglas en inglés de "Pantalla de Cristal Líquido" ("Liquid Crystal Display")
inventado por Jack Janning que fue empleado de NCR.
Cuando la corriente circula entre los electrodos transparentes con la forma a representar (por
ejemplo, un segmento de un número) el material cristalino se reorienta alterando su
transparencia.
Un microchip controlador.
El controlador simplifica el uso del LCD proporcionando una serie de funciones básicas que se
invocan mediante el interfaz eléctrico, destacando:
Etc.
La memoria implementa un mapa de bits para cada carácter de un juego de caracteres, es decir,
cada octeto de esta memoria describe los puntitos o pixels que deben iluminarse para
representar un carácter en la pantalla. Generalmente, se pueden definir caracteres a medida
modificando el contenido de esta memoria. Así, es posible mostrar símbolos que no están
originalmente contemplados en el juego de caracteres.
El interfaz de contactos eléctricos suele ser de tipo paralelo, donde varias señales eléctricas
simultáneas indican la función que debe ejecutar el controlador junto con sus parámetros. Por
tanto, se requiere cierta sincronización entre estas señales eléctricas.
Existen dos tipos de pantallas LCD en el mercado: pantallas de texto y pantallas gráficas.
Los LCD de texto son los más baratos y simples de utilizar. Solamente permiten visualizar
mensajes cortos de texto. Existen algunos modelos estandarizados en la industria, en función
de su tamaño medido en número de líneas y columnas de texto. Existen modelos de una, dos y
cuatro filas únicamente. El número de columnas típico es de ocho, dieciséis, veinte y cuarenta
caracteres.
R/W: una señal que indica si se desea leer o escribir en la pantalla (generalmente solamente se
escribe).
RS: una señal que indica si los datos presentes en D0-D7 corresponden bien a una instrucción,
bien a sus parámetros.
Vss y Vdd: señales de alimentación. Generalmente a cinco voltios. La señal Vss sirve para
encender la luz trasera de la pantalla en algunos modelos.
Estas señales son fácilmente controladas desde un ordenador a través de un interfaz paralelo,
típicamente a través del interfaz IEEE 1284, también conocido como "Centronics". El mismo
que se utiliza para conectar impresoras. [3]
Las pantallas LCD gráficas permiten encender y apagar individualmente pixels de la pantalla.
De esta manera es posible mostrar gráficos en blanco y negro. No solamente texto. Los
controladores más populares son el Hitachi HD61202 y el Samsung KS0108. Los tamaños
también están estandarizados y se miden en filas y columnas de pixeles. Algunos tamaños
típicos son 128x64 y 96x60. Naturalmente, algunos controladores también permiten la
escritura de texto de manera sencilla.
Estas pantallas son más caras y complejas de utilizar. Existen pocas aplicaciones donde no
baste con un LCD de texto. Se suelen utilizar, por ejemplo, en ecualizadores gráficos. [3]
V1
9 V
XMM1
C6 V2
R5 100nF 5 V
C4
100nF
Key = A 100%
Q2
2N4403
R1 R7
100kOhm_5% Q1 1.0MOhm_5%
C2 GaAsFET_N_VIRTUAL
47pF
D2 D1 R4 C5
R2
C1 1.0MOhm_5% 1N4148
1.5uF 30Ohm_5%
47nF
C3 R3
1N4148 R6
470pF 10Ohm_5%
820kOhm_5%
REFERENCIAS BIBLIOGRÁFICAS
[1] www.electronicaestudio.com
[2] www.gestialba.com
[3] www.wikipedia.com
[4] www.webelectronica.com.ar
[5] www.comunidadelectronicos.com