Перейти к содержанию
    

Не подключается кварц, Atmega8

2 hours ago, astral_ said:

В программе, которую я выложил, частота почему-то 1 МГц, но я заливал в мк и в Протеус ту, где 4МГц, не работало. Без кварца работает, т.е. дело не в настройках портов, свойства резисторов я поменял, эффекта нет.

1. PINB сравниваете с 7 битами.

2. К старшим пинам порта В у вас подключен резонатор, вы уверены, что там всегда 1?

3. Переделайте сравнения:

if ((PINB & 0x07) == 7)

и так далее.

4. Исправьте F_CPU 1000000UL на 4000000UL как в Протеусе, от этого зависит величина задержки _delay_ms.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, alag57 said:

1. PINB сравниваете с 7 битами.

 

Похоже это главная проблема, если не считать настройки порта.

Попробуйте, вроде работает, если что Proteus 8.13 SP0

test.rar

 

Изменено пользователем codenamehawk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, codenamehawk said:

Похоже это главная проблема, если не считать настройки порта.

Работает в Протеусе, мк пока не программировал. Но если в мою программу добавить эту строку, то не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, astral_ said:

Но если в мою программу добавить эту строку, то не работает.

Исправьте ошибки и будет работать.

т.е. он и так работает(что с 1 mhz, что с 4 mhz), ходит по командам, но из за ошибок в коде, светодиодов он не зажигает.

 

Изменено пользователем codenamehawk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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)

И как ТС собирается имитировать последнее сравнение нажимая две кнопки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В протеусе работает прога от codenamehawkкоторая отличается от моей доп. строкой DDRB=0b0. Я убрал эту строку, но она все равно работает в Протеусе, а моя нет, которая по тексту теперь такая же. Я залил работающую прогу в мк, но он не работает. Фьюзы 1111. Запрограммировал без кварца, 0001, работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

// 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, alag57 said:

У меня в вашем проекте зажигает.

 

6 hours ago, astral_ said:

В протеусе работает прога от codenamehawkкоторая отличается от моей доп. строкой DDRB=0b0. Я убрал эту строку, но она все равно работает в Протеусе, а моя нет, которая по тексту теперь такая же

В том то и дело, что не такая же, даже если не учитывать мою строку.

Рекомендую прогу WinHEX, удобно находить различия в похожих файлах.

Изменено пользователем codenamehawk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, astral_ said:

Фьюзы 1111.

А как думаете, зачем там другие fuse? CKOPT SUT

Попробуйте такие установить.

fuse.thumb.png.55f3b7724cb278d4af15d2771425de4d.png

http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega8

https://scienceprog.com/programming-avr-fuse-bits-oscillator-settings/

 

В реальной схеме, кнопки без подтяжек, редко когда нормально работают.

Упростите программу до мигания одним светодиодом, ясное дело без опроса кнопок, проверите, работает ли проц. с кварцем 4Мг.

 

 

Изменено пользователем codenamehawk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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-ричном виде вместо установки галочек.

Разберетесь с фьюзами - вносите их в Протеус, если они там нужны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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-ричном виде вместо установки галочек.

Разберетесь с фьюзами - вносите их в Протеус, если они там нужны.

Устанавливал фьюзы таким образом, шестнадцатиричные значения были правильными, но мк молчит. Буду проверять тестовой программой, как рекомендуют. Я заметил, что хотя частота мк при работе от внутренней рс-цепи нестабильна, но изменяется она вполне предсказуемо. В первый час работы она стабильно уменьшается, потом устанавливается и если изменяется, то с допустимой погрешностью. Я правильно понял, что это связано с нагревом мк и увеличением сопротивления в рс-цепи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, bvn123 said:

должны установиться high fuse = 0xD9

Стоит попробовать с установленным CKOPT, более сильный размах колебаний от кварца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 minutes ago, codenamehawk said:

Стоит попробовать с установленным CKOPT, более сильный размах колебаний от кварца.

Я его сразу установил, с первых попыток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, astral_ said:

Я его сразу установил, с первых попыток.

Программу упростили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...