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

Здесь можно поболтать на отвлечённые темы. Реклама не допускается.
Ответить
pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#1

Сообщение pasha71 » 11.02.2019{, 20:54}

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

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

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

#2

Сообщение Ingwar » 11.02.2019{, 21:00}

Если это просто камни (не ардуино), то возможно фьюзы разные. Причем на одинаковых кварцах. Особенно если делитель на 8 включен.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#3

Сообщение pasha71 » 11.02.2019{, 21:05}

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

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

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

#4

Сообщение Ingwar » 11.02.2019{, 21:55}

Ты не одинок...) Причины разные. И если от внутреннего, то там разброс вроде +/-10% допустим.
http://arduino.ru/forum/apparatnye-vopr ... generatora
https://electronix.ru/forum/index.php?a ... 123&page=2
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#5

Сообщение pasha71 » 11.02.2019{, 22:03}

Так в том то и дело что к 13 не прилепишь кварц,не предназначен он для кварца.Ей Боже психану и перепру на 85,может полегчает с кварцем то.

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

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

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#6

Сообщение eugeneb » 11.02.2019{, 22:16}

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

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#7

Сообщение pasha71 » 11.02.2019{, 22:22}

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

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#8

Сообщение eugeneb » 11.02.2019{, 22:26}

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

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#9

Сообщение pasha71 » 11.02.2019{, 22:27}

и пред делитель главной частоты я в самом начале обнуляю,что бы не мешал.Именно программно обнуляю

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#10

Сообщение eugeneb » 11.02.2019{, 22:27}

Я только не помню в 13-й байтов один или два.

Отправлено спустя 3 минуты 7 секунд:
Вот, заглянул в описалово:
СпойлерПоказать
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.
Смотрите второй абзац.

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#11

Сообщение pasha71 » 11.02.2019{, 22:31}

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

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

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

Аватара пользователя
benic
Сержант
Сообщения: 175
Зарегистрирован: 07.01.2018{, 13:47}
Репутация: 4

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

#12

Сообщение benic » 11.02.2019{, 22:36}

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

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#13

Сообщение pasha71 » 11.02.2019{, 22:36}

А может действительно тут и нужно копать,завтра попробую.Спасибо))

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

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#14

Сообщение eugeneb » 11.02.2019{, 22:39}

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

Аватара пользователя
benic
Сержант
Сообщения: 175
Зарегистрирован: 07.01.2018{, 13:47}
Репутация: 4

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

#15

Сообщение benic » 11.02.2019{, 22:48}

Название фьюз иногда отличны. Возможно это не твой случай. Я высоковольтным ее сначала приголубил.
Скорей всего USBasp не было ))
Последний раз редактировалось benic 11.02.2019{, 23:15}, всего редактировалось 1 раз.

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#16

Сообщение pasha71 » 11.02.2019{, 23:02}

eugeneb, значит будем копать программно.)
benic, да Вы знаете программа то пустяковая,а практика не помешает.Тем более хотите верьте хотите нет,но ассемблер на мой взгляд более логичный что ли,вообщем пока в том в чем я нуждаюсь мне легче на ассемблере)

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#17

Сообщение eugeneb » 12.02.2019{, 06:04}

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

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

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

Аватара пользователя
benic
Сержант
Сообщения: 175
Зарегистрирован: 07.01.2018{, 13:47}
Репутация: 4

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

#18

Сообщение benic » 12.02.2019{, 06:55}

http://www.gaw.ru/html.cgi/adv/app/micr ... AVR053.htm
AVR053: Калибровка внутреннего RC-генератора

Отправлено спустя 27 минут 4 секунды:
pasha71 писал(а):
11.02.2019{, 21:05}

......,он 10 секунд работает,2 минуты пауза (подача топлива на форсунку)
......,бывает до 3 ,4 секунд разлет....
3-4 секунды это в импульсе или в паузе?

pasha71
Лейтенант
Сообщения: 454
Зарегистрирован: 26.08.2017{, 23:44}
Репутация: 34

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

#19

Сообщение pasha71 » 12.02.2019{, 15:25}

benic, в паузе

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

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

Ответить

Вернуться в «Просто поболтать (На свободную тему)»