TODO SOBRE ELECTRONICA

Usted aprenderá los diferentes temas de Electrónica que se enseñan en universidades e institutos.

CANAL DE YOUTUBE

Tutoriales de los temas que se publican en blog. SUSCRIBETE

PROGRAMACION DE MICROCONTROLADORES PIC

Programacion en CCS Compiler de Microcontroladores PIC, sentencias y codigos de todos los programas. Archivos y libros relacionados a la programacion de PIC en lenguaje C.

ELECTRONICA BASICA

Conozca como funcionan y como se usan los componentes que encontramos en todo circuito electronico

LIBROS Y TEXTOS SOBRE ELECTRONICA

Libros, revistas y textos que le serviran para ampliar su conocimiento en los diferentes temas de la electrónica.Dale click en la pestaña LIBROS de la parte superior.

sábado, 12 de septiembre de 2020

Descargar Matlab Portable Gratis

DESCARGAR MATLAB PORTABLE 2011 GRATIS

MATLAB combina un entorno de escritorio perfeccionado para el análisis iterativo y los procesos de diseño con un lenguaje de programación que expresa las matemáticas de matrices y arrays directamente.


Tipo: Software educativo
 
 
LINKS 100% OPERATIVO
 http://zipansion.com/2gOs3
 
 
 
Pasos para descargar:
- Dale click a la imagen del servidor MEGA
- Saltar publicidad y listo, los llevará al link de descarga.
- Listo, empezar a descargar 
 
 

sábado, 29 de agosto de 2020

CCS Compiler - Manejo de Puertos (Programación PIC)

MANEJO DE PUERTOS

En CCS Compiler tenemos dos maneras de gestionar los puertos del microcontrolador:

1. Utilizando directivas del compilador:

     #use fast_io (puerto)      #use standard_io(puerto)      #use fixed_io(puerto_outputs=pin)

Contamos con las 3 directivas para poder gestionar los puertos.
En esta ocasión solo explicaré más a detalle la directiva #use fast_io
Para empezar, hay que indicar que por defecto el compilador hace uso de la directiva standard_io, es decir si no declaramos nada, se hará uso de esta directiva.

Empecemos a explicar la directiva fast_io
Esta directiva nos permite hacer uso de varias funciones para manejar los puertos y pines del microcontrolador. Es necesario declarar correctamente los pines de entrada y salida a través del registro TRISX. Las funciones que tenemos son:


Como podemos ver, tenemos varias opciones para poder gestionar adecuadamente los puertos.

EJEMPLOS:

Primero debemos declarar la directiva, luego configurar pines como entrada o salida

#use fast_io(b)

set_tris_b(0xF0);         //el valor 0 indica salida, el valor 1 indica entrada
                                    //pines b0-b3 seran salida, pines b4-b7 serán entrada

output_high(pin_b0);          //pin b0=1
output_low(pin_b1);           //pin b1=0
output_bit(pin_b2,1);          //pin b2=1
output_toggle(pin_b3);       //cambia estado del pin b3
output_b(0x00);                  //puerto b=0, solo los pines declarados como salida
output_b(0x0F);                  //los pines declarados como entrada se ponen a 1
     
x=input_state(pin_b4);        //lee la entrada del pin b4 sin cambiar el sentido del terminal(no modifica
                                               el registro tris) y almacena en la variable x
 
y=input(pin_b5);                 //lee la entrada del pin b4 y lo almacena en la variable y. fuerza al pin a
                                       comportarse como entrada (modifica el registro tris si no estuviera declarado)

z=input_b();                    //lee la entrada del puerto b, solo de los pines declarados como entrada y lo
                                          almacena en la variable z (8 bits)


Los ejemplos mostrados es la forma mas común de gestionar los puertos, ya que nos facilita bastante el manejo pin a pin y de todo el puerto.

La diferencia de la directva fast_io con la directiva standard_io es:
- standard_io no necesita que definamos el registro tris, ya que el compilador se encargara de asegurar que los pines sean de salida (cuando usamos las funciones de salida como output_x) o los pines sean de entrada (cuando usamos las funcione de entrada como input_x).
- standard_io modificará el registro tris cada vez que llamemos a las funciones, or tanto generara mas código y se ocupará mas memoria.

Siempre dependerá de la aplicación que vamos a realizar para poder hacer el uso de una u otra directiva. En mi experiencia siempre suelo usar el fast_io.

 2. A través de la RAM

Necesitamos definir correctamente los registros PORTx y TRISx, para lo cual necesitamos conocer la posición en la memoria del PIC que ocupan estos registros. Esa información la obtenemos del datasheet del microcontrolador que estemos usando.

Se declara de ña siguiente manera:

#BYTE nombre_variable = posición_memoria

EJEMPLOS:

#byte TRISD=0xF95           //la posicion de la memoria para el registro TRISD es del PIC18F4550
                                               se le esta poniendo el mismo nombre del registro, pero puede ser otro.
#byte PORTD=0xF83          //la posicion tambien para el PIC18F4550

Una vez definidas las variables ya podemos gestionar los puertos.

TRISD = 0xF0;                   //pines d0-d3 serán salida, pines d4-d7 serán entrada
PORTD = 0b00001100       //estamos escribiendo los valor en el registro, en este caso b3=1 y b2=1
                                              los demas pines serán cero.

Tambien tenemos funciones que nos permiten gestionar pin a pin, tal como se muestra en la siguiente imagen:
EJEMPLOS:

bit_clear(PORTD,2);           //pin d2=0
bit_set(PORTD,1);              //pin d1=1;
x=bit_set(PORTD,6);          //lee el estado del pin d6 y lo almacena en la variable x

bit_clear(TRISD,0);            //indica que el pin d0 sera salida
bit_set(TRISD,5);               //indica que el pin d5 sera entrada

Tambien es posible declarar un bit de un registro, como se muestra a continuació:

#bit nombre = posicion.bit

EJEMPLOS:

#bit RB4 = 0xF81.4           //le estamos nombrando como RB4 al pin b4 (la posicion corresponde al
                                             PIC18F4550
#bit LED = 0xF81.7          //le estamos nombrando como LED al pin b7
#bit BUTTON = 0xF81.6   //le estamos nombrando como BUTTON al pin b6

Ahora podemos gestionar los pines, llamando a la variable asignada.

RB4=1;                         //pin b4=1
LED=0;                         //pin b6=0

if(BUTTON==1) LED=1;    //si pin b6=1, entonces pin b7=1


Eso es todo por este post, espero sea de gran ayuda a todos los lectores

Pueden descargar el código del programa AQUI

LES DEJO UN TUTORIAL DONDE EXPLICO TODO. SUSCRABANSE AL CANAL DE YOUTUBE y REGALAME UN LIKE PARA SEGUIR SUBIENDO MAS CONTENIDO AL BLOG Y AL CANAL



CCS C Compiler - Uso de funciones (Programacion de PIC)

USO DE FUNCIONES - CCS C COMPILER

El uso de funciones en la programacón es muy usado para poder tener códigos de programa dedicados a una función especifica y asi de esta manera tener mejor organizado todo nuesttro código. A la vez también nos pueden permitir detectar errores en el código más facilmente.

En la programación de microcontroladores PIC también se hace necesario su uso cuando tengamos códigos de programa de medianas agrandes extensiones y/o cuando necesitamos que uno o mas acciones se repitan varias veces en nuestro código de programa.

En este post les explicaré como hacer uso de las funciones para programar microcontroladores PIC en el entorno de programación CCS C Compiler (PIC C Compiler)

ESTRUCTURA DE UNA FUNCIÓN

tipo_retorno nombre_función (parámetros)
{
        cuerpo_de_la_función;
      
       expresión_retorno;
}

tipo_retorno:   Es un tipo de dato que devolverá la función (los tipos de datos lo hemos visto en un
                                                                                               post anterior "VER AQUI")

nombre_función:   Es el nombre que deseamos colocarle a la función.

parámetros:  Valores de entrada que se usarán en nuestra función. Deben ir separados por comas.

EJEMPLO:

void imprimir_variable (int temperatura)
{
       printf(lcd_putc,"\fT=%2u°C,temperatura);
       delay_ms(10);
}

En este ejemplo se tiene una función que no devuelve ningun valor, por tanto es un tipo 'void'
Como parámetro tenemos un valor tipo entero de 8 bits, que en este caso tiene por nombre "temperatura"
La acción que cumple esta función es de imprimir el valor de una variable, el valor de esa variable la ingresamos cuando hacemos el llamado de la función en alguna parte de nuestro programa.

Explicado la estructura general de una función, podemos decir que hay tipos de funciones dependiendo del tipo_retorno y si tiene o no parámetros. A continuación pasamos a detallar 4 tipos:

1.  void nombre_funcion(void)

     En este caso tenemos una función que no devuelve ningun valor y no tiene ningun parámetro de entrada. Lo que hace es ejecutar el codigo de la función cada vez que es llamada.

2.   void nombre_funcion(parámetros)

      En este caso tenemos una función que no devuelve ningun valor y tiene uno o mas parámetros de entrada.

3.   tipo_dato nombre_funcion(void)

      En este caso tenemos una función que devuleve un valor (en este caso segun el tipo de dato ya sea int,char,float,etc) y no tiene parámetros de entrada.

4.   tipo_dato nombre_funcion(parámetros)

      En este caso tenemos una función que devuleve un valor (en este caso segun el tipo de dato ya sea int, char, float,etc) y tiene parámetros de entrada.

EJEMPLO:

void funcion1()
{
   output_toggle(pin_b7);
}

void funcion2(int x)
{
   lcd_putc('\f');
   lcd_gotoxy(1,1);
   printf(lcd_putc,"valor_a=%2u",x);
}

int funcion3()
{
   int resultado;
   resultado=a+15;
   return resultado;
}

char funcion4(int y)
{
   return y;
}


Espero haber ayudado a todos mis lectores y les haya sido de gran ayuda conocer mas sobre el tema de programación de microcontroladores PIC

Descarga el código del programa AQUI
LES DEJO UN VIDEO EN DONDE EXPLICO TODO, HACIENDO UN PROGRAMA EN CCS COMPILER. SUSCRIBANSE AL CANAL QUE ESTARÉ SUBIENDO MAS TUTORIALES.






domingo, 21 de junio de 2020

CCS Compiler - Tipo de Datos (Programacion de PIC)

TIPO DE DATOS - CCS COMPILER

Tipo de Datos

EJEMPLOS:

int1 x;                       //x es una variable de 1 bit, es decir puede tomar el valor de 0 y 1
int y;                         //y es una variable de 8 bits, es decir puede tomar valores entre 0 y 255
float z;                      //z es una variable de 32 bits, los valores de la variable permite decimales
char w;                     //w es una variable de 8 bits, es del tipo carácter
signed int16 v;         //v es una variable de 16 bits, pero puede almacenar valores positivos y negativos

CONSTANTES

A diferencia de las variables, el valor de las constantes se mantienen fijas, es decir no podemos modificar su valor. Este tipo de datos es alamcenado en la memoria ROM del PIC.
Para declarar un tipo de dato que sea constante se usa la siguiente sintaxis:

tipo const nombre_variable = valor;    o   const tipo nombre_variable = valor;

EJEMPLOS:

int const x = 0xF0;          //la constante x es de 8 bits cuyo valor decimal es 240
char const w = 'h';           //la constante w es de 8 bits, cuyo valor es el caracter 'h'
const int y = 255; 

ARRAYS

Es un tipo de dato estructurado que nos va a permitir almacenar un conjunto de datos homogéneos, es decir el mismo tipo de datos. Se declara de a siguiente manera:

tipo nombre_array [# elementos] ={valor1,valor2,.....,valorn};
Los valores se pueden indicar o no

EJEMPLOS:

int8 vector[4] = {0x00,0b00011000,250,0xFF};
   
    En este caso tenemos un array de nombre vector, donde se tiene almacenados 4 valores, estos se indican entre llaves. Todos los datos del array son de 8 bits, según esta indicado.

int16 temp[10];

   En este caso tenemos array donde los datos que se almacenarán serán de 16 bits. la cantidad de de datos se indica en corchetes  Los valores no estan indicados.

char letra[5] = {"hola"};

   En este caso tenemos una array donde se almacenan datos de tipo char (8 bits), como vemos se tiene almacenado un string(cadena de carácteres) de 4 elementos. El último elemento de la cadena siempre debe ser NULL (valor 0x00). El  elemento NULL marca el fin de los carácteres útiles de la cadena.
El ejemplo mostrado también se pudo definir de otras manera, lo cual se muestra a continuación:

char letra[5] = "hola";        o         char letra[5]={'h','o','l','a'};

Para poder acceder a uno de los datos guardados en alguna variable o constante lo unico que hacemos es llamar el nombre del array y la posicion que ubica. Lo explicaremos a traves del siguiente ejemplo:

int8 vector[6] = {15,16,17,18,19,20};           //vector es un array de 6 valores

Como podemos ver en la imagen, cada valor ocupa un lugar en el array; el lugar lo podemos ver de color rojo. Entonces tenemos lo siguiente:

vector[0]=15
vector[1]=16
vector[2]=17
vector[3]=18
vector[4]=19
vector[5]=20

de esta manera podemos acceder al valor de cada posición del array.

ARRAY MULTIDIMENSIONAL

Es un array de varias dimensiones, se decalara de la siguiente manera

tipo nombre_array[i][j]; 
i= numero de filas, j=numero de columnas
Al igual que en el array unidimensional se le puede asignar valores

EJEMPLO:
const int arreglo[3][4] = {{0,1,2,3},            //Se tiene un arreglo de 3 filas y 4 columnas
                                         {4,5,6,7},
                                         {8,9,10,11}};

También se pudo declarar de la siguiente manera:

const int arreglo[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};   
// el compilador asignará a los primeros 4 valores como una fila y asi sucesivamente.

Para poder acceder a los valores del arreglo hacemos lo siguiente:

arreglo[0][0]=0
arreglo[0][3]=3
arreglo[2][0]=8
arreglo[2][2]=10
arreglo[2][3]=11

Espero haber ayudado a todos mis lectores y les haya sido de gran ayuda conocer mas sobre el tipo de datos que se manejan durante la programación de microcontroladores PIC

Descarga el código del programa AQUI

LES DEJO UN VIDEO EN DONDE EXPLICO TODO, HACIENDO UN PROGRAMA EN CCS COMPILER. SUSCRIBANSE AL CANAL QUE ESTARÉ SUBIENDO MAS TUTORIALES.




domingo, 5 de agosto de 2018

Descarga Proteus 8.7 Full, GRATIS!!!

DESCARGAR PROTEUS 8.7 FULL, GRATIS

Proteus es un entorno integrado diseñado para la realización completa de proyectos de construcción de equipos electrónicos en todas sus etapas: diseño, simulación, depuración y construcción.





Peso: 374 MB

Tipo: Software educativo


Incluye Activador y Librerias de Arudino
 

LINK 100% OPERATIVO

http://zipansion.com/2gOs3


NUEVA VERSION (CLICK AQUI)



PASOS DE INSTALACIÓN:
1. Ejecutar el archivo como administrador "Proteus 8.7 SP3PRO.exe"
2. Seguimos los pasos de instalación
3. Browse for key -> Select Licence.lxk ; se encuentra en la carpeta Extra Proteus -> Activor
4. Damos en Install y continuamos los pasos.
5. No abrir el proteus una vez finalizado la instalación
6. Ir carpeta Activador y copiar "BIN" a (C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional)
7. copiar "MODELS" To ProgramData (C:\ProgramData\Labcenter Electronics\Proteus 8 Professional)
8.Abrir Proteus y Listo a disfrutar,

sábado, 4 de agosto de 2018

Descarga CCS Compiler v5.076 Full, GRATIS!!!

DESCARGAR PIC C COMPILER CCS V. 5.076 FULL GRATIS (INCLUYE ACTIVADOR)


QUE ES PIC C COMPILER

PIC C Compiler es un inteligente y muy optimizado compilador C que contienen operadores estándar del lenguaje C y funciones incorporados en bibliotecas que son específicas a los registros de PIC, proporcionando a los desarrolladores una herramienta poderosa para el acceso al hardware las funciones del dispositivo desde el nivel de lenguaje C.

El compilador CCS contiene más de 307 funciones integradas que simplifiquen el acceso al hardware, mientras que la producción eficiente y altamente optimizado código. Se incluyen funciones de hardware del dispositivo de características tales como:

* Temporizadores y módulos PWM
* Convertidores A / D
* de datos on-chip EEPROM
* LCD controladores
* Memoria externa buses
* Entre otras...


LINK 100% FUNCIONAL
http://zipansion.com/2fKAn

****** INSTALACION DE CCS COMPILER (PIC C COMPILER) ******

HOLA A TODOS

SIGAN LOS PASOS PARA PODER INSTALAR CORRECTAMENTE EL SOFTWARE

1.    DESCOMPRIMIR EL ARCHIVO DESCARGADO

2.    EJECUTAR EL ARCHIVO "pcwhdupd.exe", SIGA LOS PASOS DE INSTALACION

3.    APLICAR EL CRACK
    ABRIAMOS LA CARPETA ACTIVADOR Y COPIAMOS LOS ARCHIVOS:
    "pcb.crg", #pcd.crg", "pch.cgr", "pcm.crg"
    COPIAMOS EN LA CARPETA DONDE SE INSTALO EL PROGRAMA
    C:\Program Files (x86)\PICC

4.    REINICIAMOS NUESTRA PC Y LISTO!!


lunes, 26 de junio de 2017

CCS Compiler (PIC C Compiler) - Uso de PWM

MODULACIÓN POR ANCHO DE PULSO (PWM)

Ahora que ya conocemos como configurar el Timer 2, pasaremos a ver como utilizar el módulo CCP (módulo Comparador, Captura y PWM) del PIC, en ete post trataremos exclusivamente sobre el modulo PWM. 

En el modo PWM nos permite obtener por los pines CCPx una señal periódica en la que podemos variar su ciclo de trabajo (Duty Cicle). Con esto podemos controlar la luminosidad de focos, velocidad de motores, etc

La figura nos muestra diferentes ciclos de trabajo


Como podemos ver en la imagen de arriba para poder obtener el periodo de la señal y el ciclo de trabajo usamos el TIMER2, para ello ya se explicó en un post anterior la configuración del mismo (click aqui para ver el post).

Para poder usar correctamente el PWM debemos seguir lo siguiente:

  1. Configurar el periodo PWM mediante escritura del registro PR2.
  2. Configurar el ciclo de trabajo (Duty Cicle).
  3. Configurar el pin o pines CCPx como salida.
  4. Configurar el Preescaler del TIMER2.
  5. Configurar el módulo CCP para que opere en modo PWM.

PWM EN C

Nuestro compilador nos brinda ciertas funciones para poder manejar el módulo CCP


setup_ccpx(modo);                 //configura el tipo de modo según la tabla siguiente


set_pwmx_duty(valor);           //Definimos el ciclo de trabajo, donde valor es un dato de 8 o 16 bits

NOTA: A la salida de las patillas CCPx siempre se tendrá una señal digital, que debido al ciclo de trabajo se obtiene un promedio del voltaje total y se puede asemejar a una señal analógica. Para poder emular una señal analógica debemos de usar un filtro pasabajo, ya que es una solución sencilla para obtener  una señal análoga.

Para que puedan entender mejor de como usar el PWM del PIC led dejo el siguiente tutorial.







domingo, 1 de mayo de 2016

CCS Compiler (PIC C Compiler) - Uso del Timer 2

TIMER 2

El timer 2 es un modulo temporizador que tiene las siguientes caracteristicas:
  • Registro de 8 bits de temporización
  • Registro de periodo de 8 bits
  • Ambos registros se pueden leer y escribir
  • Preescaler programable (1, 4 y 16)
  • Postcaler programable (1 a 16)

TIMER 2 EN C

La función para configurar el timer 2 es:

setup_timer_2(modo,periodo, postcaler);

donde modo:
periodo: entero de 8 bits
postcaler: valor de de 1 a 16.

Para escribir un valor en el registro:
set_timer2(valor);
valor: entero de 8 bits

Para leer un valor actual del registro:
get_timer2();

LES DEJO UN TUTORIAL

viernes, 25 de marzo de 2016

CCS Compiler (PIC C Compiler) - Uso del Timer 1

TIMER 1

Trabaja con 16 bits ( 2 registros de 8 bits los cuales son TMR1H y TMR1L)
Ambos registros se pueden leer y escribir.

El timer 1 puede operar en uno de los siguientes modos:
  • Temporizador
  • Contador Síncrono
  • Contador Asíncrono
Se puede insertar un preescaler, es decir un divisor de frecuencia programable que puede dividir por 2, 4, 8..

El tiempo de desbordamiento del timer 1 se calcula según la siguiente ecuación:

TIMER 1 EN C

La función para configurar el timer 1 es:

setup_timer_1(modo);

donde modo:

Para escribir un valor en el registro:
set_timer1(valor);
valor: entero de 16 bits

Para leer un valor actual del registro:
get_timer1();




domingo, 13 de diciembre de 2015

CCS Compiler (PIC C Compiler) - Uso del Timer 0

TIMER 0

Este timer es un contador (registro) de 8 bits, se incrementado por hadware y es programable.
Su cuenta máxima es de 255(incremento constante e independiente)
  • Temporizador: Cuenta los pulsos internos del reloj.
  • Contador: Cuenta los eventos externos, a través del pin A4/T0CKI
Se puede insertar un preescaler, es decir un divisor de frecuencia programable que puede dividir por 2, 4, 8, 16, 32, 64, 128 o 256.

El tiempo de desbordamiento del timer 0 se calcula según la siguiente ecuación:

TIMER 0 EN C

La función para configurar el timer 0 es:
setup_timer_0(modo);

donde modo:


Los distintos modos lo podemos agrupar de la siguiente manera:
ejm.:
setup_timer_0(rtcc_div_2 | rtcc_ext_l_to_h);

Para escribir un valor en el registro:

set_timer0(valor);
valor: entero de 8 bits

Para leer un valor actual del registro:
get_timer0();

LES DEJO LOS TUTORIALES PARA QUE COMPRENDAN MEJOR EL USO DEL TIMER 0

TIMER0 COMO TEMPORIZADOR


TIMER0 COMO CONTADOR


DESCARGA EL PROGRAMA Y LA SIMULACION EN


CCS Compiler (PIC C Compiler) - Comunicación Serial

COMUNICACIÓN SERIAL

Los microcontroladores PIC usan dos formas para poder comunicarse de forma serial. los cuales son:

USART

LA función del USART es la de transmitir y recibir datos en serie

TRANSMISIÓN SINCRONA:  Los datos se transfiere de forma continua, no existe límite de tamaño

Características:

  • Modo semi-duplex
  • La comunicación serie se transmite en una sola línea, en ambos sentidos.
  • No se pueden enviar información en ambos sentidos de forma simultánea
  • La transmisión puede ser maestro o esclavo

TRANSMISIÓN ASÍNCRONA:  En este modo se emplean relojes tanto en el emisor como el receptor

Características:
  • La frecuencia del reloj se acuerda antes de la transmisión
  • La sincronización se realiza durante la transmisión
  • Transmisión es full-duplex (se utilizan dos lineas, una de transmisión (Tx) y otra de recepción(Rx))
  • Cada trama de datos tiene un tamaño fijo y posee un bit de arranque(inicio) y un bit de parada(final).

FUNCIÓN PARA CONFIGURAR EL MODULO USART EN C
#USE RS232(opciones)
     Nos permite configurar las características del modulo USART


ejemplo:
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,parity=N,bits=8)

FUNCIONES DE TRANSMISION DE DATOS
  • putc(data)
  • putchar(data)
         data es un caracter de 8 bits
  • puts(string)
          string es una cadena de caracteres constante o una matriz de caracteres terminada con un cero
  • printf(fname,cstring,values)
         fname: funcion a utilizar para escribir la cadena indicada, por defecto se utiliza putc()
         cstring: cadena de caracteres o matriz de caracteres terminada en 0.
         values: valores a indicar en la cadena, se debe indicar %nt (revisar el post de uso del LCD)


FUNCIONES DE RECEPCION DE DATOS

  • value=getc()
  • value=getch()
  • value=getchar()
         value es un carácter de 8 bits. Espera recibir un carácter por la línea RS232 y devuelve su valor.
  • valor=kbhit()
          valor=0 (false) si getc() debe esperar a que llegue un carácter
          valor=1 (true) si ya hay un carácter para ser leído por getc()

LES DEJO ESTE TUTORIAL PARA QUE PUEDAN VER COMO SE REALIZA LA PROGRAMACION


DESCARGA EL PROGRAMA Y LA SIMULACION EN


sábado, 12 de diciembre de 2015

CCS Compiler (PIC C Compiler) - Conversor Analógico Digital (ADC)

CONVERSOR ANALÓGICO DIGITAL(ADC)

Como su propio nombre lo dice, lo que hace es convertir una señal analógica a digital.
Pasa por los siguientes procesos:

  • Muestreo de la señal analógica
  • Cuantificación
  • Codificación
Estos vendrían a ser los procesos mas básicos que se tiene que realizar para convertir una señal analógica a una digital, ya que puede haber otros procesos más.


El convertidor de aproximaciones sucesivas se utiliza en aplicaciones donde se necesitan altas velocidades de conversión. Se basa en realizar sucesivas comparaciones de forma ascendente o descendente hasta encontrar un valor digital que iguale la tensión entregada por el conversor D/A y la tensión de entrada.

CARACTERISTICAS

  • Rango de Entrada(Vin): Voltaje a leer por el módulo ADC.
  • Número de bits(N): Rango de conversión usado por el ADC. Puede ser 8 o 10 bits, definido por el programador
  • Resolución: Mínimo valor de lectura. viene definido por la siguiente relación.
  • Tensión de referencia(Vref): Es el voltaje base por la cual toma como punto de referencia el modulo ADC para poder hacer sus conversiones, puede ser valor absoluto de 0 - Vref o en un margen de -Vref a +Vref.
  • Tiempo de conversión(Tad): Tiempo que demora el ADC en realizar la conversión.
  • Error de conversión: Bits erróneos generados por una mala conversión, la cual se origina por una alta velocidad o una mala configuración del modulo.
También hay otra manera de expresarla resolución, en el cual intervienen el Vref

Si Vref+ = 5V y Vref- = 0V , tenemos
por ejemplo, si tenemos que la lectura es de 256 LSB, entonces la tensión analógica será:
TABLA DE SELECCION DE FUENTES DE RELOJ

(1): El reloj RC tiene un valor tipico de Tad = 4us
(2): Estos valores violan el mínimo tiempo requerido (1.6us) de Tad
(3): Para conversiones mas rápidas se recomienda otro tipo de reloj
(4): Cuando se usa osciladores mayores de 1MHz, el modo RC es recomendable cuando se esta en el modo SLEEP


TABLA DE CONFIGURACION DE LOS CANALES


MODULO ADC EN C

En el compilador , las instrucciones para manejar el conversor AD son las siguientes:
  • setup_adc_ports(valor)

  • setup_adc(modo)

  • set_adc_channel(canal)

  • valor=read_adc()  --->  Lectura del resultado y almacenado en valor, que viene a ser un numero entero dependiendo de la directiva #DEVICE ADC= empleada.
Estos son algunos sensores cuya salida es en votios, la cual podemos hacer uso de l modulo AD del PIC para poder digitalizar y controlar esta señal.



LES DEJO EL TUTORIAL PARA QUE PUEDAN COMPRENDER MEJOR EL USO DE ESTE MODULO


DESCARGA EL PROGRAMA Y LA SIMULACION EN



miércoles, 9 de diciembre de 2015

CCS Compiler (PIC C Compiler) - Interrupciones

INTERRUPCIONES

Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la ejecución del programa principal en cualquier momento. En el momento de producirse la interrupción, el pic ejecuta un salto, a la rutina de atención a la interrupción, previamente definida por el programador, donde se atenderá a la demanda de la interrupción.



El microcontrolador pic 16f87x posee las siguientes fuentes de interrupción:

  • Interrupción externa por RB0/INT.
  • Interrupción por cambio de nivel lógico en RB4 - RB7.
  • Interrupción por desborde del timer 0.
  • Interrupción del transmisor del modulo USART.
  • Interrupción del receptor del modulo USART.
  • Interrupción del modulo CPP.
  • Interrupción del EEPROM.

INTERRUPCIONES EN C
En el compilador C, la directiva habitual en el manejo de las interrupciones es: #INT_xxxx
ejm: #INT_USB

Las posibles directivas para la familia 16F87x son las siguientes:

#INT_AD            -------------- Conversión AD completa
#INT_BUSCOL --------------- Colisión de bus
#INT_CPP1       --------------- Unidad de captura 1,comparación y PWM
#INT_CPP2       --------------- Unidad de captura 1,comparación y PWM
#INT_EEPROM -------------- Escritura EEPROM finalizada
#INT_EXT        --------------- Interrupción externa RB0
#INT_RB          --------------- Cambio de estado en B4-B7
#INT_RDA      ---------------- RS232 dato recibido
...

Existen directivas mas que pueden ser usadas, tanto para esta familia como para otras. Para mayor información les sugiero revisar el datasheet del microcontrolador

INTERRUPCION EXTERNA POR RB0

La directiva usada es #INT_EXT y se debe acompañar de las siguientes funciones.

EXT_INT_EDGE(H_TO_L);   ----- Cambio de estado de alto a bajo

EXT_INT_EDGE(L_TO_H);   ----- Cambio de estado de bajo a alto

ENABLE_INTERRUPTS (INT_EXT);  ------ Habilita la interrupción RB0
ENABLE_INTERRUPTS (GLOBAL);  ------ Habilita la interrupción de forma global.

INTERRUPCION EXTERNA POR CAMBIO DE ESTADO DE RB4-RB7

La directiva usada es #INT_RB y se debe acompañar de las siguientes funciones.

EXT_INT_EDGE(H_TO_L);   ----- Cambio de estado de alto a bajo

EXT_INT_EDGE(L_TO_H);   ----- Cambio de estado de bajo a alto

ENABLE_INTERRUPTS (INT_RB);  ------ Habilita la interrupción
ENABLE_INTERRUPTS (GLOBAL);  ------ Habilita la interrupción de forma global.

Les dejo un tutorial, en donde podrán observar paso a paso como programar el PIC haciendo uso de estas directivas.


DESCARGA EL PROGRAMA Y LA SIMULACION EN


domingo, 29 de noviembre de 2015

CCS Compiler (PIC C Compiler) - Teclado matricial

TECLADO MATRICIAL (KEYPAD 4x4)

utilizados en el desarrollo de proyectos con microcontroladores PIC y que tienen su aplicación en el ingreso de datos de manera manual por parte del usuario, en aquellos casos en que el empleo de pulsadores simples no es lo más apropiado, ya sea por la presentación final del producto o por la restricción del número de líneas de entrada de los microcontroladores PIC.

El teclado matricial 4x4 está constituido por una matriz de pulsadores dispuestos en filas (A,B,C,D) y columnas (1,2,3,4), con la intención de reducir el número de pines necesarios para su conexión. Las 16 teclas necesitan sólo 8 pines del microcontrolador, en lugar de los 16 pines que se requerirían para la conexión de 16 teclas independientes.




LIBRERIA A USAR

El compilador C incluye la librería KBD.c para manejar el teclado 3x4. las funciones que se incorporan son las siguientes:

Kbd.init();   inicializa el sistema debe ser la primera función a ser llamada
Kbd_getc();  devuelve el valor de la tecla pulsada en función a la tabla que se tiene programada.

En el caso que se quiera utilizar un teclado matricial de 4x4, tendremos que modificar la librería KBD.c

Pueden descargar la librería ya modificada para hacer uso con un keypad 4x4.

En los tutoriales se podrá ver como se realiza la programacion para poder usar el teclado, asi como tambien como modificar la libreria KBD.c para usarlo con un keypad 4x4.


Tutorial - Modificacion de Libreria KBD



Tutorial -  Programacion del PIC para uso del keypad 4x4


DESCARGA EL PROGRAMA Y LA SIMULACION EN

EL PROGRAMA