delay_ms(1) = 0.5mS UPD: Закрыто.

Обсуждаем контроллеры компании Atmel.
Ответить
Land
Прорезались зубы
Сообщения: 217
Зарегистрирован: Ср янв 11, 2012 11:55:51

delay_ms(1) = 0.5mS UPD: Закрыто.

Сообщение Land »

Всем доброго дня. Столкнулся с совершенно загадочным явлением в железе. На Atmega88 есть кусок кода, который формирует определенную последовательность с определенными временнЫми параметрами. Как видно из кода, минимальной временнОй единицей является 1 милисекунда. И в симуляторе Atmel Studio, и в Proteus нет никаких проблем. Все работает, как и должно. Но в реальном железе происходит следующее. Примерно в половине случаев (а может и больше) вызова функции, формируется последовательность с задержкой в 0,5 mS. Это очевидно видно из осциллограмм. Вопрос: че это за хрень и что с ней делать?

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

void send_data(uint8_t comand)
	{	
		cli();
		uint16_t buffer = 0;
			//for (uint8_t m = 0; m <=3; ++m)
			{buffer = (devices << 8)|comand;
				PORTB &= ~(1 << TXD);	// старт передачи две "1"
				_delay_ms(2);				
					for(uint8_t i=0; i<=15; i++)
						{
							if (buffer & 0x01) PORTB_XOR(TXD); else;
							buffer = buffer >> 1;
							_delay_ms(1);
						}
				PORTB |= (1 << TXD);
				_delay_ms(2);
			}
		sei();
1 mS
Изображение
0.5 mS
Изображение
Последний раз редактировалось Land Вт июн 28, 2022 22:50:55, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: delay_ms(1) = 0.5mS

Сообщение Ivanoff-iv »

проблема не в делаях, а в выводе (передние фронты то не съехали...)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: delay_ms(1) = 0.5mS

Сообщение VNS »

[uquote="Land",url="/forum/viewtopic.php?p=4252007#p4252007"]Столкнулся с совершенно загадочным явлением в железе.[/uquote]
Загадка видимо в коде… может кривовато написан? :dont_know:

У меня правда нет меги88, но на меге328 (16 МГц) работает вот как похожая задержка у меня… задействован вывод РВ5.
P1010390.JPG
(38.29 КБ) 59 скачиваний
Если есть на чём проверить мою версию, вот прошивка:
Test.hex
(635 байт) 61 скачивание
Land
Прорезались зубы
Сообщения: 217
Зарегистрирован: Ср янв 11, 2012 11:55:51

Re: delay_ms(1) = 0.5mS

Сообщение Land »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4252017#p4252017"]проблема не в делаях, а в выводе (передние фронты то не съехали...)[/uquote]
допустим. Тогда что может прибавлять по 0,5 мС ? В коде ничего не меняется, устройство не выключается, осциллограммы сделаны с разностью в 2 минуты.

Добавлено after 3 minutes 36 seconds:
[uquote="VNS",url="/forum/viewtopic.php?p=4252029#p4252029"][uquote="Land",url="/forum/viewtopic.php?p=4252007#p4252007"]Столкнулся с совершенно загадочным явлением в железе.[/uquote]
Загадка видимо в коде… может кривовато написан? :dont_know:[/uquote]
возможно. Я для этого код и привел. Но, повторюсь, во всех симуляторах все работает как дОлжно. Без вопросов.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: delay_ms(1) = 0.5mS

Сообщение VNS »

Так я не понимаю что там написано… :dont_know: потому делаю только предположения… :roll: я даже не понял какая должна быть у тебя последовательность… :)
Реклама
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: delay_ms(1) = 0.5mS

Сообщение Ivanoff-iv »

можно подробнее, какое действие ожидается от этой строки?
if (buffer & 0x01) PORTB_XOR(TXD); else;
(интересует PORTB_XOR(TXD); ето функция?
и ещё, что отделено оператором else;?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Land
Прорезались зубы
Сообщения: 217
Зарегистрирован: Ср янв 11, 2012 11:55:51

Re: delay_ms(1) = 0.5mS

Сообщение Land »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4252153#p4252153"]можно подробнее, какое действие ожидается от этой строки?
if (buffer & 0x01) PORTB_XOR(TXD); else;
(интересует PORTB_XOR(TXD); ето функция?[/uquote]
#define PORTB_XOR(x) (PORTB ^= (1 << x))
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4252153#p4252153"]и ещё, что отделено оператором else;?[/uquote]
ничего. ; закрывает пустой оператор else. Да, я знаю, что его можно не писать, но мне он не мешает, а для меня делает код более читаемым.
Перепроверил дефайны. #define TXD PB4. Больше к этому пину ничто не обращается. PCINT4 не инициализируется и не используется
Стоп. Кажется сам дурак. Я это смотрю на приемной стороне после компаратора. И не вижу фронтов на входе приемника :oops:
UPD. Тема закрыта.
Ivanoff-iv, большое спасибо за подсказку!
Ответить

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