Elige tu idioma
Visitas
visitantes
Calendario Ideas&Tecnologia
| L | M | X | J | V | S | D |
|---|---|---|---|---|---|---|
| « Ene | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
Archivos
Meta
CATEGORIAS
- General (9)
- Ideas&Tecnología (1)
- Presentacion (8)
Entradas recientes
- Manual de Labview
- Manual de Proteus para diseno de PCB’S
- Radiocontrol con el TLP434 y RLP434
- FABRICACION DE UNA PCB POR TRANSFERENCIA TERMICA
- Reloj Ajedrez
Nube de Etiquetas
VIDEO
Ultimos comentarios
- Saludos.Interesante, no he usado este tipo de pape...
- Estimados, se que tienen un circuito de poder para...
- Tengo mucho interés en hacer poryectos con pics y ...
- hola victor como estas , estoy trabanjo sobre un p...
- buenisimo, sigue adelante a ver si te animas a hac...
- I uploaded a YouTube video -- Seguidor de linea I&T http://www.youtube.com/watch?v=ZX1CvsIn_2k&feature=autoshare_twitter
- I subscribed to mbenavidd1986's channel on YouTube http://www.youtube.com/user/mbenavidd1986?feature=autoshare_twitter
- Gracias robo3001!!!!! Un saludo para ti y para todo Peru (YouTube http://www.youtube.com/watch?v=UZMqlDsY9PU&feature=autoshare_twitter)
- I uploaded a YouTube video -- CER2006-Seguidor de linea http://www.youtube.com/watch?v=v0DpzrjGe58&feature=autoshare_twitter
- I uploaded a YouTube video -- Sistema de Seguridad Para un Laboratorio I&T http://bit.ly/Lr1TQ
- I uploaded a YouTube video -- CER2009, CIRAX CAMPEON Categoria Sumo Liviano http://bit.ly/c7miO
Enlaces
Count per Day
- 50Visitors per day:
- 3682Total visitors:
- 0Visitors currently online:
- 19 Noviembre 2009Counter starts on:
Directorios
Reloj Ajedrez
06/01/10
Reloj Ajedrez
Por: Ideas&Tecnologia

Descripción
Este proyecto realizado en codigo assembler consiste en el diseño de un circuito de reloj digital cuya funcion es la de controlar el tiempo de una partida de ajedrez. Para realizar este proyecto utilizamos el PIC16F887 y la
técnica de múltiplexación para ahorrar el uso de pines del microcontrolador y a su vez el consumo de energía debido a que se utiliza 8 display cátodo común, un indicador Led para inicio y final del juego,3 button para el control de Jugador1,2 y Start/Finish.
Funcionamiento
Al energizar el circuito este empezara con el reloj seteado en cero, esperando a que el juez presione el button Start/Finish, al presionar este button el indicador led encenderá indicando que se a iniciado el juego, luego de esto se espera a que un jugador presione el button para dar inicio al arranque del reloj una vez iniciado el juego el juez podrá detenerlo en el momento que deseo y a la vez reanudarlo.
Código en ASM
;**********************************************************************************************
LIST P=16F877A
INCLUDE “P16F877A.INC”
ERRORLEVEL -302
__CONFIG (_CP_OFF & _PWRTE_OFF & _HS_OSC & _WDT_OFF & _LVP_OFF & _BODEN_OFF )
;************Equivalencias ******************************************
DISPDIG1 EQU 0X20 ;COD 7 SEG DE DIGITO 1
DISPDIG2 EQU 0X21 ;COD 7 SEG DE DIGITO 2
DISPDIG3 EQU 0X22 ;COD 7 SEG DE DIGITO 3
DISPDIG4 EQU 0X23 ;COD 7 SEG DE DIGITO 4
DISPDIG5 EQU 0X24 ;COD 7 SEG DE DIGITO 5
DISPDIG6 EQU 0X25 ;COD 7 SEG DE DIGITO 6
DISPDIG7 EQU 0X26 ;COD 7 SEG DE DIGITO 7
DISPDIG8 EQU 0X27 ;COD 7 SEG DE DIGITO 8
SELECT EQU 0X29 ;HABILITADOR PARA DISPLAYS
UNIDAD EQU 0X30
DECENA EQU 0X31
N1 EQU 0X32
N2 EQU 0X33
N3 EQU 0X34
CENTENA EQU 0X35
SEGJUGA1 EQU 0X36
SEGJUGA2 EQU 0X37
MINJUGA1 EQU 0X38
MINJUGA2 EQU 0X39
; CARGA_TMR0 SE USA PARA PROGRAMAR EL TMR0
CARGA_TMR0 EQU d’217′ ;217=>2ms
;*********************************************************************
ORG 0
GOTO INICIO
ORG 4 ;Int cada 5ms
GOTO INTERRUPTION
;#####################################################################
; PROGRAMA PRINCIPAL
INICIO
BSF STATUS,5 ; Seleccion del banco 1
CLRF TRISD
MOVLW 07H
MOVWF TRISC
CLRF TRISB
CLRF TRISE
MOVLW b’10000111′
MOVWF OPTION_REG ; PRE-ESCALER=256
MOVLW b’10100000′ ; Interrupci¢n por timer0
MOVWF INTCON
bcf STATUS,5 ; Seleccion banco 0
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
CLRF DISPDIG1
CLRF DISPDIG2
CLRF DISPDIG3
CLRF DISPDIG4
CLRF DISPDIG5
CLRF DISPDIG6
CLRF DISPDIG7
CLRF DISPDIG8
CLRF SELECT
CLRF UNIDAD
CLRF DECENA
CLRF CENTENA
CLRF SEGJUGA1
CLRF SEGJUGA2
CLRF MINJUGA1
CLRF MINJUGA2
CLRF N1
CLRF N2
CLRF N3
CLRWDT
MOVLW 0×01 ;Interrupción por timer0
MOVWF SELECT
MOVLW CARGA_TMR0 ;Valor a cargar en el Timer:
MOVWF TMR0
STARTPRESS
BCF PORTC,3
BTFSC PORTC,2 ;SI BIT=0 EJECUTA SIG INSTRUCCION
GOTO STARTSOLTAR
GOTO STARTPRESS
STARTSOLTAR BTFSC PORTC,2 ;SI BIT=0 EJECUTA SIG INSTRUCCION
GOTO STARTSOLTAR
BSF PORTC,3
PRESS BTFSC PORTC,0 ;SI BIT=0 EJECUTA SIG INSTRUCCION
GOTO SOLTARJUGADOR1
BTFSC PORTC,1
GOTO SOLTARJUGADOR2
GOTO PRESS
SOLTARJUGADOR1 BTFSC PORTC,0
GOTO SOLTARJUGADOR1
GOTO JUGADOR1
SOLTARJUGADOR2 BTFSC PORTC,1
GOTO SOLTARJUGADOR2
GOTO JUGADOR2
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
JUGADOR1
INCF SEGJUGA1,F
MOVF SEGJUGA1,W
SUBLW .60
BTFSC STATUS,2
GOTO MINUTOSJ1
GOTO SEGUNDOSJ1
MINUTOSJ1 CLRF SEGJUGA1
INCF MINJUGA1,F
BCF STATUS,2
CLRW
SEGUNDOSJ1
BTFSC PORTC,1
GOTO JUGADOR2
CALL TIMEJUGADOR1
CALL DELAY
BTFSC PORTC,2
GOTO STOP
GOTO JUGADOR1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
JUGADOR2
INCF SEGJUGA2,F
MOVF SEGJUGA2,W
SUBLW .60
BTFSC STATUS,2
GOTO MINUTOSJ2
GOTO SEGUNDOSJ2
MINUTOSJ2 CLRF SEGJUGA2
INCF MINJUGA2,F
BCF STATUS,2
CLRW
SEGUNDOSJ2
BTFSC PORTC,0
GOTO JUGADOR1
CALL TIMEJUGADOR2
CALL DELAY
BTFSC PORTC,2
GOTO STOP
GOTO JUGADOR2
STOP BTFSC PORTC,2
GOTO STOP
GOTO STARTPRESS
;************************************************************************
TIMEJUGADOR1
MOVF SEGJUGA1,W
CALL BINBCD
MOVF UNIDAD,W
MOVWF DISPDIG4
MOVF DECENA,W
MOVWF DISPDIG3
MOVF MINJUGA1,W
CALL BINBCD
MOVF UNIDAD,W
MOVWF DISPDIG2
MOVF DECENA,W
MOVWF DISPDIG1
RETURN
;************************************************************************
TIMEJUGADOR2
MOVF SEGJUGA2,W
CALL BINBCD
MOVF UNIDAD,W
MOVWF DISPDIG8
MOVF DECENA,W
MOVWF DISPDIG7
MOVF MINJUGA2,W
CALL BINBCD
MOVF UNIDAD,W
MOVWF DISPDIG6
MOVF DECENA,W
MOVWF DISPDIG5
RETURN
;************************************************************************
;**********************************************************************
; SUBRUTINA INTERRUPT
INTERRUPTION
MOVLW b’10100000′ ;Limpiar bandera de TMR0
MOVWF INTCON
MOVLW CARGA_TMR0 ;Valor a cargar en el Timer:
MOVWF TMR0
CLRWDT
BCF ´ STATUS,C
BTFSC SELECT,0 ;SI BIT CODIGO_G0.0=1 EJECUTA SIG INSTRUCCION
GOTO DIG1
BTFSC SELECT,1 ;SI BIT CODIGO_G0.1=1 EJECUTA SIG INSTRUCCION
GOTO DIG2
BTFSC ´ SELECT,2 ;SI BIT CODIGO_G0.2=1 EJECUTA SIG INSTRUCCION
GOTO DIG3
BTFSC SELECT,3 ;SI BIT CODIGO_G0.3=1 EJECUTA SIG INSTRUCCION
GOTO DIG4
BTFSC SELECT,4 ;SI BIT CODIGO_G0.3=1 EJECUTA SIG INSTRUCCION
GOTO DIG5
BTFSC SELECT,5 ;SI BIT CODIGO_G0.3=1 EJECUTA SIG INSTRUCCION
GOTO DIG6
BTFSC SELECT,6 ;SI BIT CODIGO_G0.3=1 EJECUTA SIG INSTRUCCION
GOTO DIG7
BTFSC SELECT,7 ;SI BIT CODIGO_G0.3=1 EJECUTA SIG INSTRUCCION
GOTO DIG8
DIG1
CLRF PORTD
MOVF DISPDIG1,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×02
MOVWF SELECT
RETFIE
DIG2
CLRF PORTD
MOVF DISPDIG2,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×04
MOVWF SELECT
RETFIE
DIG3
CLRF PORTD
MOVF DISPDIG3,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×08
MOVWF SELECT
RETFIE
DIG4
CLRF PORTD
MOVF DISPDIG4,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×10
MOVWF SELECT
RETFIE
DIG5
CLRF PORTD
MOVF DISPDIG5,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×20
MOVWF SELECT
RETFIE
DIG6
CLRF PORTD
MOVF DISPDIG6,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×40
MOVWF SELECT
RETFIE
DIG7
CLRF PORTD
MOVF DISPDIG7,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×80
MOVWF SELECT
RETFIE
DIG8
CLRF PORTD
MOVF DISPDIG8,W
CALL TABLA
MOVWF PORTB ;Dato al display
MOVF SELECT,W
MOVWF PORTD
NOP
MOVLW 0×01
MOVWF SELECT
RETFIE
;***********************************************************
;SUBRUTINA DELAY=N1×20.556 MSEG.
;CON N1=25 SE TIENE UN RETARDO DE 0.5 SEG
;CON N1=50 SE TIENE UN RETARDO DE 1 SEG.
;CON N1=100 SE TIENE UN RETARDO DE 2 SEG.
DELAY MOVLW .50
MOVWF N1
LAZO1 MOVLW .67
MOVWF N2
NOP
LAZO2 MOVLW .255
MOVWF N3
LAZO3 NOP
NOP
NOP
DECFSZ N3,F
GOTO LAZO3
DECFSZ N2,F
GOTO LAZO2
DECFSZ N1,F
GOTO LAZO1
RETURN
;***********************************************************
;Tabla de códigos de 7 segmentos para un display de CATODO COMUN. Los leds
;se encienden con un cero
TABLA
addwf PCL,F
retlw 0×3F ;0
retlw 0×06 ;1
retlw 0×5B ;2
retlw 0X4F ;3
retlw 0X66 ;4
retlw 0X6D ;5
retlw 0X7D ;6
retlw 0X07 ;7
retlw 0X7F ;8
retlw 0X6F ;9
;************************************************************************
;SUBRUTINA BINARIO/BCD
BINBCD NOP
MOVWF UNIDAD;NUMERO A CONVERTIR
CLRF DECENA
CLRF CENTENA
RESTA10 MOVLW .10
SUBWF UNIDAD,W
BTFSS STATUS,C;SALTA SI W >=10, C=1
GOTO BINBCDFIN
MOVWF UNIDAD;ACTUALIZA UNIDAD
INCF DECENA,F
MOVLW .10
SUBWF DECENA,W
BTFSS STATUS,C;SALTA SI W>=10, C=1
GOTO RESTA10
CLRF DECENA
INCF CENTENA,F
GOTO RESTA10
BINBCDFIN RETURN
;************************************************************************
END
Diseño de PCB



Contador up/down de 3 dígitosc
05/01/10
Contador up/down de 3 dígitos
Por: Ideas&Tecnologia

Descripción
Este proyecto consiste en diseñar un circuito contador de 3digitos mediante el PIC16F887, esto se mostrara en Formato Decimal y Binario. Para aquello se emplea 3 display Cátodo Común y 16 Led, donde el bit LSB es el pin RB0 y el MSB pin RC7, el modo de conteo se controla mediante el button (up/down)
Para realizar este proyecto utilizamos la técnica de múltiplexación para ahorrar el uso de pines del microcontrolador y a su vez el consumo de energía.
Funcionamiento
Al energizar el circuito este mostrara el numero ‘000’, para iniciar el conteo se presionara el button ‘up/down’ y de esta manera se iniciara el conteo up, si se desea cambiar el modo de conteo se deberá presionar el button up/down para cambiar al modo opuesto es decir al modo down.
Este circuito llegara hasta el valor máximo de ‘999’ una vez llegado a este valor se detendrá el conteo y esperara que el usuario vuelva a presionar el button ‘up/down’ lo mismo ocurrirá la llegar al valor ‘000’.
Código en MicroBasic
program CodigoMicro
dim DIG1 as WORD
dim DIG2 as WORD
dim DIG3 as WORD
dim Cont as Byte
dim Cont2 as Byte
dim numero as Word
dim Sentido as Byte
dim Tiempo as Byte
dim numeroLSB as WORD
dim numeroMSB as WORD
dim Tecla as Byte
dim salto as byte
sub procedure ButtonA()
if PORTA.0=1 then
while(PORTA.0=1) wend
Tecla=1
if Sentido=0 then
Sentido=1
else
Sentido=0
END IF
end if
end sub
sub function CODIG7SEG(dim num as Word) as BYTE
select case num
case 0 result = $3F
case 1 result = $06
case 2 result = $5B
case 3 result = $4F
case 4 result = $66
case 5 result = $6D
case 6 result = $7D
case 7 result = $07
case 8 result = $7F
case 9 result = $6F
end select ‘case end
end sub
sub procedure interrupt ‘ Interrupt service routine
INTCON = $00 ’ Set T0IE, clear T0IF
Inc(CONT)
Inc(Cont2)
IF Cont=1 THEN
PORTE.2=0
PORTE.1=0
PORTE.0=1
DELAY_US(5)
PORTD=CODIG7SEG(DIG1)
END IF
IF Cont=2 THEN
PORTE.0=0
PORTE.2=0
PORTE.1=1
DELAY_US(5)
PORTD=CODIG7SEG(DIG2)
END IF
IF Cont=3 THEN
PORTE.0=0
PORTE.1=0
PORTE.2=1
DELAY_US(5)
PORTD=CODIG7SEG(DIG3)
Cont=0
END IF
If Cont2=100 then
Tiempo=1
Cont2=0
End If
‘ Increment value of cnt on every interrupt
TMR0 = 245
INTCON = $A0 ‘ Set T0IE, clear T0IF
end sub
main:
OPTION_REG = $07 ‘ Assign prescaler to TMR0
ANSEL = 0 ‘ Configure AN pins as digital I/O
ANSELH = 0
TRISB = 0 ‘ PORTB is output
TRISA=$01
TRISC = 0
TRISD = 0
TRISE=0
WPUB=$FF
TMR0 = 245 ‘ Timer0 initial value
INTCON = $A0 ‘ Enable TMRO interrupt
Cont=0
Cont2=0
DIG1=0
DIG2=0
DIG3=0
portA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
numero=0
numeroLSB=0
numeroMSB=0
Sentido=0
Tiempo=0
Tecla=0
Salto=0
while(1) ‘ While there is no interrupt, program runs in endless loop:
INICIO:
ButtonA()
if Tecla=0 THEN
goto INICIO
END IF
REVISAR:
IF Tecla=1 THEN
IF ((Sentido=0 ) AND (Tecla=1) )then
goto Decrementa
END IF
IF ((Sentido=1 ) AND (Tecla=1) )then
goto Incrementa
end if
else if salto=0 then
goto incrementa
else goto decrementa
end if
end if
Incrementa:
salto=0
Tecla=0
if Tiempo=1 then
if numero <999 then
Inc(numero)
end if
numeroLSB= lo(numero)
portB=numeroLSB
numeroMSB=Hi(numero)
portC=numeroMSB
DIG1= (numero / 100 )
DIG2= (numero / 10) mod 10
DIG3= numero mod 10
Tiempo=0
End If
ButtonA()
GOTO REVISAR
Decrementa:
salto=1
Tecla=0
if Tiempo=1 then
if numero>0 then
Dec(numero)
end if
numeroLSB= lo(numero)
portB=numeroLSB
numeroMSB=Hi(numero)
portC=numeroMSB
DIG1= (numero / 100 )
DIG2= (numero / 10) mod 10
DIG3= numero mod 10
Tiempo=0
End If
ButtonA()
GOTO REVISAR
wend
end.
Diseño de PCB










