[uquote="Martian",url="/forum/viewtopic.php?p=4607478#p4607478"]Посмотрел исходники. Для ардуинщика сойдёт.[/uquote]
Я не знаю что вы смотрели, но моя программа к Arduino IDE не имеет ни какого отношения.
И где вы нашли
слишком много delay(), потенциально бесконечные циклы
В основном цикле WatchDog и я считаю этого достаточно.
В программе каждую минуту в память записывается время и этап зарядки.
В случае перезапуска (или пропадания питания при появлении) агоритм зарядки продолжается с прерванного момента.
Хотя в I2C предусмотрена защита от зависания но тебе это не интересно главное найти пару delay() и обосрать программу
Предусмотрен за запуск функций с различными задержками, задержки сделаны с поиощью таймера.
Нужные функции вызываются через указатели в основном цикле, что упрощает структуру программы и ее размер и размер кода в обработчиках прерывания.
Это тоже ты не видешь, главное обосрать
Основной цикл. Вызов любой функции можно задать в любой функции спомощью простой конструкции
Flag_Prog |= (1UL << Tim1sek); Постановка в обработчике прерывания в очередь фукции которая должна выполнятся 1 раз в секунду.
Установка бита в Flag_Prog ставит функцию в очередь на выполнение.
А в основном цикле уже запускаются функции которые поставлены на выполнения и удаляются из очереди
Спойлер
//Основные функции (массив указателей на функции)
Fun[Out_usart_tek]=out_usart_tek;
Fun[In_usart]=in_usart;
Fun[Keybord]=keybord;
Fun[Load_24LC512]=load_24LC512;
Fun[Tim1sek]=tim1sek;
Fun[SET_PIN]=Set_Pin;
Fun[Err_CRC]=err_CRC;
Fun[Fan] =fan;
Fun[Save_24LC512]=null_Prog;//save_24LC512;
Fun[Reg_UI]=null_Prog;
Fun[Start_Reg_UI]=start_reg_UI;
Fun[Next_UIT]=null_Prog;
Fun[Vid_ZR]=null_Prog;
...
while (1)
{
wdt_reset();
task_cycle();
}
void task_cycle(void)
{
uint8_t i;
uint32_t sdvig;
if(Flag_Prog != 0 || Flag_Error != 0)
{
for(i=0, sdvig = 1UL; i < MAX_PROG; i++, sdvig <<= 1)
{
if(Flag_Prog == 0)break;
if(!(Flag_Prog & sdvig))continue;
Flag_Prog &= ~sdvig;//удалить из задания
Fun(); //выполнить функцию
}
}
}
595.с
И где здесь циклы ?
void send_LCD(uint8_t Data)
{
SPDR = Data;
while(!(SPSR & (1<<SPIF)));
//строб перезаписи в вых. регистры
PORT_SPI |= (1 << LCD_CP);
_delay_us(2);
PORT_SPI &= ~(1 << LCD_CP);
};
void byte_out(uint8_t value, uint8_t mode)
{
uint8_t lcd_data;
lcd_data = (value & 0xF0) | (mode << LCD_RS) | led_lcd ;
send_LCD(lcd_data);
lcd_data = (value << 4) | (mode << LCD_RS) | led_lcd ;
send_LCD(lcd_data);
_delay_us(40);
}
Вместо того чтобы понять общий принцип организации программы вы начали ловить блох в одном модуле.
Мне глубоко наплевать какие рекомендации в вашей фирме (задержки, циклы) зарядное устройство работает четко.
Можете назвать хоть одно известное устройство которое выпускает ваша фирма.
А теперь прошу пример идеального алгоритма который позволяет тебе трясти яйцами.
Добавлено after 1 hour 10 minutes 30 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4607470#p4607470"]Но главное: кнопки с резистивным делителем. Как и решение плохое, так и выбор значений резисторов. Ложные срабатывания гарантированы. Притом, что на 595-ом регистре есть как раз свободные выходы, чего было их не задействовать?[/uquote]
Ложные срабатывания гарантированы.
Работает нормально без ложного срабатывания.
И кем гарантировно?
Если бы было десяток кнопок то разница напряжений при вкючении была бы небольшая, для 5 кнопок 200 квантов.
Вы в своей схеме можете задействовать 595 регистр как хотите, а у меня он установлен на дисплее и в дугом варианте ЗУ с дисплеем по I2C его нет.
Добавлено after 11 minutes 49 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4607470#p4607470"][uquote="kvn234",url="/forum/viewtopic.php?p=4602323#p4602323"]Даже модуль управления A10 собран на простом микроконтроллере STM8 (даже не на STM32) и двухстрочным дисплеем.
STM8S105K4T6c это говорит об уровне разработки.
Даже памяти 16к, а не 32к

[/uquote]

ну, пойду, уволюсь - в нашей компании работают с 8-битными с 8 кБ...[/uquote]
Я не знаю что делает ваша фирма (может кашачьи туалеты, тоже полезная вещь), но для такого отвественного устройства, как ЗУ, можно было бы поставить что то посолиднее STM8 с большими возможностями (и учетом последующего развития), например STM32.
Я думаю что ваша крутая фирма на STM8 выпускает что то типа счетчиков воды или что то подобное
Поэтому ты здесь трясеш яйцами
