Electrónica y programación para Microcontroladores.

Libros técnicos para electrónica programable.

Email
Contactanos en:

consultas@firtec.com.ar

Arduino

Trabajando con XC8 y el sensor Dallas DS18B20.

Este trabajo compilado con XC8 para un PIC18F4620, mide la temperatura con un sensor DS18B20 muestra la temperatura en una pantalla 16x2 y también envía por la UART el dato de temperatura.
En este ejemplo podemos encontrar rutinas para el envío de cadenas y manejo de la UART de un PIC18, las funciones para otros sensores como el DS18x20 y el manejo del una pantalla LCD 16x2.

 En particular hay dos funciones interesantes de comentar, la función que envía cadenas almacenada en la memoria de programa.

 

1
2
3
4
5
6
7
8
9
void xputrsUSART(const char *data)
{
  while(*data != '\0')
  {  
    while(BusyUSART());
    putcUSART(*data);
	*data++;
  }
}

 

 Donde vemos que la función no tiene argumento de retorno pero si de trabajo, un puntero del tipo char declarado const que apuntará a la cadena contenida en memoria de programa.
Un bucle que se repite mientras el carácter null no sea encontrado, este carácter no será transmitido por la UART.
Otro bucle while() es el encargado de recorrer la cadena enviando carácter por carácter esperando que el buffer del transmisor esté vacío, luego incrementa la dirección del puntero hasta que el bucle principal encuentre la marca del fin de cadena.
La función que envía cadenas desde la RAM es igual a la anterior solo que el puntero es del tipo char ya que apunta a la memoria RAM.

 

1
2
3
4
5
6
7
8
9
void xputsUSART(char *data)
{
  while(*data != '\0')
  {  
    while(BusyUSART());
    putcUSART(*data);
	*data++;
  }
}

 

El funcionamiento de esta función es idéntico al anterior.

El archivo principal quedaría de esta forma:

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
void main(void){
float Grados=0; 	// Variable para contener el dato temperatura
char TempStr[5];	// String para convertir el dato en caracteres
 
OpenUSART (USART_TX_INT_OFF & 	// TX sin interrupción
           USART_RX_INT_OFF &	// RX sin interrupciónes
           USART_ASYNCH_MODE &	// Modo asincrónico
           USART_EIGHT_BIT &	// Modo alta velocidad
           USART_BRGH_HIGH, 64);// 19200 baudios a 20Mhz
 
lcd_init();	 //Inicializa el LCD
xputrsUSART("\n\r\nFirtec Data Logger Remoto de Temperatura");
xputrsUSART("\n\rFirmware revision v1.0\n\r");
lcd_putrs(" Iniciando....");
delay(5000);  // Espera 5 segundos para empezar a medir la temperatura.
lcd_gotoxy(2,1);
lcd_putrs("SENSOR DS18B20"); 
lcd_gotoxy(1,2);
lcd_putrs("Temperatura:    ");
 
while(1){
  Convert_Temperature();	
   Grados = Read_Temperature_DS18B20();
    sprintf(TempStr,"%2.1f", Grados);
     lcd_gotoxy(13,2);     
      lcd_puts(TempStr);
       xputrsUSART("\n\rCelsius: ");
        xputsUSART(TempStr);
         delay(1000);
 }
}

 

 

 El proyecto completo para MPLAB X lo puedes descargar desde este link

.

 

Medición ultrasonica con sensor SRF-05.

SRF05 es un nuevo sensor de distancias pensado para ser una actualización del clásico SRF04 con el que es compatible, pero además añadiendo nuevas funciones y características. En el modo estándar, el SRF05 se comporta igual que el SRF04 con la diferencia de que el rango de trabajo se ha aumentado de 3 a 4 metros. Esto significa que todo el software que funciona con el SRF04, funciona con el SRF05. Por otro lado, el SRF05 cuenta con un nuevo modo de trabajo que emplea un solo pin para controlar el sensor y hacer la lectura de la medida. Lo que se hace es mandar un impulso para iniciar la lectura y luego poner el pin en modo entrada. Después basta con leer la longitud del pulso devuelto por el sensor, que es proporcional a la distancia medida por el sensor. El SRF05 es mecánicamente igual al SRF04, por lo que puede ser un sustituto de este.

El sensor SRF05 incluye un breve retardo después del pulso de eco para dar a los controladores más lentos como Basic Stamp y Picaxe el tiempo necesario para ejecutar sus pulsos en los comandos. El sensor SRF05 tiene dos modos de funcionamiento, según se realicen las conexiones.

 

Que es ARM?

ARM inició en 1983, como un proyecto de desarrollo en la empresa Acorn Computers  y en abril de 1985 presentaron su primer chip que contenía un bus de datos de 32 bits, ARM es 32 bits desde su origen.

ARM es una empresa peculiar ya que no fabrica los dispositivos si no que ofrece distintos tipos de licencias tanto sobre sus conjuntos de instrucciones como sobre sus arquitecturas.

El fabricante del dispositivo que puede ser una televisión, una cámara de fotos, una lavadora o una tablet decide si le conviene más usar el diseño propio de ARM o crear el suyo.
El trabajo de ARM es más el de un arquitecto que el de un constructor, ellos diseñan y otros lo ponen en práctica. Esos otros son empresas como Samsung, Texas Instruments, Qualcomm, Nvidia, Apple, Motorola, etc, que basan sus procesadores en diseños licenciados a ARM.

Que es Cortex M4?

Es un microcontrolador que pertenece a la arquitectura ARM7 de última generación y de los mas poderosos dentro de la gama de núcleos escalares con un set de instrucciones ortogonal que dan a este controlador gran flexibilidad y eficiencia para ejecutar código en C.

Cortex M4 es una arquitectura RISC con un conjunto de instrucciones de 32 bits. Las prestaciones de este controlador permite ya la ejecución de RTOS, Android, Linux, etc.

Dentro de un Cortex hay varios buses de datos que se vinculan a distintos periféricos, esto último es muy importante porque marca una de las grandes diferencias con un microcontrolador de 8 bits o de arquitectura “tradicionalen donde podemos tener la certeza de que cada operación dura un determinado tiempo o ciclo de CPU lo que lleva a que los tiempos en juego se pueden determinar con facilidad. En un micro de 32 bits hay varios buses y los tiempos ya no son tan fáciles de predecir puesto que otros periféricos pueden estar usando estos buses o si el micro tiene memoria cache esto altera los tiempos en juego por lo que debe usted desterrar la idea que solo basta con contar las instrucciones y multiplicar por la velocidad del bus.

Lo siguiente que puede resultar un poco confuso es que todo dentro del Cortex tiene su reloj individual que por defecto esta desconectado. Es decir entonces que para hacer uso de un módulo una de las configuraciones que debemos incluir es activar y el reloj y determinar una frecuencia de operación dentro del rango que el bus admite.

Que es CMSIS?

El éxito comercial de licenciar los núcleos de los procesadores y permitir que cada cliente pueda incorporarle a este núcleo los periféricos que necesita para sus aplicaciones específicas trae un problema que es la compatibilidad para programar estos periféricos bajo un mismo criterio, es decir que un periférico de Freescale y uno con la misma funcionalidad de STM se deberían programar de igual manera para de esta forma simplificar el trabajo y permitir a los programadores tener una forma mas flexible de elegir el hardware.

Esto es lo que hace CMSIS, genera una capa de software que separa al programador del hardware permitiendo programar en un nivel superior y con un interfaz unificada para todos los Cortex independientemente de su fabricante.

Porqué me debería interesar ARM?

Bueno, si estamos trabajando con microcontroladores y vemos que actualmente cerca del 85% de los dispositivos móviles llevan un chip ARM y que las principales empresas fabricantes de chips están trabajando con núcleos ARM, y si a esto sumamos los bajos costos, herramientas de desarrollo libres y microcontroladores que no requieren un programador específico para ser programados, es motivo al menos que justifica investigar que está pasando con ARM.

Información sobre estos temas y muchos mas la encontrará en nuestros libros técnicos.