Hola,
no sé de donde sacais que el controlador debe ser solamente P por que la salida sea de rango [-16,16]. Os pongo un ejemplo, control de temperatura con un motor de continua que hace de ventilador. Si se usa un LM35 a entrada al controlador viene siendo la del ADC, luego la entrada variará de 0 a 1024 (10bits) que se pueden traducir de 0 a 5V. La salida, alimentando el motor a través de un L293D a 15V y enviando una señal de PWM, la salida del controlador debería ser de 0 a 4096 (por ejemplo, 0=0%duty cicle y 4096=100%duty cicle).
Por lo tanto, tenemos unas señales originales de entrada que varían de 0 a 1024 y unas de salida que varían de 0 a 4096.
Lo importante es que en la formula del PID estamos hablando de lo mismo y no juntemos la velocidad con el tocino, quiero decir, que hablemos en voltios, o en grados o en una sola unidad tanto para variables de entrada como para variables de salida, realizando la conversión correspondiente antes y después del control PID.
Por ultimo, en ASM no tengo ningún condigo PID, y si trabajas en CCS tengo un par de métodos implementados.
Saludos.