No se puede leer un pin de entrada activado por resistencia de extracción en avr

-1

Estoy intentando leer el pin PB0 que está conectado a la resistencia interna de pull-up. En mi código lógico,

  • si PB0 es ALTO, ejecute if-block
  • si PB0 está BAJO, ejecute else-block

Pero cuando conecto PB0 al pin GND, todavía se está ejecutando if-block .

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
  //For testing 
  DDRD = 0b11111111; 
  PORTD = 0b00000000;

  /*
  OLD CODE 
  DDRB  |= (0<<PB0|1<<PB1);// PB0 -input, PB1 -output   
  PORTB |= (1<<PB0|0<<PB1);//activated pullup in PB0
  */

  //CORRECTED CODE
  DDRB  |=  (1 << PB1); // PB1 -output
  DDRB  &= ~(1 << PB0); // PB0 -input
  PORTB |=  (1 << PB0); // Activated pullup in PB0
  PORTB &= ~(1 << PB1); // PB1 low

  while(1)
  {
    _delay_ms(100);
    if( PINB & (1<<PB0))     
    {
       PORTD = 0x00;
    }
    else
    { 
       PORTD = 0xFF;
    }      

    _delay_ms(500);
  }
}

EDITAR: Hubo un error en mi operación bitwise. Corregido y mencionado como NEWCODE. Guardó el código antiguo como CÓDIGO ANTIGUO para referencia. Pero, el código todavía no funciona como debería cuando conecto PB0 a GND.

    
pregunta PraveenMax

1 respuesta

2

¿Seguro que dejas el cero a la izquierda y ORing funciona para borrar un poco? Por lo que puedo ver en su programa, es que su pin nunca se convierte en un pin de entrada porque lo está haciendo con cero.

Cómo configurar, borrar y verificar bits

Leer entrada en AVR

Esta respuesta podría decirle cómo despejar un poco y establecer el pin como una entrada y puede ser que pueda ejecutar su código.

Lo siento. Me tomó un poco de tiempo, pero ejecuté su código en mi sistema y recibo esta advertencia Warning 1 #warning "F_CPU not defined for <util/delay.h>" [-Wcpp] c:\program files (x86)\atmel\atmel toolchain\avr8 gcc\native.4.1061\avr8-gnu-toolchain\avr\include\util\delay.h 90 3 Test Pero eso realmente no molesta la ejecución del código. Funcionó perfecto y normal.

E incluso lo intenté en la simulación.

Creo que o tu hardware no está funcionando o que tu chip se está reiniciando. ¿Podría proporcionar un esquema?

    
respondido por el MaNyYaCk

Lea otras preguntas en las etiquetas