Muy bueno el robot de taringa !
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <18F4550.h> // Usamos el PIC 18F4550
#device adc=16
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN // Cristal a 20MHz.
#use delay(clock=48000000) // El PLL interno siempre ha de ser de 48MHz. (No es el cristal)
#include "usb_cdc.h" // Librería para la clase CDC
//#use fast_io(c)
#Byte PortA = 0xF80 // Dirección del puerto A para la familia 18Fxx5x.
#Byte PortB = 0xF81 // Dirección del puerto B para la familia 18Fxx5x.
#Byte PortC = 0xF82 // Dirección del puerto C para la familia 18Fxx5x.
#Byte PortD = 0xF83 // Dirección del puerto D para la familia 18Fxx5x (Sólo 40/44 pines).
#Byte PortE = 0xF84 // Dirección del puerto E para la familia 18Fxx5x.
//#define resolucion (2.5/1024.0)
// ------ Variable Global ------
// Int16 x = 0; // Declaramos el valor de X como Word (16 bits). Esta variable
float temp=0,temp2=0,tension1=0,corriente1=0, tension2=0,tension3=0,corriente2=0,corriente3=0;
float a=0,b=0,c=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,w=0,h=0,count=0,counter=0;
//float r1=0,r2=0,r3=0,r4=0,r5=0,r6=0,r7=0,r8=0,r9=0,r10=0,rt=0;
//float r11=0,r12=0,r13=0,r14=0,r15=0,r16=0,r17=0,r18=0,r19=0,r20=0;
//float r21=0,r22=0,r23=0,r24=0,r25=0,r26=0,r27=0,r28=0,r29=0,r30=0;
// ------- Interrupción --------
//
#int_TIMER1
void TIMER1_fsr(void)
{
counter=get_timer0(); //lectura contador TMR0
count=(counter*2*120); //
set_timer0(0); //reinicia cuenta
//count=(counter*2*120)/24;
set_timer1(3036); //recarga a 0.5 s 3036
count=counter;
}
void main()
{
setup_adc_ports(AN0_TO_AN8|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_wdt(WDT_OFF);
Setup_spi(SPI_SS_DISABLED);
setup_timer_0(rtcc_ext_l_to_h|RTCC_DIV_2);
setup_timer_1(T1_internal|T1_DIV_BY_8); //configuración TMR1
set_timer0(0); //reinicia cuenta
set_timer1(3036);
disable_interrupts(int_timer1);
disable_interrupts(global);
Setup_timer_2(T2_DISABLED,0,1);
Setup_comparator(NC_NC_NC_NC);
Setup_vref(FALSE);
// Set_Tris_A(0b11111111); // Puerto A todo entradas (en este caso no usamos el Puerto A).
// Set_Tris_B(0b11111111); // Puerto B todo entradas (sólo usamos las entradas RB0 y RB1).
// Set_Tris_C(0b11111111); // Puerto C todo entradas (en este caso no usamos el Puerto C).
// Set_Tris_D(0b11111111); // Puerto D todo entradas (en este caso no usamos el Puerto D).
// Set_Tris_E(0b11111111); // Puerto E todo entradas (en este caso no usamos el Puerto E).
//......................... INICIO USB...............................................................
usb_cdc_init(); // Iniciar el modo CDC (Puerto virtual de comunicaciones).
usb_init(); // Iniciar el manejo del USB.
usb_task();
usb_wait_for_enumeration();
if (usb_enumerated())
do{
{
if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
if(usb_cdc_getc()=='t') //¿lo que llegó fué el caracter t?
{
//........................Medicion de las 3 tensiones...............
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(0);
delay_us(30);
tension1=READ_ADC();
a= 513*tension1/65535;
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(1);
delay_us(30);
tension2=READ_ADC();
b= 508*tension2/65535;
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(2);
delay_us(30);
tension3=READ_ADC();
c= 530*tension3/65535;
// ..............................Medicion de las 3 Corrientes.............
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(3);
delay_us(30);
corriente1=READ_ADC();
d= abs((corriente1*0.0022889)-75);
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(4);
delay_us(30);
corriente2=READ_ADC();
e= abs((corriente2*0.0022889)-75);
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(5);
delay_us(30);
corriente3=READ_ADC();
f= abs((corriente3*0.0022889)-75);
// .................................... promedio corrientes..............
i=(((d/10)+(e/10)+(f/10))/3);
w=(i*10);
// ......................................R.P.M.............................
//.................................Medicion de las temperaturas...........
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(7);
delay_us(20);
temp=READ_ADC();
g= ((temp*230)*1.22)/38553; //((b*270)*1.2)/150; temp cancamo
//delay_ms(1);
delay_us(100);
READ_ADC(ADC_START_ONLY );
delay_us(10);
set_adc_channel(8);// ver que adc utilizo!!!
delay_us(20);
temp2=READ_ADC();
j= ((temp2*238)*1.22)/38553; // temp ambiente
//delay_ms(1);
delay_us(100);
// .............................. diferencia de temperatura..................
k=((g-j));
//.............. FIN TOMA DE DATOS..........................................
// ...............................envio de cadena de datos por usb............................................
printf(usb_cdc_putc, "L1= %01.0fV!L2= %01.0fV!L3= %01.0fV!C1= %01.1fA!C2= %01.1fA!C3= %01.1fA! %01.0fC! %01.0f! %01.1fA!%01.0fC!%01.1fC!",a,b,c,d,e,f,g,count,w,j,k );
}
// delay_us(150);
//............................SALIDA AUXILIAR..........................
if(usb_cdc_getc()=='x') //¿lo que llegó fué el caracter x?
{
output_high(PIN_B7);
delay_ms(300);
output_low(PIN_B7);
}
}
}
}while (1); // bucle infinito
}
Hola, he leído muchas partes de este hilo porque quisiera comunicar al 18f2550 o el 4550 por USB. Ya he realizado y armado algunos pequeños proyectos con el 16F84A con la ayuda del libro del forista Meta y me han funcionado muy bien. Ahora, para intentar utilizar este otro PIC me bajé la versión de prueba del CSS y quise seguir el manual que amablemente nos compartes, Moyano Jonathan, pero no encuentro las librerías usb.h, usb_desc_scope.h, usb_cdc.h, usb_desc_cdc.h, usb_desc_hid.h y usb.c, que según tengo entendido son necesarias para manejar ese puerto. La pregunta es si sólo en la versión de pago se pueden obtener esos archivos. Gracias por la respuesta.
Muchas gracias, wansi voy a ver la información que me dices.
De hecho se me hace muy raro que en varios sitios de Internet dicen que han hecho esto o lo otro, pero la verdad no se ve claro a la hora de tratar de hacerlos y puede deberse a que no se mencionan todos los recursos que se necesitan. Digo, si es que se supone que la idea es que aprenda quien tiene curiosidad pero no tiene a la mano un maestro que le enseñe. Yo no tengo mucha experiencia con pics, aunque he hecho algunos proyectos y los tengo funcionando, y estoy seguro de que sé seguir los pasos cuando quiero realizar un proyecto (para después hacer otros yo y es una satisfacción lograrlo) y eso es lo que estoy buscando en el tema del pic USB. Voy a revisar los temas que me dices y te agradezco nuevamente. Si logro encontrar lo que busco, pienso comentarles cómo me va en eso. Saludos.
private void TALADRAR_Click(object sender, EventArgs e)
{
byte[] BufferOUT = new byte[EasyHID.BUFFER_OUT_SIZE];
BufferOUT[0] = 0; // Report ID
BufferOUT[1] = 0x0C; //
EasyHID.Write(controlador, BufferOUT); // Envía los datos.
}
while (TRUE) // Bucle infinito.
{
if(usb_enumerated()) // Si el dispositivo está configurado...
{
if(recibe[3]==valorPWM2)
{
for(loop_tala;loop_tala<5;++loop_tala)
{
LED_ON(PWM2);
delay_ms(50);
LED_OFF(PWM2);
delay_ms(50);
}
recibe[3]=0x00;
}
if (usb_kbhit(1)) // Si hay un paquete de datos del host...
{
usb_get_packet(1, recibe, USB_CONFIG_HID_RX_SIZE);
if(recibe[0]==PWM_CONTROL2) // Si recibimos el comando de control PWM2..
{valorPWM2=recibe[3];} // Tomamos el dato y lo procesamos.
}
}
}
Gracias.... Que bueno que te interese, no hace mucho termine un proyecto tambien de control de procesos por USB en labview ( un SCADA casero , )... en el primer link que te mencione, tambien publicaron varios links de apoyo, si puedes leerlo para entenderle mejor al proceso de transferencia de datos por USB..
Este es otro link, las bases para control por USB pero en VIsual Basic:
http://www.neoteo.com/conecta-tus-proyectos-al-puerto-usb
Y otro ejemplo muy bueno: http://www.unrobotica.com/usbcon.htm
NOTA:
El proyecto se habre desde el archivo App Pass v1.0.csproj
Ya entrariamos a programar para el micro y las cuetiones del usb en la Form2 (En este caso se vera a mi bella, hermosa y difunta gata ) que se abre despues de introducir la contraseña correcta...
Hola a todos...
Les traigo alogo que les puede interesar...
Se trata de una aplicación para ponerle contraseña y darle sierto toque de seguridad a nuestras aplicaciones...
Lo saque de un "Videotutorial" de YouTube de un usuario que hace llamar TheDarkJoker094 y su aplicacion se llama UltimatePasswordProtection la mia la nombre App Pass v1.0...
Son 5 videos y esta hecho en VS2010 [C#], yo lo hice en VS2008 [C#] e igual funciona y se podria aplicar en caso tal que nuestro micro este controlando un actuador que Cierre\Abra la puerta del cajon donde tenemos guardos nuestros DVD's XXX para que solo nosotros tengamos acceso a ellos o algo asi...
Caratersticas de esta aplisacion:
1) Si se ejecuta por 1° ves, se pide que ingrese una Nueva Contraseña...
2) Se puede cambiar la contraseña cuando quiera pero pide la actual para poder hacerlo...
3) La contraseña queda ENCRIPTADA!!! en nuetro registro de Windows...
4) Depues de n intentos erroneos la aplicacion quedara bloqueada por x minutos...
No siendo mas les dejo un 1° .rar con mi aplicacion Sola y otro 2° .rar con el proyecto completo en VS2008 [C#] para que lo puedan ver y un .txt dentro de este 2° .rar con los link de los videos...
Espero que les sea de utilidad...
Mas sempre que tento da um erro " subscript out of the range" sou novo nesta programação e gostaria de trocar algumas portas. mesmo sem fazer qualquer alteracao dá este erro alguem pode me ajudar?
Thanks
Zeca
Brazil