Страница 1 из 2

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

Добавлено: Вс июл 10, 2022 09:01:09
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 (из другой партии) - ничего.. Прошивка проходит вроде как корректно, верификация ОК.
Фьюзы по умолчанию, не менялись.
В протеусе всё работает как положено.
Что-то должно быть на поверхности, но не могу понять, что ЭТО. Кто что подскажет толкового?

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

Добавлено: Вс июл 10, 2022 09:17:17
С.Н.
{ PORTD=0x01;

PORTD=0x02;

PORTC=0x01;

}
В порту С все стабильно будет -1
В порту D моргающих бита нулевой и первый.
Не так получается что-ли?
По Си(шным) конструкциям типа while (1) {....} не силен - фиг его знает бесконечный ли цикл..

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

Добавлено: Вс июл 10, 2022 09:22:53
c717411
[uquote="С.Н.",url="/forum/viewtopic.php?p=4257331#p4257331"]В порту С все стабильно будет -1
В порту D моргающих бита нулевой и первый.
Не так получается что-ли?[/uquote]
Не так ( Получается только "В порту С все стабильно будет -1 ", а остальные порты в дальнейшем не изменяются. Т.е. выполняется только первая команда PORTx=....

while (1) - ага, бесконечный цикл

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

Добавлено: Вс июл 10, 2022 09:50:48
С.Н.
Тоже бывают такие ситуации....
В таких случаях исключайте прочие операции. Delay под комменты и контроль выводов осцилографом.

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

Добавлено: Вс июл 10, 2022 10:07:15
c717411
[uquote="С.Н.",url="/forum/viewtopic.php?p=4257344#p4257344"]Тоже бывают такие ситуации....
В таких случаях исключайте прочие операции. Delay под комменты и контроль выводов осцилографом.[/uquote]
Если убрать делеи - то всё ОК. Что ЭТО? ))
Изображение

ЗЫ: пересобрал прошивку в CodeVision AVR, с задержками - всё работает корректно. Видимо, косяк в параметрах оптимизации компилятора.

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

Добавлено: Вс июл 10, 2022 10:41:18
С.Н.
Продолжайте дальше использовать этот язык программирования. Он как начанался в 80х годах как шутка, так и сейчас продолжает шутить.

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

Добавлено: Вс июл 10, 2022 10:56:37
electroget
[uquote="С.Н.",url="/forum/viewtopic.php?p=4257367#p4257367"]язык программирования. Он как начанался в 80х годах как шутка[/uquote]
О каком языке программирования идёт речь?

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

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

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

начальная настройка режима (однократно)
далее цикл
     включить канал0
     задержка
     включить канал1 (сохранив активным канал0)
     задержка
     включить канал2 (сохранив активными канал0 и канал1)
   ждем команду/интервал на отключение
     выключить канал0 (каналы 1 и 2 без изменений)
     задержка
     выключить канал1 (канал2 без изменений)
     задержка
     выключить канал2
     задержка
   ждем команду/интервал на включение
а из чего(и с помощью чего) это соорудить - то уж что лучше знаем, на том и делаем.
:beer:

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

Добавлено: Вс июл 10, 2022 11:15:21
c717411
[uquote="BOB51",url="/forum/viewtopic.php?p=4257392#p4257392"]Порты имеют альтернативные функции - перед употреблением надо смотреть(и иногда делать) дополнительные настройки (не всегда явно отмеченные).[/uquote]
Затуп был в том, что это изначально был мой проект, он работал много лет, пока что-то не стряслось (думаю, перепутали полярность при поключении, девайс часто подключали-отключали, он работал от автомобильной АКБ). А тут я взял тот е проект, убрал из него часть ненужного кода, ничего не добавляя нового - и всё, не работает в железе, хотя в Протеусе всё норм.

Сейчас перекомпилировал тот же код (основной, не тестовый) в CodeVision - всё работает, как положено. В чем причина, я так и не понял (пока)

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

Добавлено: Вс июл 10, 2022 12:36:53
OKF
[uquote="BOB51",url="/forum/viewtopic.php?p=4257392#p4257392"]Порты имеют альтернативные функции - перед употреблением надо смотреть(и иногда делать) дополнительные настройки (не всегда явно отмеченные).[/uquote]
В AVR, в отличие от PIC, альтернативные функции отключены по дефолту.

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

Добавлено: Вс июл 10, 2022 13:40:42
С.Н.
[uquote="electroget",url="/forum/viewtopic.php?p=4257375#p4257375"][uquote="С.Н.",url="/forum/viewtopic.php?p=4257367#p4257367"]язык программирования. Он как начанался в 80х годах как шутка[/uquote]
О каком языке программирования идёт речь?[/uquote]
Тот, в основе которого которой void, {....} - органически его не переношу, хотя он был в моем "багажнике" знаний: Basic, TP(Pascal), Fortran, ТС(Си), ASM, BP, Delphi. Сейчас только ASM и Lazarus.
Тапочками в меня кидать не надо - понимаю, что в современном мире я динозавр....

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

Добавлено: Вс июл 10, 2022 14:58:47
electroget
[uquote="С.Н.",url="/forum/viewtopic.php?p=4257458#p4257458"]Тот, в основе которого которой void, {....}[/uquote]
Так а почему этот язык программирования шутка? Что в нём такого шутейного? Насколько я знаю, создание компиляторов для любого языка программирования это дело сложное и дорогое. Поэтому я и не понял, как языки программирования могли создаваться в шутку.

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

Добавлено: Вс июл 10, 2022 16:27:17
c717411
Перепробовал с разными параметрами оптимизации, вытащил в код две функции из delay.h, саму библиотеку убрал из include - НИЧЕГО.
Свою проблему я решил, но хочется теперь разобраться в вопросе.

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

Добавлено: Вс июл 10, 2022 16:34:15
С.Н.
[uquote="electroget",url="/forum/viewtopic.php?p=4257482#p4257482"]Так а почему этот язык программирования шутка? Что в нём такого шутейного? Насколько я знаю, создание компиляторов для любого языка программирования это дело сложное и дорогое. Поэтому я и не понял, как языки программирования могли создаваться в шутку.[/uquote]
Да это одна из байек конца 80 годов. От туда же и байка про операторные скобки {...} - якобы при открытии в среде Паскаля - всё это будет комментариями..
Беда лишь в том, что "мой башка" реально отсекает визуально куски кода с {...}. Каждый раз приходиться делать над собой усилие. Говорю же - динозавр.

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

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

Добавлено: Вс июл 10, 2022 16:37:05
Cheeseman
Попробуй прикола ради вставить таймерную задержку, вместо использования этой библиотечной функции или просто программную задержку и глянь. Если все работать будет с таймерной задержкой, значит косяк где-то внутри функции delay

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

Добавлено: Вс июл 10, 2022 16:41:22
c717411
[uquote="Cheeseman",url="/forum/viewtopic.php?p=4257517#p4257517"]Попробуй прикола ради вставить таймерную задержку, вместо использования этой библиотечной функции или просто программную задержку и глянь. Если все работать будет с таймерной задержкой, значит косяк где-то внутри функции delay[/uquote]
убирал чуть выше совсем delay, без них корректно всё работает. И программную ставил в виде цикла, всё тоже работает. Проблема явно в delay.h. Смущает, что код совсем уж простой, никаких прерываний не используется, в Протеусе всё тоже корректно. И до этого работало )

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

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

UPD. Пример. Собрал за несколько минут.
Template.rar
(417.49 КБ) 79 скачиваний

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

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

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

Добавлено: Вс июл 10, 2022 17:09:39
c717411
[uquote="veso74",url="/forum/viewtopic.php?p=4257527#p4257527"]c717411, с Вашим кодом выше, ATmega8 (через MiniCore) работает: PD0, PD1 соотв. LED мигает, PC0 вкл. в HIGH и не меняются (но и код выше такой). Я ничего не менял. Какой компилятор используете?[/uquote]
Да оно должно везде работать )
WinAVR-20100110 в связке с CodeBlocks.

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

Добавлено: Вс июл 10, 2022 17:20:11
veso74
Ищите проблему где-то (компилятор, среды программирования, настройка?), не в коде, не в _delay_ms().
Blink на любом пин нормально работает? (можно попробовать с кодом "для всех pins").