Программирование более-менее освоил. Всё работает, но программа крайне бездарна. Такое не могу предлагать и показывать. Поскольку проект постепенно приобрёл коммерческий окрас (это не относится к форуму), попросту нанял программиста, который сделает всё, что нужно. Если я сам буду продолжать постигать тонкости программирования, развитие того, что умею, будет буксовать. Труд человека, которому плачу зарплату, не могу опубликовать здесь. Надеюсь, меня поймут.
Предлагаю альтернативное решение... - сделать программу общими усилиями, которую сможет использовать любой, желающий. Меня одного на всё не хватит!!!
Делаю первый шаг - пишу задание для программирования:
Попытаюсь описать задачу...
Если коротко, то нужно измерять напряжение и ток, выставлять напряжение и ток, выводить значения на дисплей 16x4, управлять всем этим с помощью энкодера и 2-мя кнопками.
Теперь подробно:
Измеряем напряжения с помощью 12-ти битного АЦП MCP3208 на двух её входах. На одной ноге напряжение может быть в пределах 0...5В, что соответствует фактическому напряжению 0...50В. Тут нужна переменная, меняя в программе (в коде) которую, можно изменить отображаемое на дисплее, максимальное напряжение. Оно может быть, например, 0...70В. На другой ноге напряжение может быть тоже, от 0 до 5В. Это напряжение отражает ток. При чём фактический ток может быть от -30А до 30А. Или другие, максимальные значения. Здесь тоже нужна переменная, в которую можно вбить максимальные значения тока. Напряжению 2.5В соответствует ток 0А. Напряжению 0В соответствует ток -30А. Напряжению 5В соответствует ток 30А. Пока будем измерять и отображать ток в пределах 0...30А. Отрицательные значения понадобятся в будущем.
Задаём напряжения с помощью 12-ти битного ЦАП MCP4922. Здесь всё тоже самое, только наоборот. На одной ноге нужно задавать напряжение 0...5В, на другой, 2.5...5В.
Поскольку у нас есть 4096 значений, напряжение должно выставляться и отображаться с шагом 0.02В. Итого, 2500 значений. Для тока тоже, точность установки и отображения будет 0.02А.Одна кнопка переключает управление током, либо напряжением. Второй кнопкой переключаем режим. Т.е., в одном состоянии, мы выставляем напряжение и ток, но на выходе БП значения не меняются. В другом состоянии, установленные значения одновременно устанавливаются на выходе БП. Вращением энкодера меняем устанавливаемые значения. При чём при быстром вращении, меняются целые значения, при медленном, сотые и десятые.
На первой строчке дисплея отображаются установленные напряжение и ток. На второй строчке отображается установленная мощность. На третей строчке отображаются фактические, измеренные напряжение и ток. На четвёртой строчке отображается фактическая, отдаваемая мощность. Частота отображения примерно 2 раза в секунду.
St 33.32V 12.02A
Set Pwr 400.51W
Ot 33.32V 12.02A
Out Pwr 400.51W
Устанавливаемое значение нужно как то выделить. Пока не придумал, как. Тоже касается и режима. Его нужно как то обозначить. Думаю, для этих целей можно использовать светодиоды.
Использую МК ATmega88PA.
Вот рабочий код управления ЦАП:
//////////////////// Управление MCP4922/////////////////
Ap1=58; // 48...63
Ap2=255; // 0...255
PORTB.2=0;
// Запись в "A"
SPI_MasterTransmit(Ap1);
SPI_MasterTransmit(Ap2);
PORTB.2=1;
Bp1=186; // 176...191
Bp2=255; // 0...255
PORTB.2=0;
// Запись в "B"
SPI_MasterTransmit (Bp1);
SPI_MasterTransmit(Bp2);
PORTB.2=1;