Создание блока ЦАП R-2R (DAC R-2R) на Arduino UNO, NANO
Други, Вы о какой платформе сейчас спрашиваете/отвечаете?
Попробую теоретически развить эту интересную идею с разрешения Уважаемого AVGN. Наверное можно до скольких угодно, пока не закончатся резисторы и сдвиговые регистры, пересчитав токи (резисторного делителя) и научив програмно Ардуинку управлять сборкой
Нет.
А это к чему?
Ну да, конечно, вообще pinMode(); digitalWrite(); shiftOut(); delay() - "разработаны для высокого быстродействия". Друзья- это же платформа Ардуино, или как говорят "гуру"- функции с проверками на дурака (извините цитата). У нас-же "контруктор Лего" с кубиками-чёрными ящиками в виде пользовательских блоков. Зачем кубики курочить? Кому понятен Си и необходимо быстродействие издеваются над т.н. Ардуинщиками. А те кто спрашивает, что такое переменная, или кто всю жизнь варганил на реле конструкции, нашли этот способ складывая кубики решать задачи и удовлетворены такой скоростью. Каждому - своё. Подумал, может кто-то захочет таким способом регулировать уровень звука в усилителях- типа цифрового потенциометра. Я не читаю темы на форуме, которые мне не интересны и откуда мне знать что эта- продолжение другой про БП? Ниже скетч АрдуиноИДЕ для схемы на сдвиговых регистрах из выше. Будет кому-то нужно- засовывайте в блок (с костылями для переменной word ). В Ардуино не заливал, схему не паял, работоспособность не гарантирую- концепт вариант. Резисторы делителя, по нагрузочной способности выходов НС595, не рассчитывал, схему поправил.
Расточительно. Народ хотит экономитьSancho писал(а): ↑28.02.2019{, 14:18}Исходя из того, что данный блок был сделан Вами в контексте идеи из темы о блоке питания, могу Вам сказать, что я бы использовал внешние ЦАПы, так как мне их потребовалось бы два. Для тока и напряжения. А поддержание заданных значений я переложил бы на внешний аналог. И совсем бы не думал о быстродействии схемы.
Сопротивления рассчитывать и не надо.
Возможно, так:
setup ()
{
DDRD = 0xFF; // все выход
DDRC = DDRC | 0x03; // 0 и 1 выход
}
loop ()
{
PORTD = a & 0xFF; // здесь младшие
PORTC &= (a>>8 | 0xFC); // грузим только в два младших бита старшие входного
а++;
}
Получим 0, и далее до 1023...
Код: Выделить всё
setup ()
{
DDRD = 0xFF; // все выход
//DDRC = DDRC | 0x03; // 0 и 1 выход
DDRC = DDRC | 0x0C; //устанавливаем цифровые выводы PC2 и PC3 в качестве выходов
}
loop ()
{
PORTD = a & 0xFF; // здесь младшие
PORTC &= (a>>8 | 0xFC); // грузим только в два младших бита старшие входного
а++;
}
Код: Выделить всё
// PORTC &= (a>>8 | 0xFC); меняем на
PORTC &= (a>>6 | 0xF3);