Перейти к содержанию

Программирование Мк Atmega8


jingo

Рекомендуемые сообщения

У меня такая проблема, написал код на Си в WinAVR , скомпилировал, никаких синтаксических ошибок, прошил МК но вложенные в программу действия он не выполняет (при включении питания моторы крутятся вперёд, хотя как видно из кода должны крутится назад, при поднесении к свету любым фототранзистором правый мотор останавливается, светодиоды пока не подключал проверял просто на свет). Если кто-нибудь хорошо разбирается в программировании МК гляньте мож я где ошибку допустил, или подскажите мож есть какой-нибудь эмулятор ???

(схему брал вот отсюда ---> http://myrobot.ru/stepbystep/r_firstbot2.php , только в моей будет 4 пары Фототранзистор-светодиод, хочу чтоб машинка перемещалась по черно-белой поверхности).

// 1) РС1 - выход подключенный к левому мотору (назад)

// 2) РС4 - выход подключенный к правому мотору (назад)

// 3) РС2 - выход подклчюченный к левому мотору (вперёд)

// 4) РС3 - выход подключенный к правому мотору (вперёд)

#include <avr/io.h>

#include <avr/delay.h>

#include <stdio.h>

#include <stdlib.h>

void main()

{

char a,b,c,d;

DDRC = 0xff; // Все выводы порта С сконфигурировать как выходы

DDRD = 0x00; // Все выводы порта D сконфигурировать как входы

PORTD = 0xff; // установить "1" на всех выводах порта D

// включаем подтягивающие резисторы

while (1) // Бесконечный цикл проверки состояния датчиков

{

if (PIND & (1<<7)) {a='1';} else {a='0';} // значение РD7

if (PIND & (1<<2)) {b='1';} else {b='0';} // значение PD2

if (PIND & (1<<1)) {c='1';} else {c='0';} // значение PD1

if (PIND & (1<<0)) {d='1';} else {d='0';} // значение PD0

if ((a=='0') && (b=='0') && (c=='0') &&(d=='0'))

{

// -------- оба мотора вращаются назад ---------

PORTC |= _BV(PC1); // Устанавливаем значение 1 на РС1

PORTC &= ~_BV(PC2); // Устанавливаем значение 0 на РС2

PORTC &= ~_BV(PC3); // Устанавливаем значение 0 на РС3

PORTC |= _BV(PC4); // Устанавливаем значение 1 на РС4

}

if (((a=='0') && (b=='0') && (c=='1') && (d=='0')) ||

((a=='0') && (b=='0') && (c=='1') && (d=='1')) ||

((a=='1') && (b=='0') && (c=='1') && (d=='1')))

{

// -------- Вращается только правый мотор -------

PORTC &= ~_BV(PC1); // Устанавливаем значение 0 на РС1

PORTC |= _BV(PC2); // Устанавливаем значение 1 на РС2

PORTC &= ~_BV(PC3); // Устанавливаем значение 0 на РС3

PORTC &= ~_BV(PC4); // Устанавливаем значение 0 на РС4

}

if (((a=='0') && (b=='1') && (c=='0') && (d=='0')) ||

((a=='1') && (b=='1') && (c=='0') && (d=='0')) ||

((a=='1') && (b=='1') && (c=='0') && (d=='1')))

{

// -------- Вращается только левый мотор --------

PORTC &= ~_BV(PC1); // Устанавливаем значение 0 на РС1

PORTC &= ~_BV(PC2); // Устанавливаем значение 0 на РС2

PORTC |= _BV(PC3); // Устанавливаем значение 1 на РС3

PORTC &= ~_BV(PC4); // Устанавливаем значение 0 на РС4

}

else

{

// -------- Оба мотора вращаются вперёд ---------

PORTC &= ~_BV(PC1); // Устанавливаем значение 0 на РС1

PORTC |= _BV(PC2); // Устанавливаем значение 1 на РС2

PORTC |= _BV(PC3); // Устанавливаем значение 1 на РС3

PORTC &= ~_BV(PC4); // Устанавливаем значение 0 на РС4

}

}

}

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Попробуй использовать взаимоисключающие условия, вот так:

//	1) РС1 - выход подключенный к левому мотору (назад)
//	2) РС4 - выход подключенный к правому мотору (назад)
//	3) РС2 - выход подклчюченный к левому мотору (вперёд)
//	4) РС3 - выход подключенный к правому мотору (вперёд) 

#include <avr/io.h>
#include <avr/delay.h>
#include <stdio.h>
#include <stdlib.h>



void main()
{
char a,b,c,d;
DDRC = 0xff; // Все выводы порта С сконфигурировать как выходы
DDRD = 0x00; // Все выводы порта D сконфигурировать как входы

PORTD = 0xff; // установить "1" на всех выводах порта D
			//	включаем подтягивающие резисторы
while (1)  // Бесконечный цикл проверки состояния датчиков
{

	if (PIND & (1<<7)) {a='1';} else {a='0';} // значение РD7
	if (PIND & (1<<2)) {b='1';} else {b='0';} // значение PD2
	if (PIND & (1<<1)) {c='1';} else {c='0';}	// значение PD1
	if (PIND & (1<<0)) {d='1';} else {d='0';}	// значение PD0

	if ((a=='0') && (b=='0') && (c=='0') &&(d=='0'))
	{
		// -------- оба мотора вращаются назад ---------
		PORTC |= _BV(PC1);   	// Устанавливаем значение 1 на РС1
		PORTC &= ~_BV(PC2);	// Устанавливаем значение 0 на РС2
		PORTC &= ~_BV(PC3);	// Устанавливаем значение 0 на РС3
		PORTC |= _BV(PC4);		// Устанавливаем значение 1 на РС4
	}
	else if (((a=='0') && (b=='0') && (c=='1') && (d=='0')) || 
	((a=='0') && (b=='0') && (c=='1') && (d=='1')) ||
	((a=='1') && (b=='0') && (c=='1') && (d=='1')))
	{
		// -------- Вращается только правый мотор -------
		PORTC &= ~_BV(PC1);   	// Устанавливаем значение 0 на РС1
		PORTC |= _BV(PC2);		// Устанавливаем значение 1 на РС2
		PORTC &= ~_BV(PC3);	// Устанавливаем значение 0 на РС3
		PORTC &= ~_BV(PC4);	// Устанавливаем значение 0 на РС4
	}
	else if (((a=='0') && (b=='1') && (c=='0') && (d=='0')) ||
	((a=='1') && (b=='1') && (c=='0') && (d=='0')) ||
	((a=='1') && (b=='1') && (c=='0') && (d=='1')))
	{
		// -------- Вращается только левый мотор --------
		PORTC &= ~_BV(PC1);   	// Устанавливаем значение 0 на РС1
		PORTC &= ~_BV(PC2);	// Устанавливаем значение 0 на РС2
		PORTC |= _BV(PC3);		// Устанавливаем значение 1 на РС3
		PORTC &= ~_BV(PC4);	// Устанавливаем значение 0 на РС4
	}
	else
	{
		// -------- Оба мотора вращаются вперёд ---------
		PORTC &= ~_BV(PC1);   	// Устанавливаем значение 0 на РС1
		PORTC |= _BV(PC2);		// Устанавливаем значение 1 на РС2
		PORTC |= _BV(PC3);		// Устанавливаем значение 1 на РС3
		PORTC &= ~_BV(PC4);	// Устанавливаем значение 0 на РС4
	}

}

}

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...