Академический Документы
Профессиональный Документы
Культура Документы
Ingeniera Mecatrnica Interfaces M.C. Ramn Daz de Len Zapata Segura Lpez Marco Antonio Torres Bez Edgar Armando Montes Alonso Aldo Antonio
CALIFICACIN
Compilador CCS CCS te ofrece un conjunto de herramientas completas e integrada para la produccion de aplicaciones embebidas corriendo en microcontroladores PIC y dsPIC de Microchip. La salida en HEX y los archivos de depuracin son seleccionables y compatibles con emuladores y programadores populares incluyendo MPLAB IDE para depuracin a nivel de fuente. PCWHD incluye un poderoso IDE bajo Windows. El compilador requiere Windows 95, 98, ME, NT4, 2000, XP, o Linux. # Bibliotecas incorporadas que funcionan con todos los chips para Entrada/Salida por puerto serie RS-232, Entradas/Salidas discretas y pausas de precisin. # Se integra al IDE de MPLAB y otros simuladores y editores para depuracin a nivel de fuente. Los archivos HEX estndar y archivos de depuracin aseguran compatibilidad con todos los programadores. # El "printf" formateado permite un formateo y muestra simple en HEX o decimal. # La implementacin eficiente de funciones permite rboles de llamada ms profundos que la pila del hardware. # Se incluyen drivers de cdigo fuente para mdulos LCD, teclados, EEPROMs serie 24xx y 94xx, relojes en tiempo real X10, DS1302 y NJU6355, dispositivos de memoria de toque de Dallas, RAM serie DS2223 y PCF8570, conversores A/D LTV1298 yPCF8591, sensores de temperatura, potencimetros digitales, expansores de Entrada/Salida y ms. # Acceso a las caractersticas del hardware desde funciones en C fciles de usar, temporizadores, conversin A/D, SSP, PSP, USB, I2C, y ms. # Tipos enteros de 1, 8, 16 y 32 bits y punto flotante de 32 bits. # Se puede insertar cdigo ensamblador en el cdigo fuente y puede referenciar variables de C. # El enlazamiento automtico puede manejar mltiples pginas de cdigo. # Soportadas funciones inline para ahorrar espacio de pila; el enlazador determinar automticamente la mejor arquitectura o se puede especificar manualmente. # Las directivas del compilador determinan si los registro tri-estado se refrescan en cada E/S o si la E/S es lo ms rpida posible. # Las constantes (incluyendo cadenas y vectores) se almacenan en la memoria de programa. # El tipo de dato bit estndar (short int) permite que el compilador genere cdigo muy eficiente orientado a Bit. # #BIT y #BYTE permite que las variables de C sean puestas en direcciones absolutas para mapear registros a variables de C. # Los parmetros de referencia se pueden usar para mejorar la lectura del cdigo y la eficiencia de las funciones inline. # PCW tiene un compilador de lnea de comando y un editor/compilador integrado. # Ventanas especiales muestran el mapa de memoria de la RAM, listados C/ensamblador, y el rbol de llamadas. # Funciones de interrupcin soportadas en PCM/PCH. El compilador genera todo el cdigo de inicio y limpieza as como identifica la funcin de interrupcin correcta a ser llamada. # Ms de 100 programas de ejemplo listos para ser ejecutados.
Se incluye: CD con el Software original v4.099 y ejemplosLicenciaTabla de caracteres ASCIITabla con la sintaxis CLibro Manual de Referencia PIC MCU C Compiler (para PIC10,/PIC12/PIC16/PIC18)Libro Manual de Referencia PCD C Compilre (para PIC24/dsPIC DSC) |Unidades | Dlares | ---------------------| 1 | 710 | | 2 | 1350 | | 2+ | (consulte) | ---------------------// // ACONDICIONAMIENTO DE SEAL // //
//////////////////////////////FUSES///////////////////////////////////////////// #fuses HSPLL,NOWDT,NOLVP,USBDIV,PLL5,CPUDIV1,VREGEN /******************************************************************************/ #use delay(clock=48000000) //Frecuencia del cristal oscilador
#include <lcd.c>
//#include "usb_bootloader.h"
{ printf(lcd_putc,"\f Bienvenido \n"); //Mje de bienvenida delay_ms(500); printf(lcd_putc,"\f Selecciona la\n" ); //Instrucciones delay_ms(500); printf(lcd_putc,"\n funcion"); //imprime el valor del voltaje de vsal delay_ms(500); printf(lcd_putc,"\n que desees"); //imprime el valor del voltaje de vsal delay_ms(500); printf(lcd_putc,"\f Solo precionala"); //imprime el valor del voltaje de vsal delay_ms(500); }
///////////////////////////SEGUIDOR DE VOLTAJE////////////////////////////////// void seguidor (void) { int16 valor=0; float sal=0; float vent=0.0; float vres=0.0; float vres2=0.0; //Variable para almacenar lectura del adc0 //Variable para mostrar el voltaje de salida en lcd //Variable para realizar calculos en zero y span //Variable para resultado del zero y span de entrada //Variable de resultado del zero y span de salida
//Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
vres2=(1.0*vres);
//Operacion a efectuar
vres2=((vres2+10)*(255.0/20.0));//entrada de 10v a -10v y salida de 0 a 255 vsal=vres2; //Cambio de variable float a unsigned char es la variable //que puede escribirse por un puerto output_B(vsal); sal=vres; //Sacamos por el puerto b el resultado //Variable para mostrar en lcd el resultado de la salida
printf(lcd_putc,"\n Vent= %f V",vres); //imprime el valor del Vent delay_ms(500); printf(lcd_putc,"\n Vsal= %f V",sal); //imprime el valor del voltaje de vsal delay_ms(500); }
////////////////////////Amplificador no inversor//////////////////////////////// void amp_no_inv (void) { int16 valor=0; //Variable para almacenar lectura del adc0
signed char ganancia=2; //Variable que da la ganancia modificar el numero //Para dar otra ganancia deseada float sal=0; float vent=0.0; float vres=0.0; float vres2=0.0; //Variable para mostrar el voltaje de salida en lcd //Variable para realizar calculos en zero y span //Variable para resultado del zero y span de entrada //Variable de resultado del zero y span de salida //Variable para sacar por el puerto
//habilita el canal analogico 0 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
vres=((vent-(1023.0/2.0))*(20.0/1023.0));//entrada 1023 y 0 salida de 10 a -10 vres2=(ganancia*vres); sal=vres2; vres2=((vres2+10)*(255.0/20.0));//entrada de 10 a -10 y salida de 0 a 255 vsal=vres2; output_B(vsal); //Operacion a efectuar
printf(lcd_putc,"\n Vent= %f V",vres); //imprime el valor del Vent delay_ms(500); printf(lcd_putc,"\n Vsal= %f V",sal); //imprime el valor del voltaje de vsal
delay_ms(500); }
///////////////////////////Amplificador inversor//////////////////////////////// void amp_inv (void) { int16 valor=0; //Variable para almacenar lectura del adc0
signed char ganancia=-2; //Variable que da la ganancia modificar el numero //Para dar otra ganancia deseada float sal=0; float vent=0.0; float vres=0.0; float vres2=0.0; //Variable para mostrar el voltaje de salida en lcd //Variable para realizar calculos en zero y span //Variable para resultado del zero y span de entrada //Variable de resultado del zero y span de salida //Variable para sacar por el puerto
//habilita el canal analogico 0 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
vres=((vent-(1023.0/2.0))*(20.0/1023.0));//entrada 1023 y 0 salida de 10 a -10 vres2=(ganancia*vres); sal=vres2; vres2=((vres2+10)*(255.0/20.0));//entrada de 10 a -10 y salida de 0 a 255 vsal=vres2; output_B(vsal); //Operacion a efectuar
printf(lcd_putc,"\f INVERSOR \n"); delay_ms(500); printf(lcd_putc,"\f GANANCIA= %d \n",ganancia); delay_ms(500); printf(lcd_putc,"\n Vent= %f V",vres); //imprime el valor del Vent delay_ms(500); printf(lcd_putc,"\n Vsal= %f V",sal); //imprime el valor del voltaje de vsal delay_ms(500); } //imprime valor de la ganancia
////////////////////////////SUMADOR INVERSOR//////////////////////////////////// void sumador_inversor (void) { int16 valor=0; float sal=0; float vent=0.0; float vent2=0.0; float vres=0.0; float vres2=0.0; float vres3=0.0; unsigned char vsal=0; //Variable para almacenar lectura del adc0 y adc1 //Variable para mostrar el voltaje de salida en lcd //Variable para realizar calculos en zero y span //Variable para realizar calculos en zero y span 2 //Variable para resultado del zero y span de entrada //Variable para resultado del zero y span 2 //Variable de resultado del zero y span de salida //Variable para sacar por el puerto
//habilita el canal analogico 0 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
//habilita el canal analogico 1 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
vres2=((vent)*(5.0/1023.0));//entrada 1023 y 0 salida de 5 a 0 vres3=(vres+vres2)*(-1.0); //Operacion a efectuar sal=vres3; vres3=((vres3+10)*(255.0/20.0));//entrada de 10 a -10 y salida de 0 a 255 vsal=vres3; output_B(vsal);
printf(lcd_putc,"\n Vent1= %f V",vres); //imprime el valor del Vent1 delay_ms(500); printf(lcd_putc,"\n Vent2= %f V",vres2); //imprime el valor del Vent2 delay_ms(500); printf(lcd_putc,"\n Vsal= %f V",sal); //imprime el valor del voltaje de vsal delay_ms(500); }
//////////////////////////SUMADOR NO INVERSOR/////////////////////////////////// void sumador_no_inversor (void) { int16 valor=0; //Variable para almacenar lectura del adc0 y adc1
float sal=0; float vent=0.0; float vent2=0.0; float vres=0.0; float vres2=0.0; float vres3=0.0;
//Variable para mostrar el voltaje de salida en lcd //Variable para realizar calculos en zero y span //Variable para realizar calculos en zero y span 2 //Variable para resultado del zero y span de entrada //Variable para resultado del zero y span 2 //Variable de resultado del zero y span de salida //Variable para sacar por el puerto
//habilita el canal analogico 0 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
//habilita el canal analogico 1 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
vres2=((vent)*(5.0/1023.0));//entrada 1023 y 0 salida de 5 a 0 vres3=(vres+vres2); sal=vres3; vres3=((vres3+10)*(255.0/20.0));//entrada de 10 a -10 y salida de 0 a 255 vsal=vres3; output_B(vsal); //Operacion a efectuar
printf(lcd_putc,"\f NO INVERSOR \n"); delay_ms(500); printf(lcd_putc,"\n Vent1= %f V",vres); //imprime el valor del Vent1 delay_ms(500); printf(lcd_putc,"\n Vent2= %f V",vres2); //imprime el valor del Vent2 delay_ms(500); printf(lcd_putc,"\n Vsal= %f V",sal); //imprime el valor del voltaje de vsal delay_ms(500); }
/////////////////////////////ZERO y SPAN//////////////////////////////////////// void zero_span (void) { int16 valor=0; float sal=0; float vent=0.0; float vres=0.0; float vres2=0.0; //Variable para almacenar lectura del adc0 //Variable para mostrar el voltaje de salida en lcd //Variable para realizar calculos en zero y span //Variable para resultado del zero y span de entrada //Variable de resultado del zero y span de salida //Variable para sacar por el puerto //Referencia en el zero y span
//habilita el canal analogico 0 //Delay para estabilizar conversion //variable para almacenara lectura del adc //Cambio de variable int16 a float
printf(lcd_putc,"\f Vent1= %fV\n",vres); //imprime el valor del Vent1 delay_ms(500); printf(lcd_putc,"\f Vref= %dV\n",vref); //imprime el valor del Vref delay_ms(500); printf(lcd_putc,"\f Vsal= %fV\n",sal); //imprime el valor del voltaje de vsal delay_ms(500); }
void main() {
int entradas;
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL );
lcd_init(); bienvenida();
while(TRUE) {
Compilador Arduino Caractersticas generales de la placa Se trata de una placa open hardware por lo que su diseo es de libre distribucin y utilizacin, que incluso podemos construirnos nosotros mismos. El programa se implementar haciendo uso del entorno de programacin propio de arduino y se transferir empleando un cable USB. Si bien en el caso de la placa USB no es preciso utilizar una fuente de alimentacin externa, ya que el propio cable USB la proporciona, para la realizacin de algunos de los experimentos prcticos s que ser necesario disponer de una fuente de alimentacin externa ya que la alimentacin proporcionada por el USB puede no ser suficiente. El voltaje de la fuente puede estar entre 6 y 25 Voltios. Entorno de desarrollo Para programar la placa es necesario descargarse de la pgina web de Arduino el entorno de desarrollo (IDE). Se dispone de versiones para Windows y para MAC, as como las fuentes para compilarlas en LINUX. Lo primero que tenemos que hacer para comenzar a trabajar con el entorno de desarrollo de arduino es configurar las comunicaciones entre la placa Arduino y el PC. Para ello deberemos abrir en el men "Tools" la opcin "Serial Port". En esta opcin deberemos seleccionar el puerto serie al que est conectada nuestra placa. En Windows, si desconocemos el puerto al que est conectado
nuestra placa podemos descubrirlo a travs del Administrador de dispositivos (Puertos COM & LPT/ USB Serial Port). El uso de arduino y labview es muy intuitivo, ya que al ser labview un lenguaje de programacin grafico es relativamente sencillo poder utilizar la placa arduino con labview. A continuacin se muestra un cdigo de ejemplo para conectar la tarjeta de arduino con Ethernet shield y poder crear un servidor. #include<SPI.h> #includeEthernet.h> // network configuration. gateway and subnet are optional. // the media access control (ethernet hardware) address for the shield: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,50); //CREAMOS LA VARIABLE PARA EL SERVIDOR ETHERNET, EN EL PUERTO 23 EthernetServer server = EthernetServer(23);
void setup() { Serial.begin(9600); Serial.println("Serial inicializado"); // INICIALIZAMOS EL SERVIDOR ETHERNET Ethernet.begin(mac, ip); .. // EMPEZAMOS A ESCUCHAR A LA ESPERA DE CLIENTES server.begin(); }
void loop() {
EthernetClient client = server.available(); //-> Devuelve un cliente en caso de que exista if (client == true) { //mientras el cliente siga conectado while(client.connected()) { .. //si hay datos disponibles para leer if (client.available()){ //aqu leeramos el comando y devolveramos la respuesta // para leer: char c = client.read(); //para escribir: client.println(cadena);
} } Compilador MikroC Estructura bsica de un programa en mikroC PRO (sin funciones) Todos los programas (cdigo fuente) de microcontroladores PIC y AVR en C tienen una estructura bsica, a partir de la cual se desarrolla cualquier aplicacin del usuario: //Nombre_de_programa.c //Descripcin del programa. //Autor: Ing. Penagos R. //Declaracin de variables ... //Funcin principal void main( ){ //Instrucciones del programa. ... } Los 7 elementos bsicos de la programacin de PIC y AVR en C La programacin de PIC en C se puede comprender mejor si se estudian sus elementos bsicos; una vez que se dominen estos elementos se podr dar solucin a la gran mayora de problemas de programacin. El propsito de la mayora de los programas es resolver un problema. Los programas resuelven los problemas por medio de la manipulacin de informacin o datos. Normalmente los programas se caracterizan por permitir el ingreso de informacin, tener uno o varios lugares de almacenamiento de dicha informacin, contar con las instrucciones para manipular estos datos y obtener algn resultado del programa que sea til para el usuario. Tambin, las instrucciones se pueden organizar de tal forma que algunas de ellas se ejecuten slo cuando una condicin especfica (o conjunto de condiciones) sea verdadera, otras instrucciones se repitan un cierto nmero de veces y otras pueden ser agrupadas en bloques que se ejecutan en diferentes partes de un programa. Lo anterior constituye una breve descripcin de los siete elementos bsicos de la programacin: entrada de datos, tipos de datos, operaciones, salida, ejecucin condicional, lazos y funciones. Una vez que se dominan estos elementos se puede afirmar que se conocen los fundamentos de la programacin, con lo cual ya es posible desarrollar una gran cantidad de aplicaciones de diversa ndole. Instrucciones bsicas de PIC y AVR en C 1.- Instruccin de asignacin (=)
Permite asignar a una variable un valor constante, el contenido de otra variable o el resultado de una expresin matemtica. La asignacin va de derecha a izquierda. Por ejemplo, suma=0; //El valor 0 se almacena en la variable suma. x0=x1; //El contenido de la variable x1 se almacena en la variable x0. dx=(b-a)/n; //El resultado de la expresin matemtica se almacena en la variable dx.
2.- Instruccin de entrada de datos (variable=PORTx) Permite el ingreso de uno o ms datos a travs de los pines del microcontrolador y almacenarlos en una o ms variables. Por ejemplo, variable=PORTA; //Los bits del puerto A se almacenan en la variable. El siguiente es un caso especial utilizado en la programacin de microcontroladores PIC en C: PORTB=PORTA; //Los bits del puerto A se envan hacia los pines del puerto B. Tambin se puede leer el estado individual de cada bit de un puerto: variable=RB3_bit; //Lee el estado del pin RB3 y lo guarda en la variable. 3.- Instruccin de salida de datos (PORTx=dato) Permite el envo de datos, el contenido de una variable o el resultado de una expresin matemtica hacia los pines de un puerto. Por ejemplo, PORTA=0x00; //Todos los pines del puerto A se ponen en 0. PORTB=variable; Los bits de la variable son enviados hacia los pines del puerto B. PORTB=PORTA+65; //El valor del puerto A ms 65 se enva hacia el puerto B. Como caso especial, se pueden enviar bits individuales a cada uno de los pines de un puerto: RB0_bit=0; //El pin RB0 se pone en 0. 4.- Instruccin de decisin (if...else) Permite la ejecucin de las instrucciones1 si la condicin es verdadera, de lo contrario se ejecutan las instrucciones2. Las llaves { } no son necesarias cuando hay una sola instruccin. if (condicin){ instrucciones1; } else{ instrucciones2; } 5.- Instruccin de ciclo controlado por una variable (for) Permite ejecutar un grupo de instrucciones de manera repetitiva, una determinada cantidad de veces. for (nmero de veces){ instrucciones; }
6.- Instruccin iterativa condicional (while) Permite ejecutar un grupo de instrucciones de manera repetitiva, mientras una condicin sea verdadera. Primero se revisa la condicin para determinar su valor de verdad (verdadero o falso) y luego se ejecutan las instrucciones. while (condicin){ instrucciones; } 7.- Instruccin hacer-mientras (do...while) Permite ejecutar un grupo de instrucciones de manera repetitiva, mientras una condicin sea verdadera. Es similar a la instruccin while, con la diferencia de que primero se ejecutan las instrucciones y luego se revisa la condicin. do{ instrucciones; } while (condicin); La informacion anterior es aplicable tanto para AVR como para PIC. El siguiente ejemplo es para un microcontrolador AVR. Ejemplo 1 //modulo pwm con avr char current_duty; char current_duty1; void main(){ DDC0_bit = 0; DDC1_bit = 0; DDC2_bit = 0; DDC3_bit = 0; current_duty = 255; current_duty1 = 255; DDRB.B1 = 1; DDRB.B2 = 1; // Set PORTC pin 0 as input // Set PORTC pin 1 as input // Set PORTC pin 2 as input // Set PORTC pin 3 as input // initial value for current_duty // initial value for current_duty // Set PORTB pin 1 as output pin for the PWM (according to datasheet) // Set PORTB pin 2 as output pin for the PWM (according to datasheet) _PWM16_PRESCALER_16bit_1,
do { if (PINC.B0) { // Detect if PORTC pin 0 is pressed Delay_ms(40); // Small delay to avoid deboucing effect current_duty++; // Increment duty ratio PWM16bit_Change_Duty(current_duty, _TIMER1_CH_A); // Set incremented duty } else
if (PINC.B1) { // Detect if PORTC pin 1 is pressed Delay_ms(40); // Small delay to avoid deboucing effect current_duty--; // Decrement duty ratio PWM16bit_Change_Duty(current_duty, _TIMER1_CH_A); // Set decremented duty ratio } else if (PINC.B2) { // Detect if PORTC pin 2 is pressed Delay_ms(40); // Small delay to avoid deboucing effect current_duty1++; // Increment duty ratio PWM16bit_Change_Duty(current_duty1, _TIMER1_CH_B); // Set incremented duty } else if (PINC.B3) { // Detect if PORTC pin 3 is pressed Delay_ms(40); // Small delay to avoid deboucing effect current_duty1--; // Decrement duty ratio PWM16bit_Change_Duty(current_duty1, _TIMER1_CH_B); // Set decremented duty ratio } } while(1); } Ejemplo 2 //comunicacion serial char uart_rd; void main() { UART1_Init(9600); // Initialize UART module at 9600 bps Delay_ms(100); // Wait for UART module to stabilize UART1_Write_Text("Init"); UART1_Write(13); UART1_Write(10); while (1) { // Endless loop if (UART1_Data_Ready()) { // If data is received, uart_rd = UART1_Read(); // read the received data, UART1_Write(uart_rd); // and send data via UART } } } Ejemplo 3 //pwm controlado desde labview char dato; int current_duty; // Endless loop
void PWM_LABVIEW(void);//definimos una subrutina void Configure_Port(void);//definimos subrutina void Configure_Serial_Communication(void);//subrutina void main() { Configure_Port();//llamamos subrutina Configure_Serial_Communication();//llamamos subrutina PWM1_Init(_PWM1_FAST_MODE, current_duty); _PWM1_PRESCALER_8, _PWM1_NON_INVERTED,
//INICIA EL MODULO PWM EN MODO RAPIDO, CON UNA PRESCALA DE 8, CONFIGURADO EN MODO NO INVERTIDO Y EL CICLO DE TRABAJO ES //CURRENT DUTY while(1) { PWM_LABVIEW();//llamamos la subrutina para que se ejecute } } void Configure_Port(void) { DDB0_bit = 0; DDB1_bit = 0; DDC0_bit = 0; DDC1_bit = 0; current_duty = 127; DDB3_bit = 1; DDD7_bit = 1; // RB0 como entrada // RB1 como entrada // RC1 como entrada // RC1 como entrada // inicializamos la variable para el PWM inicie en 50% // Ponemos RB3 como SALIDA para el PWM // Ponemos RD7 como SALIDA para el PWM
//NOTA EL DATASHEET DEL MICRO NOS DECIA QUE TENIAMOS QUE PONER ESTOS PINES COMO SALIDA.... //EN EL PIC NO ES NECESARIO.............
} void Configure_Serial_Communication(void) { UART1_Init(9600); Delay_ms(100); //Inizializa el modulo UART a 9600 bps //Retardo para que se estabilice el modulo //Transmitimos una cadena de prueba
UART1_Write_Text("Prueba"); }
void PWM_LABVIEW(void) //codigo de la subrutina { if (UART1_Data_Ready()==1) recibio algo... { //si llego algo dato = UART1_Read(); UART1_Write(dato); // le el dato y lo guarda en dato.... // y envia lo que llego... //Data_Ready se pone en 1 si hay datos en el buffer, es decir si ya
current_duty=(int)dato;//CAST //con estas dos lineas tenemos una comunicacion full duplex... PWM1_Set_Duty(current_duty); // le asignamos el ciclo de trabajo al pwm } } Raspberry Pi La raspberry pi es una computadora del tamao de una tarjeta de crdito, cuenta con un procesador ARM a 700MHz el cual se le puede realizar overclock para aumentar la frecuencia hasta 1GHz, tambin cuenta con un procesador grfico GPU videocore capaz de reproducir video hasta 1900x1080p full hd, 512 de memoria RAM y un GPIO de 26 pines. Cuenta con dos modelos, el tipo A y B, las caractersticas de hardware que tiene el tipo B es que cuenta con 2 puertos USB, salida de video RCA y HDMI, Salida de audio por un Jack de 3.5mm y HDMI, memoria RAM de 512, un puerto de Ethernet, una entrada microUSB tipo B para la alimentacin a 5V, una ranura SD y cuenta con un Soc de 700MHz con arquitectura ARM. El pecio de la raspberry pi tipo B es alrededor de $35dls. Para su compra, sus distribuidores oficiales son Newark.com y rscomponents.com
Figura 2. Hardware de la Raspberry PI La diferencia entre el tipo A y B radica en que el tipo A contiene solo un puerto USB, cuenta con 256 de memoria RAM y no cuenta con el puerto Ethernet (RJ45), en la Figura 3 se muestra un cuadro entre las diferencias de ambas tarjetas tipo A y B.
El puerto GPIO (General Purpose Inpu/outpu) permite la comunicacin con el exterior tanto para activar actuadores como para leer el estado de los mismos. Se tiene que tener cuidado ya que no tiene proteccin el puerto, ya que est directamente ligada con el chip del procesador. En la Figura 4 se muestra la configuracin de los pines del puerto GPIO
El sistema operativo arranca desde la tarjeta SD, ya que no cuenta con un disco duro para el almacenamiento, los sistemas operativos soportados son: Raspbian wheezy, que es derivado de la distribucin de Debian. ArchLinux Fedora Raspbcm Para obtener el sistema operativo se descargan desde este link: http://www.raspberrypi.org/downloads
Estos sistemas operativos estn especialmente distribuidos para el funcionamiento en la raspberry pi por su arquitectura ARM. Para la instalacin del SO se utiliza el software Win32 Disk Imager para Windows. http://sourceforge.net/projects/win32diskimager/
Entre los usos que se le puede dar a la Raspberry PI, es la de montar un Media Center, ya que es capaz de reproducir pelculas en HD ya sea instalando XBMC o a travs de distribuciones Linux que ya lo integran como RaspBMC u OpenElec. Se puede usar para el uso de una estacin meteorolgica Uso como un servidor NAS, se puede acceder a archivos de cualquier computadora, telfono celular o Tablet que est conectado a la red con la posibilidad de establecer una red pblica o privada para compartir archivos. Crear un servidor VPN para la conexin a internet de forma ms segura, por ejemplo conectarse a la computadora del hogar a travs de una red pblica, pero navegar por internet utilizando la conexin de tu casa en lugar de la red pblica el cual puede ser insegura. Uso en la domtica, para automatizar determinados lugares del hogar, por ejemplo el control del aire acondicionado, iluminacin ya sea de una habitacin o de la casa entera, control de sensores y actuadores. Acceder remotamente desde otro ordenador a la raspberry pi, se puede acceder por el protocolo SSH para interactuar con la raspberry pi desde otra computadora, a base de esto, la raspberry pi se puede dejar conectado a internet por Ethernet y controlarlo desde otra PC va remotamente. Mediante este acceso solo se podr controlar la terminal, para un acceso remoto grafico se puede realizar mediante VNC que es un servicio gratuito para Windows y Mac. Para la programacin del puerto GPIO se puede realizar utilizando diferentes lenguajes de programacin, como son C, C#, Java, Basic, Python, Perl, Pascal, etc. En este link se encuentra informacin sobre el manejo del puerto GPIO as como ejemplos de cada lenguaje de programacin para realizar un blinking de un led http://elinux.org/RPi_Low-level_peripherals Existe una librera el cual se llama wiringPI, donde se puede programar en C y C++ muy similar a Arduino, para su instalacin es mediante este link: https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/ Tambin est un software el cual se puede tener control del puerto GPIO de la raspberry pi a travs de un entorno web de modo remoto. El software es WebIOpi, para su uso es importante instalar webiopi en la raspberry pi, y desde cualquier computadora o Smartphone se puede tener control del GPIO, para esto es necesario escribir en el navegador la IP de la raspberry pi y seguido del puerto como se muestra en la Figura 4. Para evitarse el uso de escribir siempre la IP, existe la posibilidad de instalar No-IP en la raspberry pi el cual nos permite poner el nombre del dominio y
seguido del puerto, por ejemplo ya no sera necesario escribir 192.172.1.99:8000 con No -IP seria de manera ejemplo:8000
Figura 5. WebIOpi Tambin cuenta con la posibilidad de modificar el entorno grafico al que se accede remotamente ya sea desde una PC o celular, ya que es open source con licencia Creative Commons, http://code.google.com/p/webiopi/wiki/INSTALL Un punto importante es establecer una IP estatica a la Raspberry PI para tener una conexin ms sencilla de manera por ejemplo remota, un mtodo fcil de realizar es desde la terminal realizando estos pasos: Sudo nano /etc/network/interfaces Se abrir un archivo, el cual hay que editar la parte address donde se aade la IP deseada, Gateway para la puerta de enlace y netmask para la mscara. Para guardar el archivo es mediante ctrl+o y para salir es mediante ctrl+x