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;
}
}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int8 a= 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:



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 



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
}
}

semaforo con PIC16f84a

 
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:


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- 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.

    SIMULACION:

    PWM con 555
      

    VIDEO DE LA SIMULACION:



      

    Diseño PCB:



    control de velocidad con 555

    Sugerencia: poner disipador al tip 41 y al 2n3055 en lugar de soldarlo directamente.

    DESCARGAR SIMULACION Y PCB:





    REFERENCIA:

    • Microcontrolador  16f84a desarrollo de proyectos, p.p.475.   
                                                                            
    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


    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.

    lcd 16x2

     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_OSC
            INCLUDE    <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:






    SIGUEME EN FECEBOOK

    MI TWITTER

    Translate