lunes, 16 de junio de 2014

Modul Bluetooth / PIC

Connexió del modul


Consultando la página de Microchip encontramos el datasheet del PIC (en este caso 16F866) que vamos a utilizar. El pin 18, que corresponde a la señal RC7, es el pin de recepción serie de la EUSART (RX), mientras que el pin 17 es el de transmisión (TX) y corresponde a RC6.
En el fichero de cabecera debe aparecer algo así:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)
El programa devuelve el código recibido por el puerto serie en mayúsculas:
#include <main.h>
#include <stdio.h>
#int_RDA
void  RDA_isr(void)
{
   if (kbhit()) putc(toupper(getc()));
}
void main()
{
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   printf("Prueba de comunicación BT\n\rhttp://blog.deinventos.com\n\r");
   while(TRUE)
   {
   }
}
Compilamos el programa y lo grabamos en el PIC. Al alimentar el circuito, el led del HC06 parpadea indicando que no hay conexión, debemos establecer la conexión con el PC o el teléfono y el convertidor (normalmente “linvor”) y escribir la contraseña para emparejar (1234). Abrimos el emulador de terminal y al conectar la luz parpadeante se pondrá fija.
Si todo ha ido bien todo lo que escribamos en el terminal nos debe volver escrito en mayúsculas.

Control de motor Unipolar amb MOSFET

jueves, 5 de junio de 2014

Programacion en CCS

Directivas a incluir al inicio de los programas:

#include<16F877A.h> archivo donde se incluyen las definiciones de los registros del PIC.

#use delay (clock=4000000); directiva para el uso de retardos, entre  paréntesis tenemos que poner la frecuencia de reloj que vamos a  utilizar.

#use rs232 (baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) esta directiva es para la comunicación del PIC con otro dispositivo vía RS232, por ejemplo un ordenador, en ella se encuentran definidas los prototipos de las funciones de entrada y salida como printf().

#fuses XT,PUT,NOWDT esta directiva

#include <LCD.c>
lcd_init();
printf("Esto es una cadena\r"); 
\r
Retorno de carro
\t
Tabulador
\'
Comilla simple
\"
Comillas dobles
\\
Barra invertida
\?
Símbolo de interrogación
\0
Caracter nulo
\%
Símbolo Tanto por ciento
\b
Retroceder un caracter

Directivas del preprocesador:
Son extensiones del C estandard. Comienzan siempre por el carácter #. El compilador CCS admite que se inicie con PRAGMA para mantener la compatibilidad con otros compiladores.


(Las dos lineas son equivalentes)
#INLINE
#PRAGMA INLINE

Directivas de control de memoria:
#ASM
#END ASM
Las lineas incluidas entre estas dos directivas se tratan como código ensamblador. La variable _RETURN_ se puede usar para pasar un valor de retorno de la funcion.

#BIT identificador = x.y  
Crea un identificador ID que se puede usar como SHORT INT

#define


Declaración de variables:

tipo nombre_variable [valor];
int i;
int i=5;
int a,b,c,d,e;


const int Min=10, INTERVAL=15;
#define Min 10



Tipos de variables:



Operadores:

expresion = expresion1 operador expresion2
variable = variable + 5;
variable += 5;


Operadores aritméticos : 
OperadorDescripción
  +
Suma
  -
Resta
  *
Multiplicación
  /
División
  %
Módulo (Resto de una división entera)
  ++
Incrementa en uno el valor del operando
  --
Decrementa en uno el valor del operando


Operadores de asignacion: 
OperadorDescripción
  +=
Asignación de suma. x+=y es lo mismo que x=x+y
  -=
Asignación de resta. x-=y es lo mismo que x=x-y
  *=
Asignación de multiplicación. x*=y es lo mismo que x=x*y
  /=
Asignación de división. x/=y es lo mismo que x=x/y
  %=
Asignación de resto de división. x%=y es lo mismo que x=x%y
  <<=
Asignación de desplazamiento a la izquierda. x<<=y es lo mismo que x=x<<y
  >>=
Asignación de desplazamiento a la derecha. x>>=y es lo mismo que x=x>>y
  &=
Asignación de AND de bits. x&=y es lo mismo que x=x&y
  |=
Asignación de OR de bits. x|=y es lo mismo que x=x|y
  ^=
Asignación de OR exclusivo de bits (XOR). x^=y es lo mismo que x=x^y


Operadores relacionales:


OperadorDescripción
  <
Menor que
  >
Mayor que
  <=
Menor o igual que
  >=
Mayor o igual que
  ==
Igual a
  ¡=
Distinto de

Operadores Lógicos:
OperadorDescripción
  !
NO lógico
  &&
Y lógico
  ||
O lógico

Operadores de manejo de bits:
OperadorDescripción
  ~
Negación de bits (complemento a 1)
  &
Y de bits (AND)
  |
O de bits (OR)
  ^
O exclusivo de bits (XOR)
 >>
Desplazamiento a la derecha
 <<
Desplazamiento a la izquierda

Operadores de direccion (&) e indireccion (*) (punteros):
OperadorDescripción
  &
Operador de dirección
  *
Operador de inderección
  ->
Acceder a los miembros de una estructura por medio de punteros

int y,z; //declaración de las variables x e y de tipo entero:

int *x; //declaración de la variable puntero x que guardará la dirección de memoria de una variable de tipo entero.

x=&y; // a través del operador de dirección (&) le asigno al puntero x la dirección de memoria donde está guardada la variable y.

z=*x; //a través del operador de inderección (*) le asignamos a z el valor de la variable cuya dirección está almacenada en la variable puntero x.


Constantes:
12 - Decimal
o12 - Octal
0x12 - Hexadecimal
0b010010 - Binario
'x' - Caracter
'\010' - Caracter octal
'/x' - Caracter especial (n,t,b,r,f,',\d,v)
"abcdefg" - Cadena (caracter nulo al final"

Identificadores:
ABCDEfgh - Hasta 32 caracteres (no puede empezar por numero)
var[x] - Indice (x es un valor)
var[x][y] - Indice multiple
ID.ID - Referencia a una estructura o union
ID-->ID - Referencia a una estructura o union



Funciones de Salida (bit)
output_low(PIN_Xn) //pone a 0.
output_high(PIN_Xn) //pone a 1.
output_bit(PIN_Xn,valor) //pone el pin Xn a valor (0 ó 1). output_toggle (PIN_Xn) //complementa el valor del pin output_float (PIN_Xn) //Pin como entrada (simula d. ab.) 15

Funciones de E/S (bit)
output_low(PIN_A0);
output_high(PIN_B1);
output_bit(PIN_B3,0);
output_toggle (PIN_C6);
output_float (PIN_A2);
valor=input_state (PIN_B7);
valor=input(PIN_C3); 17

Funciones de E/S (byte)
output_X(valor)  à Escribe valor en el puerto X

valor= input_X() à Lee el valor del  puerto X