¿Cómo podemos alterar un solo pin de ATxMEGA128?

esta podría ser una pregunta básica, pero intenté buscar la respuesta antes de publicar la pregunta.

Entonces, estoy tratando de configurar uno de los puertos para que salga. solía

PORTC.DIRSET = 0xFF; //Set Port C to output

Ahora, he conectado el pin de habilitación de mi sensor para decir Pin 1. ¿Cómo lo enciendo? ¿Cómo accedo a un pin particular del puerto C para convertirlo en alto?

Además, ¿cómo puedo hacer que baje?

(Estoy usando una resistencia sensible a la fuerza y ​​quiero que el sensor comience a funcionar solo cuando se recibe una entrada del circuito de la resistencia sensible a la fuerza)

El término que está buscando es un poco de enmascaramiento.
¡Supongo que lo descubro yo mismo! PUERTO SALIDA = (1<<1)

Respuestas (2)

El ATxmega tiene registros de funciones especiales para hacer que configurar y borrar pines sea muy fácil:

#define PIN_NUM             4            // mask for the specific pin (in this case 
#define PIN_MASK        (1 << PIN_NUM)   // pin 4) in the PORT


if(FSR_output1)                              //If output from FSR circuit
{
    PORTC.OUTSET = PIN_MASK;               //SET sensor enable high
}
else
{
    PORTC.OUTCLR = PIN_MASK;              //SET sensor enable low
}

Estos registros hacen que no tenga que lidiar con ciclos de lectura, modificación y escritura para las líneas de E/S. El estado del puerto de E/S es automáticamente OR con lo que se escribe en , y se invierte OUTSETuna escritura en AND con el valor invertido. OUTCLRComo tal, puede realizar operaciones de instrucción única para controlar el estado del pin. Es una herramienta muy buena y una de las cosas buenas de las partes de xmega.

ingrese la descripción de la imagen aquí

Tenga en cuenta que también están los complementarios PORTx.DIRSETy PORTx.DIRCLRlos resistores, así como PORTx.OUTTGL/ PORTx.DIRTGL, que alterna los pines que corresponden a cada 1 binario escrito en el registro.

+1 Me encanta esta característica. Compensa la incapacidad de gcc para usar instrucciones de manipulación de bits
Estos también tienen la ventaja adicional de ser operaciones atómicas. Sin lectura, modificación, escritura, por lo que no se preocupe de que un controlador de interrupción cambie un bit diferente en medio de la operación de enmascaramiento.

¡Lo descubrí yo mismo!

PORTC.DIRSET = 0xFF;                           //SET PORT C to output
uint8_t sample2 = PORTC.IN;                   //Naming the port
uint8_t sensor_enable = (sample2 >> 6) & 1;  //Naming an individual Pin

if(FSR_output1)                              //If output from FSR circuit
{
    sensor_enable = 1;               //SET sensor enable high
}
else
{
    sensor_enable = 0;              //SET sensor enable low
}