Странное поведение пина в прерывании

Обсуждаем контроллеры компании Atmel.
Ответить
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся

Сообщение trengtor »

Столкнулся со странным эффектом. Должен выдаваться импульс 1 мкс с периодом 1 мс, вместо этого выдается меандр с периодом 2 мс. Никто не сталкивался с подобным поведением МК?

Модель ATmega328P

В чем может быть причина?

Код: Выделить всё

program T_2;

var
  ButtonSelect : sbit at PIND2_bit;
  ButtonSelect_Direction : sbit at DDD2_bit;

begin
  ButtonSelect_Direction := 1;
  ButtonSelect := 0;
  InitTimer0;
  while TRUE do ;
end.

Код: Выделить всё

unit Dispatch;

var
  ButtonSelect : sbit; external; sfr; volatile;
  ButtonSelect_Direction : sbit; external; sfr;
  
procedure InitTimer0;

implementation

procedure InitTimer0;
begin
  SREG_I_bit := 1;
  OCR0A := 172;
  TCCR0A := 0x00;
  TCCR0B := 0x03;
  TCNT0 := 0;
  OCIE0A_bit := 1;
end;

procedure Pulse;
begin
  ButtonSelect := 1;
  Delay_us(1);
  ButtonSelect := 0;
end;

procedure Ticker1ms_Handler_Dispatcher; org IVT_ADDR_TIMER0_COMPA;
begin
  TCNT0 := 0;
  Pulse;
end;

end.
Изображение
Изображение
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

С вашими параметрами в CVAVR и протеусе:
Изображение
Отсюда вывод: дополнить утверждение
подобным поведением МК
словом эмулируемого.
+ я в модели поставил Fтакт= 20 МГц.
Docendo discimus
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Почему не используете аппаратный ШИМ?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся

Сообщение trengtor »

Z_h_e писал(а):Почему не используете аппаратный ШИМ?
Потому, что это не имеет отношения к ШИМ. Нужно было посмотреть длительности выполнения процедур – решил использовать короткие импульсы-маркеры. Наткнулся на меандр вместо иголок.

Добавлено after 1 minute 43 seconds:
pyzhman писал(а):С вашими параметрами в CVAVR и протеусе:
Отсюда вывод: дополнить утверждение
подобным поведением МК
словом эмулируемого.
+ я в модели поставил Fтакт= 20 МГц.
Вы излишне самоуверенны.
Никакой эмуляции тут нет, это реальное поведение.
Снято логическим анализатором.
Последний раз редактировалось trengtor Чт янв 12, 2017 09:36:23, всего редактировалось 1 раз.
Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Не силён в паскале, но может быть засада в этом:

Код: Выделить всё

ButtonSelect : sbit at PIND2_bit;
?
Может быть нужно PORTD2_bit?
Docendo discimus
Контактная информация:
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся

Сообщение trengtor »

pyzhman писал(а):Не силён в паскале, но может быть засада в этом:

Код: Выделить всё

ButtonSelect : sbit at PIND2_bit;
?
Может быть нужно PORTD2_bit?
Вы абсолютно правы. Спасибо!
Надо будет прочитать, в чем тут разница.
Изображение
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

PIN в более поздних версиях мк AVR инвертирует лапку.
Docendo discimus
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся

Сообщение trengtor »

pyzhman писал(а):PIN в более поздних версиях мк AVR инвертирует лапку.
Спасибо, буду знать.
Изображение
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Основное назначение порта PIN считывать состояние порта. В некоторых МК, в том числе в 328 ом, запись 1 в PIN , дает инвертирование соответствующего PORT
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся

Сообщение trengtor »

Z_h_e писал(а):Основное назначение порта PIN считывать состояние порта. В некоторых МК, в том числе в 328 ом, запись 1 в PIN , дает инвертирование соответствующего PORT
Нюансики. Спасибо!
Изображение
Контактная информация:
akl
Друг Кота
Сообщения: 4463
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
Note that the SBI instruction can be used to toggle one single bit in a port.
Лучше всё равно справляться в DS, т.к. не все современные камни AVR имеют такую возможность. Например, ATmega64A
Ответить

Вернуться в «AVR»