Mostrando entradas con la etiqueta practicas simuladas. Mostrar todas las entradas
Mostrando entradas con la etiqueta practicas simuladas. Mostrar todas las entradas
miércoles, 15 de enero de 2014
MATERIAL:
1- PIC 16f887.
2- Display cátodo común.
1- Cristal de 8Mhz.
2- Capacitores cerámicos de 22pf.
3- Resistores de 10k.
16- Resistores de 220.
3- Pushbutton.
1- Borne (kulca).
1- Portaintegrados de 40 pines.
El programa del PIC lo realice en lenguaje C en el compilador CCS C, la simulación en proteus y el PCB en PCBWizard. El circuito se debe alimentar con una fuente de 5v.
CÓDIGO:
#include <16f887.h>
#fuses hs,wdt
#use delay(clock=800000)
#byte trisb=0x86
#byte trisc=0x87
#byte trisd=0x88
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
byte display[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
byte display_2[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
int8 a;
int8 b;
void main(){
trisd=0x00;
trisc=0xff;
trisb=0x00;
inicio:
portd=display[0];
portb=display_2[0];
while(true){
if (bit_test(portc,1)==1){
delay_us(100);
a++;
p1:
if(bit_test(portc,1)==1){
portd=display[a];
goto p1;
}
}
if(a==10){
a=0;
b++;
portb=display_2[b];
}
if((b==10)||(bit_test(portc,2)==1)){
a=0;
b=0;
goto inicio;
}
}
}
#fuses hs,wdt
#use delay(clock=800000)
#byte trisb=0x86
#byte trisc=0x87
#byte trisd=0x88
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
byte display[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
byte display_2[10]={0x7B,0x0A,0xB3,0x9B,0xCA,0xD9,0xF9,0x0B,0xFB,0xDB};
int8 a;
int8 b;
void main(){
trisd=0x00;
trisc=0xff;
trisb=0x00;
inicio:
portd=display[0];
portb=display_2[0];
while(true){
if (bit_test(portc,1)==1){
delay_us(100);
a++;
p1:
if(bit_test(portc,1)==1){
portd=display[a];
goto p1;
}
}
if(a==10){
a=0;
b++;
portb=display_2[b];
}
if((b==10)||(bit_test(portc,2)==1)){
a=0;
b=0;
goto inicio;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int8 a= dato de 8 bits.
int8 b= dato de 8 bits.
int8 b= dato de 8 bits.
a++= incremento del dato a.
b++= incremento del dato b.
Cada vez que se aprieta el pushbutton se incrementa el dato a cuando el dato llega a 10 (es decir a 9 en el primer display) se incrementa el dato b y se borra el dato a (es decir el numero 10 en los diplays), así hasta que el dato b llega a 10 (es decir a 99 en los displays) entonces se borran los datos para comenzar de nuevo el conteo.
Para saber el funcionamiento del if, while y los tris checar los siguientes tutoriales:
http://microcontroladores-ing-elec-rh.blogspot.mx/2013/10/programando-pics-en-lenguaje-c-en-ccs.html
http://microcontroladores-ing-elec-rh.blogspot.mx/2013/11/programando-pics-en-lenguaje-c-en-ccs.html
SIMULACIÓN:
PCB:
Hoja para imprimir.
Vista real del circuito.
DESCARGAR SIMULACIÓN, PCB Y PROGRAMA EN C:
REFERENCIAS;
- Compilador C CSS y simulador proteus para microcontroladores PIC, Eduardo García Breijo
Etiquetas:
practicas simuladas,
proyectos
|
6
comentarios
viernes, 11 de octubre de 2013
Un PIC tiene terminales de entrada/salida divididos en puertos, cada puerto se puede comportar como entrada/salida por ejemplo el PIC 16f628a cuenta con 2 puertos el A y B, en la figura se muestra que el puerto A consta de 8 terminales (RA0,.......,RA7) y el puerto B también consta de 8 terminales (RB0,.........,RB7). Por lo regular en el puerto A solo se utilizan 5 pines ya que en el RA6 y RA7 se coloca el cristal externo (aunque este PIC cuenta con un cristal interno), además en el puerto RA5 es utilizado para resetear el PIC.
Existen PICs con mayor numero de puertos como el 18f4550 que cuenta con los puertos A, B, C, D y E.
¿Como habilitar los puertos como entrada o salida?
La habilitación como entrada o salida se realiza a través del registro TRISx. Para saber en que dirección se sitúan el TRIS y PORT en la memoria solo hay que checar el datasheet de cada PIC ya que en algunos casos la dirección tiende a cambiar según el PIC.
En la figura se muestra el datasheet del PIC 16f628a y se observa las direcciones de los puertos A y B.
Cuales son:
PORTA=05h,
PORTB=06h.
NOTA: la h indica que se encuentra en hexadecimal.
En CCS se puede manipular los puertos a través de la RAM, para esto se
deben definir los registros PORTx y TRISx como bytes y se sitúan en la
posición correspondiente a la memoria RAM. La directiva utilizada de C
es #BYTE.
#BYTE porta=0x05 // variable porta en 05h
#BYTE portb=0x06 // variable portb en 06h
#BYTE trisa= 0x85 // variable trisa en 85h
#BYTE trisb= 0x86 // variable trisb en 86h
NOTA: en CCS se utilizan las // para escribir comentarios.
Una vez definidas las direcciones de los PORTx y los TRISx se pueden configurar los puertos a través de los TRISx.
TRISA=0b11111 //indica que el RA0, RA1, RA2, RA3 y RA4 se ocupan como entradas.
TRISB=0b00001111// indica que RB0 al RB3 se ocupan como entradas y del RB4 al RB7 como salidas.
NOTA: Para asignar a un puerto como entrada se debe de adjudicarle un 1 y para una salida un cero. Para ocupar código binario en CCS se utiliza el código 0b antes de los bits.
PORTB=0b00011010// saca por el RB1, RB3 y RB4 un uno y por el RB0, RB2, RB5, RB6 y RB7 saca un cero.
PORTD=0x00// pon en cero el puerto d.
Ejemplo:
#include <16f628a.h> //llamado del fichero donde se especifican las características del PIC
#fuses xt,nowdt //tipo de cristal a utilizar #use delay (clock=4000000)//reloj de 4Mhz
#byte trisa=0x85 //dirección del trisa en la memoria
#byte trisb=0x86
#byte porta=0x05
#byte portb=0x06
void main(){ //función principal
trisa=0b10100; //RA0,RA1 y RA3 como salida, el RA2 y RA4 como entrada
trisb=0b00000000;//todo el puerto B como salida
portb=0x00; //se pone el puerto B en cero
while(true){ //buncle infinito
portb=0b01010101; //RB0,RB2,RB4 y RB6 se ponen en uno, RB1,RB3,RB5 y RB7 se ponen en 0
porta=0b01011; //RA0,RA1 y RA3 se ponen a 1, RA2 y RA4 se ponen a 0
}
}
Existen unas funciones de C que permiten trabajar bit a bit con los registros o variables definidas previamente. Estas funciones son las siguientes:
bit_clear(var,bit);//pone a 0 el bit especifico (0 a 7) de la variable.
bit_set(var,bit); //pone a 1 el bit especifico (0 a 7) de la variable.
bit_test(var,bit); //muestra el bit especifico (0 a 7) de la variable.
ejemplo:
bit_clear (portb,0);// saca un 0 en la terminal RB0.
bit_set (portb,2);// saca un 1 en la terminal RB2.
NOTA:el bit_test se utilizara mas adelante cuando esplique sobre el if.
Para poder sacar un retardo en CCS solo se utiliza el comando:
delay_ms(100);// saca un retardo de 100 milisegundos.
delay_us(100); //saca un retardo de 100 microsegundos.
con toda esta información podemos realizar nuestro primer proyecto.
PROYECTO 1 SEMÁFORO
#include <16f84a.h> //llamado del fichero donde se especifican las características del PIC
#fuses xt,nowdt //tipo de cristal a utilizar#use delay (clock=4000000)//reloj de 4Mhz
#byte trisa=0x85 //dirección del trisa en la memoria
#byte trisb=0x86
#byte porta=0x05
#byte portb=0x06
void main(){ //función principal
bit_clear(trisa,3);//el RA3 como salida
trisb=0x00;//todo el puerto B como salida
portb=0x00;//puerto B puesto en 0
while(true){ //buncle infinito
bit_set(porta,3);//pone en 1 el RA3
delay_ms(5000); //retardo de 5 segundos
bit_clear(porta,3);//pone en 0 el RA3
bit_set(portb,0); //pone en 1 el RB0
delay_ms(5000);
bit_clear(portb,0);//pone en 0 el RB0
bit_set(portb,1); //pone en 1 el RB1
delay_ms(5000);
bit_clear(portb,1);//pone en 0 el RB1 y empieza de nuevo el programa desde el while
}
}
NOTA: en la simulación no se requiere poner el cristal ya que se programa cuando le damos doble click al pic, tampoco se requiere poner en 1 el MCLR, en el ejemplo 1 no le puso resistencia a los leds. Si desea realizar la practica en protoboard requiere poner lo señalado anteriormente.
PCB:
listo para imprimir:
NOTA: en la carpeta de archivos se encuentra un archivo word con las imagenes listo para imprimir y realizar el pcb, si no dentro de la carpeta semaforo esta el archivo para abrir con pcbwizard.
MATERIAL:
1 PIC 16f84a.
1 cristal de 4Mhz.
2 capacitores cerámicos de 22pf.
1 porta circuito integrado de 18 pines.
1 borne(kulca) doble.
3 resistencias de 220 ohms
1 led rojo de 5mm.
1 led verde de 5mm.
1 led amarillo de 5mm.
DESCARGAR ARCHIVO HEX, SIMULACIÓN y PCB:
TUTORIAL 2:
http://microcontroladores-ing-elec-rh.blogspot.mx/2013/11/programando-pics-en-lenguaje-c-en-ccs.html
VIDEO SIMULACION Y PRUEBAS:
DOCUMENTO:
jueves, 29 de noviembre de 2012
La velocidad de un motor de corriente continua depende del valor medio de la tensión aplicada en sus extremos.
el sistema mas utilizado para controlar la velocidad de un motor DC es mediante la modulación por ancho de pulso PWM de una señal cuadrada TTL, bajo el control PWM el motor gira a una velocidad determinada por la media del nivel de la señal cuadrada.
La tensión continua media presentada al motor se controla manteniendo la frecuencia constante y variando el tiempo que la señal permanece en alto, es decir variando el ciclo de trabajo.
La regulación por PWM proporciona una eficaz método mediante la utilizacion de una simple señal digital de control.
Circuito.
MATERIAL:
1- 555.
1- Capacitor cerámico 100n.
1- Resistor 470.
1- Resistor 10k.
1- Resistor 10k.
1- Potenciometro de 1.
1- TIP 31.
1- 2N3055.
1- Motor.
1- Diodo 1N1346BR.
Sugerencias: en pruebas físicas varía mejor el pot de 1k que el de 100k pero prueben como quiere que varié su velocidad asiendo pruebas con distintos pot, se puede comprar el darlington ya en un encapsulado, y se probo circuito con un motor de 24v a 3A, se puede usar un diodo 1N4001 pero dependera de la corriente suministrada.
VIDEO DE LA SIMULACION:
Diseño PCB:
DESCARGAR SIMULACION Y PCB:
REFERENCIA:
- Microcontrolador 16f84a desarrollo de proyectos, p.p.475.
Etiquetas:
descargas,
practicas simuladas,
proyectos
|
11
comentarios
sábado, 27 de octubre de 2012
MATERIAL:
2- Resistores de 10k.1- Resistor de 1k.
2- Pushbutton.
1- Led.
1- 7400.
La compuerta NAND se construye para dos entradas A y B , la operación NAND se denota por A'*B'. en términos de la lógica, la compuerta NAND equivale a una compuerta AND seguida por una NOT.
Para construir un retenedor SR las compuertas se acoplan de manera cruzada para obtener la retroalimentación necesaria para formar una red biestable. el retenedor se activa haciendo Q=1 cuando S va de 1 a 0. la función de mantenimiento inicia cuando S regresa a 1. A la inversa, si R va de 1 a 0, el retenedor se desactiva y Q=0.
Simulacion en proteus:
DESCARGAR LA SIMULACION:
http://rapidshare.com/files/3106460427/flip-flop%20sr%20compuertas(nand)%20ROBOTRH.rar
Etiquetas:
descargas,
electronica digital,
practicas simuladas
|
0
comentarios
viernes, 24 de agosto de 2012
MATERIAL:
1-LCD 16x2.
LCD (pantalla de cristal líquido) es un módulo de visualización electrónica para una amplia gama de aplicaciones.Una pantalla LCD de 16x2 significa que puede mostrar 16 caracteres por línea y hay 2 líneas de este tipo. En esta pantalla cada carácter se muestra en la matriz de píxeles 5x7. Esta pantalla LCD tiene dos registros, a saber, el mando y datos.
El registro de comando almacena las instrucciones dadas al mando LCD. Un comando es una instrucción dada a LCD para realizar una tarea predefinida como inicializarla, despejando su pantalla, ajuste la posición del cursor, el control de la pantalla, etc El registro de datos almacena los datos que se muestran en la pantalla LCD. Los datos son el valor ASCII del carácter a visualizar en la pantalla LCD.
El registro de comando almacena las instrucciones dadas al mando LCD. Un comando es una instrucción dada a LCD para realizar una tarea predefinida como inicializarla, despejando su pantalla, ajuste la posición del cursor, el control de la pantalla, etc El registro de datos almacena los datos que se muestran en la pantalla LCD. Los datos son el valor ASCII del carácter a visualizar en la pantalla LCD.
Pin No
|
Function
|
Name
|
1
|
Ground (0V)
|
Ground
|
2
|
Supply voltage; 5V (4.7V – 5.3V)
|
Vcc
|
3
|
Contrast adjustment; through a variable resistor
|
VEE
|
4
|
Selects command register when low; and data register when high
|
Register Select
|
5
|
Low to write to the register; High to read from the register
|
Read/write
|
6
|
Sends data to data pins when a high to low pulse is given
|
Enable
|
7
|
8-bit data pins
|
DB0
|
8
|
DB1
| |
9
|
DB2
| |
10
|
DB3
| |
11
|
DB4
| |
12
|
DB5
| |
13
|
DB6
| |
14
|
DB7
| |
15
|
Backlight VCC (5V)
|
Led+
|
16
|
Backlight Ground (0V)
|
Led-
|
1-PIC 16f84A.
1-Cristal 4MHz.
2-Capacitores cerámicos 22pF.
Circuito en proteus:
Se programo el PIC en .asm con MPLAB IDE.
PROGRAMA ASM:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST p=16F84A
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCINCLUDE <P16F84A.INC>
STATUS EQU 0X03
PORTA EQU 0X05
PORTB EQU 0X06
TRISA EQU 0X85
TRISB EQU 0X86
LCD_LINEA1 EQU 80
LCD_LINEA2 EQU 0C0
LCD_CLR EQU 01
LCD_CASA EQU 02
LCD_INC EQU 06
LCD_DEC EQU 04
LCD_ON EQU 0C
LCD_OFF EQU 08
CURSOR_ON EQU 0E
CURSOR_OFF EQU 0C
CURSOR_PARP EQU 0F
LCD_IZDA EQU 18
LCD_DECHA EQU 1C
CURSOR_IZDA EQU 10
CURSOR_DECHA EQU 14
LCD_FUNCIÓN EQU 38
LCD_CGRAM EQU 40
CBLOCK 0x0D
ENDC
ORG 00
INICIO
bsf STATUS,RP0
movlw b'00011000'
movwf TRISA
clrf TRISB
bcf STATUS,RP0
clrf PORTA
clrf PORTB
movlw LCD_FUNCIÓN
call LCD_COMANDO
call PAUSA_5ms
movlw LCD_FUNCIÓN
call LCD_COMANDO
call PAUSA_5ms
movlw LCD_FUNCIÓN
call LCD_COMANDO
call PAUSA_5ms
movlw LCD_CLR
call LCD_COMANDO
movlw LCD_INC
call LCD_COMANDO
movlw LCD_ON
call LCD_COMANDO
movlw 80
call LCD_COMANDO
ver
movlw 80
call LCD_COMANDO
movlw 'B'
call LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'G'
calL LCD_CARACTER
movlw ' '
calL LCD_CARACTER
movlw 'R'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'B'
call LCD_CARACTER
movlw 'O'
calL LCD_CARACTER
movlw 'T'
call LCD_CARACTER
movlw ' '
call LCD_CARACTER
movlw 'R'
call LCD_CARACTER
movlw 'H'
call LCD_CARACTER
movlw 0C0
call LCD_COMANDO
movlw 'E'
call LCD_CARACTER
movlw 'L'
call LCD_CARACTER
movlw 'E'
call LCD_CARACTER
movlw 'C'
calL LCD_CARACTER
movlw 'T'
calL LCD_CARACTER
movlw 'R'
call LCD_CARACTER
movlw 'O'
call LCD_CARACTER
movlw 'N'
calL LCD_CARACTER
movlw 'I'
calL LCD_CARACTER
movlw 'C'
call LCD_CARACTER
movlw 'A'
call LCD_CARACTER
sleep
subrutinas
CBLOCK
CONTA1
CONTA2
GUARDA_CARÁCTER
ENDC
PAUSA_5ms
movlw 7
movwf CONTA2
clrf CONTA1
RETRASO1
decfsz CONTA1,1
goto RETRASO1
decfsz CONTA2,1
goto RETRASO1
return
LCD_COMANDO
clrf PORTA
movwf PORTB
call LCD_CHEQUEA
goto LCD_HABILITA
LCD_CARACTER
clrf PORTA
call LCD_CARÁCTER_ESPECIAL
movwf PORTB
call LCD_CHEQUEA
bsf PORTA,0
goto LCD_HABILITA
LCD_CARÁCTER_ESPECIAL
movwf GUARDA_CARÁCTER
sublw 'ñ'
btfss STATUS,Z
goto LCD_EÑE_MAYÚSCULA
movlw b'11101110'
movwf GUARDA_CARÁCTER
goto LCD_FIN_CARACTER_ESP
LCD_EÑE_MAYÚSCULA
movfw GUARDA_CARÁCTER
sublw 'Ñ'
btfss STATUS,Z
goto LCD_GRADO
movlw b'11101110'
movwf GUARDA_CARÁCTER
goto LCD_FIN_CARACTER_ESP
LCD_GRADO
movfw GUARDA_CARÁCTER
sublw 'º'
btfss STATUS,Z
goto LCD_FIN_CARACTER_ESP
movlw b'11011111'
movwf GUARDA_CARÁCTER
LCD_FIN_CARACTER_ESP
movfw GUARDA_CARÁCTER
return
LCD_CHEQUEA
bsf STATUS,RP0
movlw 0FF
movwf TRISB
bcf STATUS,RP0
bcf PORTA,0
bsf PORTA,1
BUCLE
bsf PORTA,2
movf PORTB,0
bcf PORTA,2
addlw 84
btfsc STATUS,C
goto BUCLE
bsf STATUS,RP0
clrf TRISB
bcf STATUS,RP0
bcf PORTA,1
return
LCD_HABILITA
bsf PORTA,2
nop
bcf PORTA,2
return
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SIMULACION EN PROTEUS:
PCB:
Vista real del PCB.
DESCARGA SIMULACION, PCB, HEX:
Etiquetas:
lenguje asm,
practicas simuladas,
proyectos
|
11
comentarios
Suscribirse a:
Entradas (Atom)