¿Programando valores binarios [0000 a 1111] a los pines del puerto en C?

0

Estoy usando el microcontrolador PIC 89v51, y tengo que generar voltajes desde los pines del puerto de un puerto en particular [he usado R2R ladder ckt en hardware] pero la cosa es que necesito generarla desde el microcontrolador, es decir cuatro pines de puerto tomados dicen P2.0 = V1, P2.1 = V2, P2.2 = V3, P2.0 = V4;

Entonces si V1 = 0; V2 = 0; V3 = 0; V4 = 1 debe mostrar el voltaje, digamos 1v y de manera similar para todos los valores binarios desde 0010 a 1111, debe mostrar 2v a 15v, ayúdeme amablemente a resolver esto ...

MIENTRAS TANTO, dejaré en claro que he construido el circuito de escalera R2R, pero al revisar la salida no estoy usando este circuito ... Estoy probando solo desde el microcontrolador ...

    
pregunta angiey

3 respuestas

2

Dejaré esto como un pseudocódigo ya que no conozco el compilador que estás usando, pero un enfoque es el siguiente. Hace un AND a nivel de bit en cada bit del valor y lo cambia al bit menos significativo, algunos compiladores no requerirán eso, pero no hay daño, incluso si no están seguros.

void set_output_v(uint8_t v)
{
    P2.0 = v & 0x01;
    P2.1 = (v & 0x02) >> 1;
    P2.2 = (v & 0x04) >> 2;
    P2.3 = (v & 0x08) >> 3;
}

En muchos compiladores, también habrá una manera de configurar un puerto completo a la vez. Pruebe primero el código anterior, pero también puede hacer algo como lo siguiente para mantener el nybble alto de P2 y cambiar el valor v al nybble inferior.

P2 = (P2 & 0xF0) | v;
    
respondido por el PeterJ
0

Nunca obtendrás 15V usando solo un microcontrolador y una escalera R2R. La tensión más alta que puede obtener es la tensión de nivel lógico de uC. Normalmente, ya sea 5V o 3.3V

    
respondido por el jwygralak67
0

Como ya se sugirió, podría leer todo el valor del puerto a la variable

short PIN1 = 0, PIN2 = 1, PIN3 = 4, PIN4 = 7;
short value = (P2 & (1<<PIN1))>>PIN1;
value += (P2 & (1<<PIN2))>>(PIN2-1);
value += (P2 & (1<<PIN3))>>(PIN3-2);
value += (P2 & (1<<PIN4))>>(PIN4-3);

Eso le dará el valor de 0-15 para cualquier variante de pines de entrada. No solo p2.0, p2.1, p2.2, p2.3.

EDIT: permite decir que P2 es un puerto de entrada con 8 bits de entrada. Ha conectado entradas en pin0, pin1, pin4 y pin7. (situación común cuando se trabaja con uC, ya que la mayoría de los pines tienen múltiples funciones y algunas veces terminas con pines libres que no son 0,1,2,3 sino más bien dispersos ...) PIN1-4 representa los bits de posición en la entrada Puerto. Así es como podría leer esos 4 bits y colocarlos en una salida de valor de 4 bits.

    
respondido por el Gossamer

Lea otras preguntas en las etiquetas