avr

May 14, 2020 10:14

Понимаю, что руки (ардуинолифт же как то у всех работает?:)), но как же хорошо что мимо меня минуло 8051 и AVR... не моё)
Не спешно идёт отладка UPS, "всё работает но есть ньюанс (с)", при переключении на батареи иногда срабатывает защита. Это норма:) т.к. нужно зарядить 4.7мкф фильтра на холодную. Несколько периодов ШИМ отрубает/укорачивает да или кто там разберёт по перегрузке по току (эта фича). На скорую руку поставил at90s2313 (помнит кто такое? а мне вот подарили:)) для переключения диапазон амперметра и заодно завёл туда немного телеметрии. Раз есть RS232 - чего пропадать) Кстати по этой причине в тч и не поставил stm32, т.к. там ADC и проект бы не закончился никогда).
Всё работало. Немного обломался что аппаратное прерывание в 2313 только по спаду или фронту, но не оба. Но т.к. на входе внешнего прерывания уже стояло 4 элемента исключающего ИЛИ (который благоразумно купил перед самым началом карантина) для объединение неск линий. То дописал программно-аппаратно инвертирование одного входаз. Уже тут стал немного жалеть, что не поставил stm32:) Но все работало до момента пока не добавил описание переменных в телеметрию и оно ожидаемо сломалось. Строки размещались в RAM, а её всего 128 байт, avr-gcc кстати промолчал на смотря на -mmcu=at90s2313 (не знаю,а должен был ругаться?) Погуглил про кривую гарвардскую ахритектуру, дописал:

#include "avr/pgmspace.h"
static const char s_prefix[] PROGMEM =
{
[C_PEAKS_PLUS] = '+',
[C_PEAKS_MINUS] = '-',
[C_CUR_OVR] = '=',
};
*s = pgm_read_byte(s_prefix[n_var]); ну в общем оно так и не заработало, в asm лезть лень... смотрю так

avr, литбр

Previous post Next post
Up