Una gran ventaja de los PIC frente a los arduinos es que el usb lo lleva incorporado el uC. Esto significa que para realizar una pequeña unidad de control con comunicación USB con un PC, no necesitamos de un interface serie-usb externo.
Esto nos simplifica mucho el circuito, y en el caso de algunos Pic pueden llevar comunicación USB con solo 14 pines, como es el caso del PIC16F1455. Una maravilla, cuando lo que queremos es hacer pequeñas tarjetas de adquisición de señales, interface entre USB e ICSP, o pequeños controladores de motores, servos, temperatura, etc en el que deseemos visualizar datos en pc o retocar parámetros por usb..
El mayor problema que he encontrado ha sido encontrar los drivers para el modo (o clase) CDC, es decir, como un puerto serie virtual de comunicaciones, para W7 64 bits.
El ejemplo no me interesaba, pero dentro del zip se encontraban los drivers, que si funciona.
El esquema de conexión del Pic no tiene ciencia, pues simplemente es conectar los pines +D y -D con sus correspondientes pines en el conector USB.
En caso de colocarlos al revés veremos que el ordenador nos indica "Periférico no reconocido". En caso de estar bién, nos reconocerá el periférico como "Serie Demo".
Entonces simplemente tendremos que indicar el directorio donde hemos descomprimido los drivers, para que reconozca el dispositivo como Puerto Com.
Una vez que se reconozca, podremos cambiarlo de numero de puerto según lo tiene ya explicado la página anterior.
Este pic es tan completo, que resulta casi ridículo hacer una placa tipo arduino para él, ya que son muy pocos los componentes adicionales para hacerlo funcionar.
Existe sin embargo un intento de crear una plataforma equivalente a Arduino. Se llama Pinguino. Es más el esfuerzo por crear un entrono de programación compatible con arduino, que el hecho del hard. No lo he probado, pues está muy verde, pero si se consigue servirá para utilizar el hard y sobre todo las librerías de Arduino en PIC.
Desde mi punto de vista prefiro el chip solo y programar directamente con PICC. Con un programador como el Pickit3, al precio que está, no tiene sentido utilizar bootloader.
La placa que veis sería básicamente un Pinguino, pues el Pinguino no es mas que el chip con el reset, una alimentación, el cristal y la conexión del usb. Pero para mi prefiro convertira en una placa de prototipado con conectores preparados para LCD y E/S Expansión.
El LED que sería de test el pinguino está montado sobre la Ao, pero sin soldar, sino mediante un zócalo de 4 pines, montado de manera que sirve simultaneamente para colocar un led, colocar un servo o colocar un potenciómetro... según lo que necesite en la prueba.
Por lo tanto, quien quiera puede usar el software de pinguino para esto mismo. El problema es que seguramente el entorno, como sea como el de arduino... dejará mucho que desear. A mi no me gusta el de Arduino, así que no me gustará el de Pinguino.
Para compilar yo prefiero el entorno de MPLAB aunque compilo con PCC.
Para Arduino prefiro usar el entorno de ATmel con la utilidad de scktech.
PROGRAMA
Un ejemplo puede ser este pequeño programa sirve de test, para conectar por primera vez el PIC al USB.
En este caso uso un LCD de 20x4 conectado al pic para mostrar el estado de la comunicación con el PC y un led conectado en A0, que cambiará de estado cada vez que reciba una R por el USB.
LED_USB.C
/* Copyright (C) 2015 José Ángel Moneo Fernández
COMPILADOR CCSTest USB PIC18F2550created 23 de febero de 2015by José Angel Moneo// This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>.*/
#include "Main.h"
#include "LCD420.C"
#include <usb_cdc.h>
#define LED PIN_A0
#define pin_on output_high
#define pin_off output_low
void usb_debug_task(void)
{
static int8 last_connected;
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
new_connected=usb_attached();
new_enumerated=usb_enumerated();
if (new_connected && !last_connected)
printf(lcd_putc,"\fUSB connectado\nesperando enumaration");
if (!new_connected && last_connected)
printf(lcd_putc,"\fUSB desconectado\nesperando conexion");
if (new_enumerated && !last_enumerated)
printf(lcd_putc,"\fUSB enumerado \ncomo PC/HOST");
if (!new_enumerated && last_enumerated)
printf(lcd_putc,"\fUSB sin-enumerar \ncomo PC/HOST \nesperando enumeracion");
last_connected=new_connected;
last_enumerated=new_enumerated;
}
void main(void)
{
BYTE i, j, address, value;
lcd_init();
set_tris_a(0x00);
delay_us(10);
pin_off(LED);
printf(lcd_putc,"\fUSB Ejemplo");
usb_init_cs();
do
{
usb_task();
usb_debug_task();
if (usb_enumerated())
{
if (usb_cdc_kbhit())
{
i = toupper(usb_cdc_getc());
if (i == 'R') output_toggle(LED);
}
}
} while (TRUE);
}
No hay comentarios :
Publicar un comentario