roboforum.ru

Технический форум по робототехнике.

Про меандр

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Re: Про меандр

Сообщение rig » 14 май 2010, 11:55

чувствую себя инквизитором
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Про меандр

Сообщение Lockdog » 14 май 2010, 12:15

В общем, видимо, протеус глючит, потому что сейчас запустил программу в отладчике AVR Studio и там всё работало как надо и через 0,5 сек прерывание обрабатывалось.
Спасибо всем за терпение. =)
Аватара пользователя
Lockdog
 
Сообщения: 650
Зарегистрирован: 06 июл 2006, 20:42
Откуда: Москва
прог. языки: C/C++, Python

Re: Про меандр

Сообщение rig » 14 май 2010, 12:32

Ну а в железе?
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Про меандр

Сообщение Lockdog » 14 май 2010, 13:25

Сегодня вечером попробую и отпишусь, сейчас железо просто не с собой=)
Аватара пользователя
Lockdog
 
Сообщения: 650
Зарегистрирован: 06 июл 2006, 20:42
Откуда: Москва
прог. языки: C/C++, Python

Re: Про меандр

Сообщение rig » 15 май 2010, 11:43

что там по железу, работает?
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Про меандр

Сообщение Lockdog » 16 май 2010, 00:12

Не заработало =(

Добавлено спустя 1 час 3 минуты 6 секунд:
Странно, но по всей видимости не работает конструкция if {}, потому что я пробовал в прерывании дёргать ногой МК и всё работало
Код: Выделить всёРазвернуть
 #pragma vector = TIMER1_OVF_vect
__interrupt void flashing(void)
{
   PORTD ^= (1<<PD0);
}


Но вот если записать так:
Код: Выделить всёРазвернуть
 #pragma vector = TIMER1_OVF_vect
__interrupt void flashing(void)
{
  if ((PINC & (1 << PC3)) == 1)
  {
    TCNT1H=0xF0;
    TCNT1L=0x6F;
    PORTD ^= (1<<PD0);
  }
}

То ничего не работает. DDRC настроен на вход.
Аватара пользователя
Lockdog
 
Сообщения: 650
Зарегистрирован: 06 июл 2006, 20:42
Откуда: Москва
прог. языки: C/C++, Python

Re: Про меандр

Сообщение rig » 16 май 2010, 07:54

не в прерывании работает?
давай схему конструкции.

PD0,PC3 где инициализированы?
пробуй заменить на цыфры.

С ножками все впорядке? С первой страницы фигурируют нулевые ножки а тут уже третья вход и нулевая выход
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Про меандр

Сообщение Lockdog » 16 май 2010, 11:10

Не в прерывании тоже не работает.

PC3, PD0 описаны в хедере iom8.h
С ножками всё в порядке, пробовал менять и на цифры, причём в кодвижн if работает.

Входные ноги PC3-PC5
Выходные PD0-PD2
Так что не играет роли с чего снимать и на что выводить =)

Добавлено спустя 38 минут 48 секунд:
Бред =)

Записал так:
Код: Выделить всёРазвернуть
{
  if ((PINC & (1 << PC3)) != 0)
  {
    TCNT1H=0xF0;
    TCNT1L=0x6F;
    PORTD = (1<<PD0);
  }

и всё заработало. =)

В общем если у кого-то будет похожая проблема, то в IAR нужно проверять не на равенство лог.1, а на НЕ РАВЕНСТВО лог.0
Аватара пользователя
Lockdog
 
Сообщения: 650
Зарегистрирован: 06 июл 2006, 20:42
Откуда: Москва
прог. языки: C/C++, Python

Re: Про меандр

Сообщение Duhas » 16 май 2010, 13:46

а так
Код: Выделить всёРазвернуть
if (!(PINC & (1 << PC3)))
будет работать?
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Про меандр

Сообщение Lockdog » 16 май 2010, 14:11

Duhas писал(а):а так
Код: Выделить всёРазвернуть
if (!(PINC & (1 << PC3)))
будет работать?

Нет, так работать не будет, потому что проверяется на НЕ РАВЕНСТВО лог.1, т.е. твоя строка эквивалентна этому:
Код: Выделить всёРазвернуть
if ((PINC & (1 << PC3)) != 1)
Аватара пользователя
Lockdog
 
Сообщения: 650
Зарегистрирован: 06 июл 2006, 20:42
Откуда: Москва
прог. языки: C/C++, Python

Re: Про меандр

Сообщение Duhas » 16 май 2010, 14:15

тогда просто убрать воскл знак.. иф(выражение) а выражение у тебя без сравнен7ий и так должно давать 0 или 1 ... ух ето си.. его пользовать нада еще научиться...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Про меандр

Сообщение Lockdog » 16 май 2010, 14:50

Duhas писал(а):тогда просто убрать воскл знак.. иф(выражение) а выражение у тебя без сравнен7ий и так должно давать 0 или 1 ... ух ето си.. его пользовать нада еще научиться...

Ну можно и так =)
Аватара пользователя
Lockdog
 
Сообщения: 650
Зарегистрирован: 06 июл 2006, 20:42
Откуда: Москва
прог. языки: C/C++, Python

Re: Про меандр

Сообщение rig » 17 май 2010, 11:04

если так записать
Код: Выделить всёРазвернуть
if ((PINC & (1 << PC3)) == (1 << PC3))


будет работать?

Добавлено спустя 1 минуту 9 секунд:
подидее должно, тыж работаешь с байтом а сравниваешь
Код: Выделить всёРазвернуть
if ((PINC & (1 << PC3)) != 0)
0b00000100 и !0b00000000


Добавлено спустя 1 минуту 59 секунд:
и такая конструкция тож должна работать
Код: Выделить всёРазвернуть
if (PINC.3  == 1)
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Пред.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron