2015-12-22 10 views
0

Я хочу, чтобы управлять двигателем BLDC, я использую ATmega32 как центральный процессор контроллера, у меня есть проблемы в чтении Датчика Холла от БКЭПТАBasic I/O в микроконтроллерах AVR с использованием WinAVR

это мой код:

DDRB=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5); 
DDRD=(0<<0)|(0<<1)|(0<<2)|(0<<3); 
PORTD=(1<<0)|(1<<1)|(1<<2)|(1<<3); 

PORTB, как OUTPUT и PORTD в качестве входных данных это основная программа:

 if (~(PORTD &(1<<0)) && PORTD &(1<<1) && ~(PORTD &(1<<2))) /// 0 1 0 
     { 
      PORTB=(1<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4)|(0<<5); 
     } 
     else if (~(PORTD &(1<<0)) && PORTD &(1<<1) && PORTD &(1<<2)) /// 0 1 1 
     { 
      PORTB=(0<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4)|(1<<5); 
     } 
     ........... 

мой ответ эта программа не может прочитать логический ноль (0) от датчика Холла так BL DC не может нормально работать, как читать несколько входных данных в AVR ATMEGA32? я использую кодоблок и WinAVR ....

Большое спасибо

ответ

0

Я не очень понимаю, что вы хотите сделать, но если вы хотите прочитать из порта D в ATmega 32, вы делаете не иметь дело с регистром «PORTD», есть еще один регистр под названием «PIND», это тот, с которого вы читаете цифровые сигналы. Также есть ничего, как "> DDRD = (0 < < 0) | (0 < < 1) | (0 < < 2) | (0 < < 3);" Если вы хотите очистить бит (установите бит в логический нуль), вы просто используете побитовое не со сдвинутым (например, DDRD = ~(1<<bitnumber)

 Смежные вопросы

  • Нет связанных вопросов^_^