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

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 20:54
pasha71
Добрый вечер.Кто нибудь сталкивался с такой непонятной бедой.
Программа одна и та же,камень один и тоже,а задержки по времени работают по разному от микросхемы до микросхемы.Может что то чего то подскажет как это победить?

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 21:00
Ingwar
Если это просто камни (не ардуино), то возможно фьюзы разные. Причем на одинаковых кварцах. Особенно если делитель на 8 включен.

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 21:05
pasha71
Сейчас я поточнее опишу.
Камень attiny13
Фьюзы проверяю перед программированием (это первое куда я сунулся,я тоже на них грешил)
Программа на ассемблере
Задержка написанная не с помощью таймеров (может в этом и беда) а просто перебором цифр на уменьшение.
Наказание какое то.
Это просто таймер ,он 10 секунд работает,2 минуты пауза (подача топлива на форсунку)
Запрограммировал и тут же проверяю,и начинаю корректировать,бывает до 3 ,4 секунд разлет,ну зла уже не хватает честное слово(((

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 21:55
Ingwar
Ты не одинок...) Причины разные. И если от внутреннего, то там разброс вроде +/-10% допустим.
http://arduino.ru/forum/apparatnye-vopr ... generatora
https://electronix.ru/forum/index.php?a ... 123&page=2

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:09
pasha71
Так в том то и дело что к 13 не прилепишь кварц,не предназначен он для кварца.Ей Боже психану и перепру на 85,может полегчает с кварцем то.

Отправлено спустя 31 секунду:
Только и цена с играет тоже,ну да и ладно

Отправлено спустя 6 минут 2 секунды:
А может мы действительно уж сильно верим в непогрешимую точность микроконтроллеров

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:16
eugeneb
[ref]pasha71[/ref], там есть калибровочные байты. Есть методы как их вычислять.
Потом их надо зашивать в код программы, индивидуально к каждому экземпляру
контроллера. Они не запоминаются при перезагрузках.

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:22
pasha71
В калибровочные ячейки заносятся константы при изготовлении микроконтроллера, и загрузка этой константы происходит при сбросе,ну фактически при запуске.При том у меня она одна (ячейка) так что с ними не поиграешься

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:26
eugeneb
Нет. Вы говорите про заводские настройки. А я говорю про байты, доступные пользователю. Они находятся в области памяти 'calibration'.

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:27
pasha71
и пред делитель главной частоты я в самом начале обнуляю,что бы не мешал.Именно программно обнуляю

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:30
eugeneb
Я только не помню в 13-й байтов один или два.

Отправлено спустя 3 минуты 7 секунд:
Вот, заглянул в описалово:
[spoiler]17.3
Calibration Bytes
The signature area of the ATtiny13 contains two bytes of calibration data for the internal oscilla-
tor. The calibration data in the high byte of address 0x00 is for use with the oscillator set to 9.6
MHz operation. During reset, this byte is automatically written into the OSCCAL register to
ensure correct frequency of the oscillator.

There is a separate calibration byte for the internal oscillator in 4.8 MHz mode of operation but
this data is not loaded automatically. The hardware always loads the 9.6 MHz calibraiton data
during reset. To use separate calibration data for the oscillator in 4.8 MHz mode the OSCCAL
register must be updated by firmware. The calibration data for 4.8 MHz operation is located in
the high byte at address 0x01 of the signature area.
[/spoiler]

Смотрите второй абзац.

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:34
pasha71
Значит нужно даташит прошерстить,у меня справочник Ефстифеева,но там об калибровочных ячейках только то что я написал.Значит где то туплю

Отправлено спустя 2 минуты 30 секунд:
Точно ,что то есть,два байта,9,8 и 4,8 Вы об этом?

Отправлено спустя 31 секунду:
Это я так понимаю фьюзами а не програмно

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:36
benic
Был очень большой разброс, глюк c attiny45 вылечил TL866. Возможно после высоковольтного сброса.
Выяснилось не все фьюзы видно местами :D TL866 видит калибровочные тоже.
Где-то читал как то калибруется. Не помню где...

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:38
pasha71
А может действительно тут и нужно копать,завтра попробую.Спасибо))

Отправлено спустя 1 минуту 44 секунды:
[ref]benic[/ref] ну TL866 - это крутовато как то))

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:39
eugeneb
Нет, именно программно. Это не фьюзы.
Загляните ещё в мануал по avrdude - там перечислены все области
памяти AVR-ок. Вам нужна "calibration". Её можно прочитать дудкой.

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 22:48
benic
Название фьюз иногда отличны. Возможно это не твой случай. Я высоковольтным ее сначала приголубил.
Скорей всего USBasp не было ))

Программирование микроконтроллеров

Добавлено: 11 фев 2019, 23:02
pasha71
[ref]eugeneb[/ref], значит будем копать программно.)
[ref]benic[/ref], да Вы знаете программа то пустяковая,а практика не помешает.Тем более хотите верьте хотите нет,но ассемблер на мой взгляд более логичный что ли,вообщем пока в том в чем я нуждаюсь мне легче на ассемблере)

Программирование микроконтроллеров

Добавлено: 12 фев 2019, 06:04
eugeneb
Нашёл свой старый проект. Там была важна точность генератора. И в ЗИП надо было положить второй камень. Пришлось пронумеровать камни фломастером и компилировать код индивидуально под каждый камень. Вот кусок калибровочного кода (ATMega32):

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

int main(void) {
	// Калибровочный коэффициент на 8 МГц
	// See: $avrdude -p m32 -c dapa -U calibration:r:/dev/stdout:h
	OSCCAL = 0x9d;	 // это который запаян первый (№1)
	//	OSCCAL = 0x9e;	// это который запаян второй (№2)
Как вычислял коэффициенты не могу вспомнить - надо поискать по сети.

Программирование микроконтроллеров

Добавлено: 12 фев 2019, 07:22
benic
http://www.gaw.ru/html.cgi/adv/app/micr ... AVR053.htm
AVR053: Калибровка внутреннего RC-генератора

Отправлено спустя 27 минут 4 секунды:
pasha71 писал(а): 11 фев 2019, 21:05
......,он 10 секунд работает,2 минуты пауза (подача топлива на форсунку)
......,бывает до 3 ,4 секунд разлет....
3-4 секунды это в импульсе или в паузе?

Программирование микроконтроллеров

Добавлено: 12 фев 2019, 15:29
pasha71
[ref]benic[/ref], в паузе

Отправлено спустя 52 секунды:
[ref]eugeneb[/ref], Спасибо

Отправлено спустя 2 минуты 45 секунд:
Все получилось,всем спасибо.Убрал перебор ,и сделал все таки с помощью таймера.Так и проще и надежней.Спасибо еще раз.))