ATmega8 + L293D
прошиваю вот такую программу (WinAVR):
- Код: Выделить всё • Развернуть
#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 8000000UL // 16 MHz
void M_Front(void)
{
PORTD |= _BV(PD0); // установить "1"
PORTD |= _BV(PD1); // установить "1"
PORTD &=~_BV(PD2); // установить "0"
PORTD |= _BV(PD3); // установить "1"
PORTD &=~_BV(PD4); // установить "0"
}
void M_Stop(void)
{
PORTD &= ~_BV(PD0); // установить "0"
PORTD &= ~_BV(PD1); // установить "0"
PORTD &= ~_BV(PD2); // установить "0"
PORTD &= ~_BV(PD3); // установить "0"
PORTD &= ~_BV(PD4); // установить "0"
}
int main(void) // начало основой программы
{
short i;
DDRD = 0b00011111; // все выводы порта D сконфигурировать как выходы+
while (1) {
if (PIND & (1<<5)){
M_Front();
for (i = 1; i < 8; i = i + 1)
{
_delay_ms(250); // Ждем 0.25 сек.
}
M_Stop(); // установить "0" на всех линиях порта D
for (i = 1; i < 16; i = i + 1)
{
_delay_ms(250); // Ждем 0.25 сек.
}
}
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы
беда в том, что при не подключенном PD5 двигалели вращаются.
т.е. (PIND & (1<<5)) возвращает True, хотя 100% ножка МК висит в воздухе.