¿Puedo usar el pin ATtiny84 ADC0 como entrada y salida?

1

Estoy usando el pin ADC0 (PA0) de un Attiny84 para leer valores analógicos de un circuito de audio. Esta parte está funcionando bien. Ya que necesito conectar el Attiny84 a 8 LED, me gustaría usar el pin ADC0 como salida también.

Aquí está el esquema:

simular este circuito : esquema creado usando CircuitLab

Pero esto no funciona. Los LEDs no se encienden. (Se activan según los valores de ADC0 leídos).

¿Tiene esto algo que ver con habilitar los pull-ups?

¿O no es posible cambiar ADC0 entre entrada y salida?

Aquí está el código:

// set pin as input
DDRA &= ~(1 << PA0);

// unset DIDR0
DIDR0 &= (1 << ADC0D);

// enable ADC
ADCSRA |= (1 << ADEN);

// start conversion
ADCSRA |= (1 << ADSC);
// loop till done
while(ADCSRA & (1 << ADSC));

// use h/l regs
unsigned char adcl = ADCL;
unsigned char adch = ADCH;
int result = (adch << 8) | adcl; 

// set DIDR0
DIDR0 |= ~(1 << ADC0D);

// set pin as output
DDRA |= (1 << PA0);

// switch LED on
PORTA |= (1 << PA0);

// switch other LEDs on which have been set as output
//...
PORTA |= (1 << PA1); 

El código anterior se llama desde el controlador de interrupción por desbordamiento del temporizador de 8 bits. El temporizador se configura desde main () de la siguiente manera:

// set 8-bit timer
  cli();

  // set prescaler to 256
  TCCR0B |= (1 << CS02);
  // set overflow interrupt enable
  TIMSK0 |= (1 << TOIE0);

  sei(); 
    
pregunta M-V

1 respuesta

1

Hay una batalla entre el LM358 y el pin MCU, por lo que si el LM358 gana y quiere emitir un voltaje bastante bajo, entonces el LED no se encenderá, no importa cuánto lo intentes. Creo que una posible solución es poner una resistencia (tal vez 470 ohmios) en serie con la salida LM358. Esto permitirá que PA0 gane siempre, pero el problema surge cuando el puerto se utiliza como entrada analógica. ¿El LED y la resistencia afectarán la tensión analógica?

No estoy seguro del rango de voltaje que está utilizando para su entrada analógica, pero si es de 1 V máximo, debería estar bien. Tal vez está bien, incluso a 2 V, pero por encima de los 2 voltios, el LM358 intentará controlar el LED y perderá voltaje a través de los 470 ohmios. Recomendé que los pusiera en serie originalmente.

Si el Vmax para el ADC es menor que 2V, debería estar bien y también agregar una tapa de 10nF a tierra en la entrada para reducir los aumentos de impedancia de la resistencia de 470 ohm.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas