roboforum.ru

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

Про меандр

Re: Про меандр

rig » 14 май 2010, 11:55

чувствую себя инквизитором

Re: Про меандр

Lockdog » 14 май 2010, 12:15

В общем, видимо, протеус глючит, потому что сейчас запустил программу в отладчике AVR Studio и там всё работало как надо и через 0,5 сек прерывание обрабатывалось.
Спасибо всем за терпение. =)

Re: Про меандр

rig » 14 май 2010, 12:32

Ну а в железе?

Re: Про меандр

Lockdog » 14 май 2010, 13:25

Сегодня вечером попробую и отпишусь, сейчас железо просто не с собой=)

Re: Про меандр

rig » 15 май 2010, 11: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 настроен на вход.

Re: Про меандр

rig » 16 май 2010, 07:54

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

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

С ножками все впорядке? С первой страницы фигурируют нулевые ножки а тут уже третья вход и нулевая выход

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

Re: Про меандр

Duhas » 16 май 2010, 13:46

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

Re: Про меандр

Lockdog » 16 май 2010, 14:11

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

Нет, так работать не будет, потому что проверяется на НЕ РАВЕНСТВО лог.1, т.е. твоя строка эквивалентна этому:
Код: Выделить всёРазвернуть
if ((PINC & (1 << PC3)) != 1)

Re: Про меандр

Duhas » 16 май 2010, 14:15

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

Re: Про меандр

Lockdog » 16 май 2010, 14:50

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

Ну можно и так =)

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)


Rambler\'s Top100 Mail.ru counter