mega8 непонятная проблема с программой

Обсуждаем контроллеры компании Atmel.
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

mega8 непонятная проблема с программой

Сообщение c717411 »

Здравствуйте. Никак не могут победить простую задачку, ничего не могут понять.
Задача достаточно простая - включение-выключение трех каналом логическими уровнями с необходимыми задержками. Устройство много лет работало как положено, но потом что-то коротнуло и часть схемы благополучно умерло. Дали починить, заодно чуть исправить прошивку. Вот исправил - МК почему-то выставляет 1 в нужный вывод, далее задержка - и всё ( Как-будто из задержки более не выходит программа. Перекинул контроллер на абсолютно другую плату (пустую) - всё аналогично. Слепил тестовую прошивку.

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

#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
    DDRC=0xFF;
    DDRD=0xFF;
    while(1)
    {
        PORTD=0x01;
        _delay_ms(3000);
        PORTD=0x02;
        _delay_ms(3000);
        PORTC=0x01;
        _delay_ms(3000);
    }
    return 0;
}

Всё аналогично. ПортД в тестовой прошивки для пробы, так-то нужен С, но на обоих портах ситуация одинаковая. Ставил другую мегу8 (из другой партии) - ничего.. Прошивка проходит вроде как корректно, верификация ОК.
Фьюзы по умолчанию, не менялись.
В протеусе всё работает как положено.
Что-то должно быть на поверхности, но не могу понять, что ЭТО. Кто что подскажет толкового?
С.Н.
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Re: mega8 непонятная проблема с программой

Сообщение С.Н. »

{ PORTD=0x01;

PORTD=0x02;

PORTC=0x01;

}
В порту С все стабильно будет -1
В порту D моргающих бита нулевой и первый.
Не так получается что-ли?
По Си(шным) конструкциям типа while (1) {....} не силен - фиг его знает бесконечный ли цикл..
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: mega8 непонятная проблема с программой

Сообщение c717411 »

В порту С все стабильно будет -1
В порту D моргающих бита нулевой и первый.
Не так получается что-ли?

Не так ( Получается только "В порту С все стабильно будет -1 ", а остальные порты в дальнейшем не изменяются. Т.е. выполняется только первая команда PORTx=....

while (1) - ага, бесконечный цикл
С.Н.
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Re: mega8 непонятная проблема с программой

Сообщение С.Н. »

Тоже бывают такие ситуации....
В таких случаях исключайте прочие операции. Delay под комменты и контроль выводов осцилографом.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: mega8 непонятная проблема с программой

Сообщение c717411 »

Тоже бывают такие ситуации....
В таких случаях исключайте прочие операции. Delay под комменты и контроль выводов осцилографом.

Если убрать делеи - то всё ОК. Что ЭТО? ))
Изображение

ЗЫ: пересобрал прошивку в CodeVision AVR, с задержками - всё работает корректно. Видимо, косяк в параметрах оптимизации компилятора.
Вложения
121212.png
(53.37 КБ) 380 скачиваний
С.Н.
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Re: mega8 непонятная проблема с программой

Сообщение С.Н. »

Продолжайте дальше использовать этот язык программирования. Он как начанался в 80х годах как шутка, так и сейчас продолжает шутить.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: mega8 непонятная проблема с программой

Сообщение electroget »

язык программирования. Он как начанался в 80х годах как шутка

О каком языке программирования идёт речь?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15539
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: mega8 непонятная проблема с программой

Сообщение BOB51 »

Порты имеют альтернативные функции - перед употреблением надо смотреть(и иногда делать) дополнительные настройки (не всегда явно отмеченные).
Но бывает и заметно проще:

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

начальная настройка режима (однократно)
далее цикл
     включить канал0
     задержка
     включить канал1 (сохранив активным канал0)
     задержка
     включить канал2 (сохранив активными канал0 и канал1)
   ждем команду/интервал на отключение
     выключить канал0 (каналы 1 и 2 без изменений)
     задержка
     выключить канал1 (канал2 без изменений)
     задержка
     выключить канал2
     задержка
   ждем команду/интервал на включение

а из чего(и с помощью чего) это соорудить - то уж что лучше знаем, на том и делаем.
:beer:
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: mega8 непонятная проблема с программой

Сообщение c717411 »

Порты имеют альтернативные функции - перед употреблением надо смотреть(и иногда делать) дополнительные настройки (не всегда явно отмеченные).

Затуп был в том, что это изначально был мой проект, он работал много лет, пока что-то не стряслось (думаю, перепутали полярность при поключении, девайс часто подключали-отключали, он работал от автомобильной АКБ). А тут я взял тот е проект, убрал из него часть ненужного кода, ничего не добавляя нового - и всё, не работает в железе, хотя в Протеусе всё норм.

Сейчас перекомпилировал тот же код (основной, не тестовый) в CodeVision - всё работает, как положено. В чем причина, я так и не понял (пока)
OKF
Это не хвост, это антенна
Сообщения: 1380
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: mega8 непонятная проблема с программой

Сообщение OKF »

Порты имеют альтернативные функции - перед употреблением надо смотреть(и иногда делать) дополнительные настройки (не всегда явно отмеченные).

В AVR, в отличие от PIC, альтернативные функции отключены по дефолту.
С.Н.
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Re: mega8 непонятная проблема с программой

Сообщение С.Н. »

[uquote="С.Н.",url="/forum/viewtopic.php?p=4257367#p4257367"]язык программирования. Он как начанался в 80х годах как шутка

О каком языке программирования идёт речь?[/uquote]
Тот, в основе которого которой void, {....} - органически его не переношу, хотя он был в моем "багажнике" знаний: Basic, TP(Pascal), Fortran, ТС(Си), ASM, BP, Delphi. Сейчас только ASM и Lazarus.
Тапочками в меня кидать не надо - понимаю, что в современном мире я динозавр....
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: mega8 непонятная проблема с программой

Сообщение electroget »

Тот, в основе которого которой void, {....}

Так а почему этот язык программирования шутка? Что в нём такого шутейного? Насколько я знаю, создание компиляторов для любого языка программирования это дело сложное и дорогое. Поэтому я и не понял, как языки программирования могли создаваться в шутку.
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: mega8 непонятная проблема с программой

Сообщение c717411 »

Перепробовал с разными параметрами оптимизации, вытащил в код две функции из delay.h, саму библиотеку убрал из include - НИЧЕГО.
Свою проблему я решил, но хочется теперь разобраться в вопросе.
С.Н.
Потрогал лапой паяльник
Сообщения: 306
Зарегистрирован: Пн окт 26, 2020 08:37:51
Откуда: г.Волгоград

Re: mega8 непонятная проблема с программой

Сообщение С.Н. »

Так а почему этот язык программирования шутка? Что в нём такого шутейного? Насколько я знаю, создание компиляторов для любого языка программирования это дело сложное и дорогое. Поэтому я и не понял, как языки программирования могли создаваться в шутку.

Да это одна из байек конца 80 годов. От туда же и байка про операторные скобки {...} - якобы при открытии в среде Паскаля - всё это будет комментариями..
Беда лишь в том, что "мой башка" реально отсекает визуально куски кода с {...}. Каждый раз приходиться делать над собой усилие. Говорю же - динозавр.

Но дайте человеку пояснение почему функция delay, работающая ранее, не работает теперь. Если поменялся синтаксис при переходе из одного компилятора к другому, то почему нет ошибки. Просто зависание программы - это не шутка компилятора? Как ему доверять в более серьезных вещах?
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Аватара пользователя
Cheeseman
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

Re: mega8 непонятная проблема с программой

Сообщение Cheeseman »

Попробуй прикола ради вставить таймерную задержку, вместо использования этой библиотечной функции или просто программную задержку и глянь. Если все работать будет с таймерной задержкой, значит косяк где-то внутри функции delay
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: mega8 непонятная проблема с программой

Сообщение c717411 »

Попробуй прикола ради вставить таймерную задержку, вместо использования этой библиотечной функции или просто программную задержку и глянь. Если все работать будет с таймерной задержкой, значит косяк где-то внутри функции delay

убирал чуть выше совсем delay, без них корректно всё работает. И программную ставил в виде цикла, всё тоже работает. Проблема явно в delay.h. Смущает, что код совсем уж простой, никаких прерываний не используется, в Протеусе всё тоже корректно. И до этого работало )
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: mega8 непонятная проблема с программой

Сообщение Demiurg »

Если нужны времянки, кратные 1 мс, предлагаю использовать программные таймеры. Можно и конечные автоматы сразу.
Такой подход сильно облегчает и ускоряет создание проектов.
Да, немного сложнее, чем линейный код с делеями, зато никаких моментов. Плюшка, параллельная работа других модулей.
Мой пример программных таймеров.

UPD. Пример. Собрал за несколько минут.

Template.rar
(417.49 КБ) 76 скачиваний
Последний раз редактировалось Demiurg Вс июл 10, 2022 17:08:01, всего редактировалось 1 раз.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: mega8 непонятная проблема с программой

Сообщение veso74 »

c717411, с Вашим кодом выше, ATmega8 (через MiniCore) работает: PD0, PD1 соотв. LED мигает, PC0 вкл. в HIGH и не меняются (но и код выше такой). Я ничего не менял. Какой компилятор используете?
c717411
Встал на лапы
Сообщения: 148
Зарегистрирован: Ср дек 29, 2010 21:19:03

Re: mega8 непонятная проблема с программой

Сообщение c717411 »

c717411, с Вашим кодом выше, ATmega8 (через MiniCore) работает: PD0, PD1 соотв. LED мигает, PC0 вкл. в HIGH и не меняются (но и код выше такой). Я ничего не менял. Какой компилятор используете?

Да оно должно везде работать )
WinAVR-20100110 в связке с CodeBlocks.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: mega8 непонятная проблема с программой

Сообщение veso74 »

Ищите проблему где-то (компилятор, среды программирования, настройка?), не в коде, не в _delay_ms().
Blink на любом пин нормально работает? (можно попробовать с кодом "для всех pins").
Ответить

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