desktop

Directivas de Arduino a ccs

amigos disculpen la molestia es que estoy desesperado necesito pasar este codigo arduino a ccs y no se como, si me podrían ayudar se los agradecería infinitamente e aquí el código se los ruego por favor que me ayuden apenas estoy empezando a programar en ccs soy muy novato y seria de gran ayuda su colaboración

ESTE ES EL CODIGO EN ARDUINO, TRATE DE PASARLO A CCS (DESUES DE ESTE CODIGO ESTA EL INTENTO SI PORFA ME AYUDARAN A CORREGIRLO)

Código:
int value=0;
int dato=0;
unsigned char  lectura=0;
int numero=0;
int salida=0;
int pwmled=12;
void setup()
{


     Serial.begin(9600);
     
     pinMode(pwmled, OUTPUT);  //  confiigurar pin como salida 17

}

void loop()
{
      //
 if(Serial.available())   //  buscar funcion que indica cuando un dato serial ha llegao al puerto
{
value =0;
while ( Serial.available())  
{
lectura = Serial.read();
value = (value * 10) + (lectura - \'0\'); // yes, accumulate the value
dato = value;
}
}
  
 salida=map(dato, 0, 255, 210, 240);        //  no es necesaria
 analogWrite(pwmled,salida);  
   
   delay(200);
     }

INTENTO DE CCS
Código:
#include <18F4550.h>
#FUSES XT,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)

#include<stdlib.h>


int value=0;
int dato=0;
unsigned char  lectura=0;
int numero=0;
int salida=0;
int pwmled=12;


void main()
{

output_bit( PIN_C2, 0);  // salida PWM

  
  
  while(true)
  {
 if(kbhit())   //  buscar funcion que indica cuando un dato serial ha llegao al puerto
{
value =0;
while (kbhit())  
{
lectura = getc();
value = (value * 10) + (lectura - \'0\'); // yes, accumulate the value
dato = value;
}
}
 
set_pwm1_duty(dato);
delay_ms(200);
}

  }
...
 
No explicas lo que hace ese programa, pero me parece que una señal PWM actúa sobre un LED conforme el valor ingresado por RS-232.

Usando las instrucciones de arduino, (Map) y (AnalogWrite) así podría ser una forma:
PHP:
#include <18f4550.h>
#fuses   NOFCMEN
#use     delay(crystal = 20 MHz, Clock = 20 MHz)

#use     RS232(UART1)   // Por defecto: 9600,N,8,1

int1 flag_rx = 0;
int8 lectura;

#INT_RDA
void sdi_recepcion_rs232 (void)
{
   lectura = getc();
   flag_rx = 1;
}

long map (long x, long in_min, long in_max, long out_min, long out_max)
{
   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

void main (void)
{
   int16 value = 0;
   int16 dato = 0;
   int8 salida = 0;
   
   // PWM 1200 Hz. @ 20 MHz.
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16,255,1);
   set_pwm1_duty(0);
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   /**************************************************************************/
   
   while (true)
   {
      if(flag_rx)
      {
         value = (value * 10) + (lectura);   // yes, accumulate the value
         dato = value;
         flag_rx = 0;
      }
      
      salida = map(dato, 0, 255, 210, 240);        //  no es necesaria
      set_pwm1_duty(salida);
      delay_ms(200);
   }
}
Y simplificando el programa y conforme a la configuración del módulo CCP del PIC, sería así:
PHP:
#include <18f4550.h>
#fuses   NOFCMEN
#use     delay(crystal = 20 MHz, Clock = 20 MHz)

#use     RS232(UART1)   // Por defecto: 9600,N,8,1

int1 flag_rx = 0;
int8 lectura;

#INT_RDA
void sdi_recepcion_rs232 (void)
{
   lectura = getc();
   flag_rx = 1;
}

void main (void)
{
   // PWM 1200 Hz. @ 20 MHz.
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16,255,1);
   set_pwm1_duty(0);
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   
   while (true)
   {
      if(flag_rx)
      {
         set_pwm1_duty(lectura);
         flag_rx = 0;
      }
   }
}
De esta forma se cubre perfectamente el rango de 0 a 100 % del ciclo activo.
Ya que por por RS-232 se ingresarán valores de 0 a 255.

Cabe aclarar que yo no uso arduino, así que debes probar que programa funciona mejor, aparte de comprobar si eso es realmente lo que debe hacer el programa.
 
Atrás
Arriba