alag57 1 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 2 hours ago, astral_ said: В программе, которую я выложил, частота почему-то 1 МГц, но я заливал в мк и в Протеус ту, где 4МГц, не работало. Без кварца работает, т.е. дело не в настройках портов, свойства резисторов я поменял, эффекта нет. 1. PINB сравниваете с 7 битами. 2. К старшим пинам порта В у вас подключен резонатор, вы уверены, что там всегда 1? 3. Переделайте сравнения: if ((PINB & 0x07) == 7) и так далее. 4. Исправьте F_CPU 1000000UL на 4000000UL как в Протеусе, от этого зависит величина задержки _delay_ms. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 31 августа, 2022 Опубликовано 31 августа, 2022 (изменено) · Жалоба 4 hours ago, alag57 said: 1. PINB сравниваете с 7 битами. Похоже это главная проблема, если не считать настройки порта. Попробуйте, вроде работает, если что Proteus 8.13 SP0 test.rar Изменено 31 августа, 2022 пользователем codenamehawk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
astral_ 0 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 2 hours ago, codenamehawk said: Похоже это главная проблема, если не считать настройки порта. Работает в Протеусе, мк пока не программировал. Но если в мою программу добавить эту строку, то не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 (изменено) · Жалоба 6 hours ago, astral_ said: Но если в мою программу добавить эту строку, то не работает. Исправьте ошибки и будет работать. т.е. он и так работает(что с 1 mhz, что с 4 mhz), ходит по командам, но из за ошибок в коде, светодиодов он не зажигает. Изменено 1 сентября, 2022 пользователем codenamehawk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 1 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба 6 hours ago, codenamehawk said: светодиодов он не зажигает. У меня в вашем проекте зажигает. DDRB по умолчанию после сброса равен 0. Неправильно я написал сравнение, там младший пин не подключен: uint8_t p = (PINB & 14) >> 1; if (p == 7) if (p == 5) if (p == 3) if (p == 1) И как ТС собирается имитировать последнее сравнение нажимая две кнопки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
astral_ 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба В протеусе работает прога от codenamehawk, которая отличается от моей доп. строкой DDRB=0b0. Я убрал эту строку, но она все равно работает в Протеусе, а моя нет, которая по тексту теперь такая же. Я залил работающую прогу в мк, но он не работает. Фьюзы 1111. Запрограммировал без кварца, 0001, работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bvn123 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба // approximately 1 blink in 1.5s under Fck=7.3728MHz #include <avr/io.h> void delay(uint32_t t){ for(uint32_t i=0;i<t;i++)asm("WDR"); } int main(void){ DDRD = PORTD =0xFF; while(1){ delay(500000); PORTD = ~PORTD; } } Вы выкладывали в т.ч. проект в Atmel Studio с массой задержек _delay_ms(14.xxx). Выше простой код для проверки, что определяет тактовую частоту МК, кварц 4МГц или внутренний RC-генератора 1МГц. Ваш код в Atmel Studio (или Microchip Studio) можно заменить этим кодом для проверки. Проверять можно тестером в режиме измерения постоянного напряжения или светодиодом с резистором. Подключить светодиод с резистором или тестер можно к любому пину порта D - все мигают синхронно. Функция delay() со сбросом сторожевого таймера командой ассемблера: - если сторожевой таймер включен фьюз-битом (случайно или намеренно), в этой функции он сбрасывается, а в библиотечной функции _delay_ms() из <delay.h> нет; - ассемблерная команда заменяет _WDR(), требующую подключения <wdt.h> При частоте кварца около 8МГц мигание примерно раз в 1,5с, при работе от кварца 4МГц мигать будет раз в 3с, при работе от внутреннего RC-генератора 1МГц раз в 12с (6с вкл., 6с выкл) - дебаггер показывает 5500028 тактов задающего генератора между переключениями состояний порта D. hex-файл прошивки прикреплён. Blink_T3s_4MHz.hex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 (изменено) · Жалоба 6 hours ago, alag57 said: У меня в вашем проекте зажигает. 6 hours ago, astral_ said: В протеусе работает прога от codenamehawk, которая отличается от моей доп. строкой DDRB=0b0. Я убрал эту строку, но она все равно работает в Протеусе, а моя нет, которая по тексту теперь такая же В том то и дело, что не такая же, даже если не учитывать мою строку. Рекомендую прогу WinHEX, удобно находить различия в похожих файлах. Изменено 1 сентября, 2022 пользователем codenamehawk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 (изменено) · Жалоба 6 hours ago, astral_ said: Фьюзы 1111. А как думаете, зачем там другие fuse? CKOPT SUT Попробуйте такие установить. http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega8 https://scienceprog.com/programming-avr-fuse-bits-oscillator-settings/ В реальной схеме, кнопки без подтяжек, редко когда нормально работают. Упростите программу до мигания одним светодиодом, ясное дело без опроса кнопок, проверите, работает ли проц. с кварцем 4Мг. Изменено 1 сентября, 2022 пользователем codenamehawk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bvn123 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба On 8/24/2022 at 9:02 PM, astral_ said: Тестовую программу я попробую и проверю сигнал осциллографом, когда сделаю отдельную плату для тестов. Но пока программа не работает даже в Протеусе, с ассемблерными командами я еще не разобрался и непонятно в каком месте ошибка. Схема не работает при подключении кварца, него работает, значит в самой программе не должно быть ошибки. программа.zip 18.89 kB · 7 downloads Proteus.zip 18.54 kB · 3 downloads зачем отдельная плата для выяснения, что является источником тактового сигнала? прошейте в имеющийся МК hex-файл (присоединил к предыдущему сообщению) - разберитесь с фьюзами и источником тактирования, не надо осциллографа, подключите тестер для проверки или светодиод, потом двигайтесь дальше. По поводу фьюзов и кварца 4МГц: состояние фьюзов у нового МК: High 1101 1001 0xD9 Low 1110 0001 0xE1 для работы с кварцем 4МГц в Вашей задаче достаточно изменить младший байт: bit# 7654 3210 High 1101 1001 0xD9 Low 1111 1111 0xFF - Brown-детектор выключен; самое медленное время старта; кварц 3...8МГц. Обычно, кроме окошек для установки отдельных фьюз-битов, выводят информацию о 16-ричных значениях фьюз-байтов - контролируйте и эти значения (должны установиться high fuse = 0xD9 и low fuse = 0xFF), а еще надежнее прописать младший фьюз-байт в 16-ричном виде вместо установки галочек. Разберетесь с фьюзами - вносите их в Протеус, если они там нужны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
astral_ 0 2 сентября, 2022 Опубликовано 2 сентября, 2022 · Жалоба 13 hours ago, bvn123 said: для работы с кварцем 4МГц в Вашей задаче достаточно изменить младший байт: bit# 7654 3210 High 1101 1001 0xD9 Low 1111 1111 0xFF - Brown-детектор выключен; самое медленное время старта; кварц 3...8МГц. Обычно, кроме окошек для установки отдельных фьюз-битов, выводят информацию о 16-ричных значениях фьюз-байтов - контролируйте и эти значения (должны установиться high fuse = 0xD9 и low fuse = 0xFF), а еще надежнее прописать младший фьюз-байт в 16-ричном виде вместо установки галочек. Разберетесь с фьюзами - вносите их в Протеус, если они там нужны. Устанавливал фьюзы таким образом, шестнадцатиричные значения были правильными, но мк молчит. Буду проверять тестовой программой, как рекомендуют. Я заметил, что хотя частота мк при работе от внутренней рс-цепи нестабильна, но изменяется она вполне предсказуемо. В первый час работы она стабильно уменьшается, потом устанавливается и если изменяется, то с допустимой погрешностью. Я правильно понял, что это связано с нагревом мк и увеличением сопротивления в рс-цепи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 2 сентября, 2022 Опубликовано 2 сентября, 2022 · Жалоба 16 hours ago, bvn123 said: должны установиться high fuse = 0xD9 Стоит попробовать с установленным CKOPT, более сильный размах колебаний от кварца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
astral_ 0 2 сентября, 2022 Опубликовано 2 сентября, 2022 · Жалоба 40 minutes ago, codenamehawk said: Стоит попробовать с установленным CKOPT, более сильный размах колебаний от кварца. Я его сразу установил, с первых попыток. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 2 сентября, 2022 Опубликовано 2 сентября, 2022 · Жалоба 4 hours ago, astral_ said: Я его сразу установил, с первых попыток. Программу упростили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
astral_ 0 2 сентября, 2022 Опубликовано 2 сентября, 2022 · Жалоба 2 hours ago, codenamehawk said: Программу упростили? Нет еще, сделаю в ближайшее время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться