Сообщение от
Integral
И во время настройки будут гулять не хилые ВЧ токи по проводам, я больше за компьютер боюсь, чем за контроллер.
Вот и у меня сомнения. У некоторых, при настройке УМ клавиатура отключалась и указатель мышки начинал судорожно бегать по экрану. Вроде лечилось ферритовыми колечками на проводах USB. Но это не точно. Сам с такими мощностями не баловался. Единственный случай, который могу вспомнить из своей практики, был на коллективке. Там стоял УМ от Р-140 (тогда их было даже 2). К трансиверу, не помню модель точно (японец), был подключен самодельный телеграфный ключ из двухстороннего стеклотекстолита (дрыга, весло, или paddle). При настройке УМ, трансивер сомопроизвольно переходил на передачу. Бомбил в эфир точками (или тире). Помогли блокировочные конденсаторы на контактах ключа и колечко на проводе от ключа до трансивера.
Неисповедимы пути ВЧ-токов.
Сообщение от
Integral
Там есть кусок кода
Вместо оператора присваивания просится битовый сдвиг. Потом легче будет в сдвиговые регистры данные отправлять. Вечером до домашнего компа доберусь и процедуру переключения диапазонов скапипащу из другого своего проекта. Нашёл в облаке. Если поставить 2 регистра НС595, то можно помимо 10 диапазонов ещё и 6 нагрузками управлять. При этом используется всего 3 порта контроллера. Схему накидал. В архиве .spl файл. Позже исправлю остальную часть (датчик тока, кнопка и пр.)
Код:
#define CLK 13 // SPI_CLK
#define MISO 12 // SPI_MISO (можно не назначать, если использовать выводы регистра только на выход)
#define MOSI 11 // SPI_MOSI
#define CS0 10 // SPI_CS0
...
uint16_t data_hc;
uint16_t band_data;
...
data_hc &= 0xFE00; // очищаем данные о предыдущем диапазоне
switch (frq_get){ //
case 17 ... 30: band_data = 1 << 0; break; // получаем диапазон для переключения 160м(1)
case 31 ... 50: band_data = 1 << 1; break; // получаем диапазон для переключения 80м (2)
case 51 ... 80: band_data = 1 << 2; break; // получаем диапазон для переключения 40м (3)
case 81 ... 120: band_data = 1 << 3; break; // получаем диапазон для переключения 30м (4)
case 121 ... 160: band_data = 1 << 4; break; // получаем диапазон для переключения 20м (5)
case 161 ... 190: band_data = 1 << 5; break; // получаем диапазон для переключения 17м (6)
case 191 ... 230: band_data = 1 << 6; break; // получаем диапазон для переключения 15м (7)
case 231 ... 260: band_data = 1 << 7; break; // получаем диапазон для переключения 12м (8)
case 261 ... 300: band_data = 1 << 8; break;} // получаем диапазон для переключения 10м (9)
data_hc |= band_data; // присваиваем новое значение диапазона
...
data_to_reg(data_hc); // передаем данные в сдвиговый регистр
...
void data_to_reg(uint16_t dataRegister) {
uint8_t bytereg;
bytereg = dataRegister >> 8;
digitalWrite(CS0, LOW);
shiftOut(MOSI, CLK, MSBFIRST, bytereg);
bytereg = dataRegister & 255;
shiftOut(MOSI, CLK, MSBFIRST, bytereg);
digitalWrite(CS0, HIGH);
}
P.S. Для наглядной работы с битами использую программу CalcBits. Поддерживает стандартные битовые (и не только) СИ-шные операции с числами. Спасибо автору! Программа гуглится по названию.