error de conversión corto a corto en c

1

Implementé el proyecto de control de velocidad del motor dc pero hay un problema que no puedo resolver. El problema es que mi salida pid que es flotante cuando se asigna a un tipo de datos corto da una respuesta inesperada. Desde la función incorporada de PWM en mikroc permite solo el ciclo de servicio de tipo corto, hay una necesidad de flotación para conversión corta. por favor ayuda Estoy usando pic16F877A.

    example 
    float to short conversion:
    float pid_out;
    short duty=(short)pid_out;
    outputs:
    if my pid_out<=100
    then duty=pid_out;
    and if my pid_out>100
    duty=65535

para valores pid_out menores o iguales a cien, da el mismo valor para el deber  mientras que para los valores pid_out mayores que 100, da un valor de servicio en el rango de 65500. Por favor ayuda no puedo entender cual es el error.  Para leer los valores utilicé terminal virtual y uart.

    
pregunta dcmotor

1 respuesta

0

Debe saber que lanzar float a int o short, puede dar como resultado comportamiento indefinido , si el float tiene un valor fuera del rango del entero. Por lo tanto, si eso es posible, debería pensar en cómo manejar los casos de excepción, si pid_out > 255, o pid_out < 0.

De lo contrario, la respuesta a su pregunta es utilizar un tipo de datos "corto sin firmar":

unsigned short duty=(unsigned short)pid_out;

Esto arroja pid_out en el rango 0..255, el mismo rango que el deber puede contener.

Consulte enlace para obtener una lista de los tipos de datos de C.

    
respondido por el HKOB

Lea otras preguntas en las etiquetas