Autor Tema: Ayuda con comunicación USB usando RTOS de CCS PIC24FJ256GB110  (Leído 3256 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Asw9

  • PIC10
  • *
  • Mensajes: 1
Ayuda con comunicación USB usando RTOS de CCS PIC24FJ256GB110
« en: 02 de Febrero de 2011, 00:47:41 »
Saludos cordiales:

Buen dia tengan todos, esta es la primera vez que solicito apoyo en un foro, y tambien tengo poco tiempo utilizando el RTOS que proporciona el compilador CCS, ya he leido algo sobre este tema de RTOS tanto en internet como en estos mismos foros pero es casi nula la información que viene sobre el uso del USB con RTOS y mucho menos para un PIC24F, sé de antemano de la gran experiencia que tienen con los PICs y de la buena disposición que tienen para apoyarse unos a otros. Agradezco su atención.

a continuación les adjunto la estructura BASICA de un proyecto, lo unico que hace este codigo que adjunto es el encendido y apagado de unos LEDs, lo que se busca realmente es entablar la comunicacion USB con la PC utilizando los RTOS, el problemita radica en que a la hora de habilitar el RTOS (rtos_run()) todo el protocolo de comunicación USB deja de funcionar, de hecho el proyecto ya está casi terminado y puedo comunicarme perfectamente por USB a la PC mientras no utilice el RTOS, pero tengo necesidad de utilizar el multitask y es aqui cuando surgen los problemitas, a la hora de compilar no sale ningun error, pero ya cuando conecto el PIC a la PC simplemente sale la leyenda de que se detectó un dispositivo desconocido, espero que puedan ayudarme con este problemita, la version del compilador que estoy utilizando es la 4.107, sin más preámbulo aqui les dejo el código:


 
Código: CSS
  1. #define USB_CON_SENSE_PIN PIN_A7
  2.  
  3. #include <24FJ256GB110.h>
  4.  
  5. #FUSES NOWDT                    //No Watch Dog Timer
  6. #FUSES NOJTAG                   //JTAG disabled
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NOWRT                    //Program memory not write protected
  9. #FUSES NODEBUG                  //No Debug mode for ICD
  10. #FUSES ICSP1                    //ICD uses PGC1/PGD1 pins
  11. #FUSES WINDIS                   //Watch Dog Timer in non-Window mode
  12. #FUSES WPOSTS16                 //Watch Dog Timer PostScalar 1:32768
  13. #FUSES IESO                     //Internal External Switch Over mode enabled
  14. #FUSES PR_PLL                   //Primary Oscillator with PLL
  15. #FUSES NOCKSFSM                 //Clock Switching is disabled, fail Safe clock monitor is disabled
  16. #FUSES OSCIO                    //OSC2 is general purpose output
  17. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  18. #FUSES NOIOL1WAY                //Allows multiple reconfigurations of peripheral pins
  19. #FUSES WPEND_HIGH            
  20. #FUSES WPCFG                
  21. #FUSES WPDIS                
  22. #FUSES PLL6                     //Divide By 6(24MHz oscillator input)
  23. #FUSES DISUVREG              
  24. #FUSES NOWPFP                
  25.  
  26. #use delay(clock=32000000)
  27.  
  28. #include <usb_desc_iapser2.h>
  29. #include <pic24_usb.h>
  30. #include <usb.c>
  31.  
  32. #include <ctype.h>
  33. #include <float.h>
  34. #include <stdio.h>
  35. #include <stdlib.h>
  36. #include <string.h>
  37.  
  38. #BIT CPDIV0=0x0744.6
  39. #BIT CPDIV1=0x0744.7
  40.  
  41. #USE RTOS(timer=1, minor_cycle=1000ms)
  42.  
  43. #task (rate=1000ms, max=1000ms) //Creamos tarea para el arranque
  44. void arranque();
  45.  
  46. #task (rate=1000ms, max=1000ms) //Creamos tarea principal USB1
  47. void Main_USB_1();
  48.  
  49. #task (rate=1000ms, max=1000ms) //Creamos tarea principal USB2
  50. void Main_USB_2();
  51.  
  52. unsigned int8 instru[4];
  53.  
  54. void main()
  55. {
  56.  
  57. instru[0]=0xFF;
  58. instru[1]=0xFF;
  59.  
  60.  
  61.    // TODO: USER CODE!!
  62.  
  63. usb_init_cs();
  64.  
  65.  
  66. CPDIV0=0;  //Habilita el procesador a 32MHz
  67. CPDIV1=0;  //Habilita el procesador a 32MHz
  68.  
  69. setup_wdt(WDT_OFF);
  70. //setup_timer1(TMR_DISABLED);
  71. //setup_timer1(TMR_INTERNAL|TMR_DIV_BY_1);
  72. //setup_timer1(TMR_EXTERNAL|TMR_DIV_BY_1);
  73. //setup_timer1(TMR_EXTERNAL|T1_EXTERNAL_SYNC|TMR_DIV_BY_1);
  74.  
  75.  
  76. while(1)
  77.    {
  78.    usb_task();
  79.    if (usb_attached())
  80.       {
  81.      
  82.       //PARTE CON USB*************************************************
  83.      
  84.       //delay_ms(5000);
  85.       rtos_run();
  86.      
  87.       //FIN DE PARTE CON USB************************************************
  88.      
  89.       }
  90.    else
  91.       {
  92.      
  93.       // codigo de aplicaciones sin USB
  94.            
  95.       }
  96.    
  97.     } // end while
  98.  
  99. } // end main
  100.  
  101. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  102.  
  103. void arranque()
  104. {
  105. rtos_disable(Main_USB_2);
  106. rtos_disable(Main_USB_1);
  107. usb_task();
  108. rtos_enable(Main_USB_1);
  109. rtos_disable(arranque);
  110. }
  111.  
  112.  
  113. void Main_USB_1()
  114. {
  115.  
  116.    usb_task();
  117.    if (usb_attached())
  118.       {
  119.      
  120.       //PARTE CON USB*************************************************
  121.            
  122.       if(usb_kbhit(1))
  123.          {
  124.          usb_get_packet(1, instru, 4);
  125.          }
  126.                
  127.       if(instru[0]==0x00 && instru[1]==0x02)
  128.          {
  129.          output_bit(PIN_F0,1);// LEDs
  130.          output_bit(PIN_F1,0);// LEDs
  131.          delay_ms(800);                                
  132.          rtos_enable(Main_USB_2);
  133.          rtos_disable(Main_USB_1);
  134.  
  135.          }  
  136.            
  137.       if(instru[0]==0x00 && instru[1]==0x03)
  138.          {
  139.          output_bit(PIN_F0,0);// LEDs
  140.          output_bit(PIN_F1,1);// LEDs
  141.          delay_ms(800);
  142.          rtos_enable(Main_USB_2);
  143.          rtos_disable(Main_USB_1);
  144.  
  145.          }  
  146.                        
  147.       if (instru[0]==0xFF && instru[1]==0xFF)
  148.          {
  149.          // do nothing
  150.          delay_ms(800);
  151.          rtos_enable(Main_USB_2);
  152.          rtos_disable(Main_USB_1);
  153.          }
  154.      
  155.       //FIN DE PARTE CON USB************************************************
  156.      
  157.       }
  158.    else
  159.       {
  160.      
  161.       //PARTE SIN USB*****************************************************
  162.      
  163.       rtos_terminate();
  164.      
  165.       //FIN PARTE SIN USB**************************************************  
  166.      
  167.       }
  168.        
  169. }
  170.  
  171.  
  172.  
  173. void Main_USB_2()
  174. {
  175.  
  176.  
  177.    usb_task();
  178.    if (usb_attached())
  179.       {
  180.      
  181.       //PARTE CON USB*************************************************
  182.            
  183.       if(usb_kbhit(1))
  184.          {
  185.          usb_get_packet(1, instru, 4);
  186.          }
  187.              
  188.       if(instru[0]==0x00 && instru[1]==0x02)
  189.          {
  190.          
  191.          output_bit(PIN_F0,1); // LEDs
  192.          output_bit(PIN_F1,0); // LEDs
  193.          delay_ms(200);
  194.          output_bit(PIN_F0,0); // LEDs
  195.          output_bit(PIN_F1,0); // LEDs
  196.          delay_ms(200);
  197.          output_bit(PIN_F0,1); // LEDs
  198.          output_bit(PIN_F1,0); // LEDs
  199.          delay_ms(200);            
  200.          output_bit(PIN_F0,0); // LEDs
  201.          output_bit(PIN_F1,0); // LEDs
  202.          delay_ms(200);
  203.  
  204.          rtos_enable(Main_USB_1);
  205.          rtos_disable(Main_USB_2);        
  206.    
  207.          }  
  208.            
  209.       if(instru[0]==0x00 && instru[1]==0x03)
  210.          {
  211.          output_bit(PIN_F0,0); // LEDs
  212.          output_bit(PIN_F1,1); // LEDs
  213.          delay_ms(200);
  214.          output_bit(PIN_F0,0); // LEDs
  215.          output_bit(PIN_F1,0); // LEDs
  216.          delay_ms(200);
  217.          output_bit(PIN_F0,0); // LEDs
  218.          output_bit(PIN_F1,1); // LEDs
  219.          delay_ms(200);
  220.          output_bit(PIN_F0,0); // LEDs
  221.          output_bit(PIN_F1,0); // LEDs
  222.          delay_ms(200);
  223.  
  224.          rtos_enable(Main_USB_1);
  225.          rtos_disable(Main_USB_2);      
  226.            
  227.          }  
  228.                      
  229.       if (instru[0]==0xFF && instru[1]==0xFF)
  230.          {
  231.          // do nothing        
  232.          delay_ms(800);
  233.          rtos_enable(Main_USB_1);
  234.          rtos_disable(Main_USB_2);
  235.          }
  236.      
  237.       //FIN DE PARTE CON USB************************************************
  238.      
  239.       }
  240.    else
  241.       {
  242.      
  243.       //PARTE SIN USB*****************************************************
  244.      
  245.       rtos_terminate();
  246.      
  247.       //FIN PARTE SIN USB**************************************************  
  248.      
  249.       }
  250.        
  251. }

de antemano ya les agradezco su atención y espero que puedan ayudarme con mi problema :)
« Última modificación: 03 de Febrero de 2011, 16:00:24 por Asw9 »