Infotex Мир Хобби
Hard&Soft => Радиолюбителю => Arduino UNO => Тема начата: Koshak от 12 Апреля 2015, 16:02:12
-
Вариант первый с использованием дисплея на MAX7219.
Диапазон перестройки 100KHz-40MHz.
Минимальный шаг 10Hz.
Шаг перестройки меняется нажатием на валкодер.
Прошивку льём через Xloader!
-
Вариант второй, используется дисплей ST7735.
Тактикотехнические характеристики аналогичны первому варианту.
Подключение AD9850 и валкодера берём с первого варианта.
Подключение дисплея:
LED > 3.3V
SCK > D13
SDA > D11
A0 > D7
RST > D6
CS > D5
GND > GND
VCC > 5V
-
Круто,молодец!!! :po:
-
А случайно нет скеча, так как не имеется ардуино мини! Есть только нано версия.
-
А случайно нет скеча, так как не имеется ардуино мини! Есть только нано версия.
Тут нет зависимости от платы :-) шейте нано.
Исходники обоих вариантов в аттаче.
-
Спасибо большое :$
-
Долго мучился с кодом под Мегу2560 и Ардуино нано, все компилируется дисплей 16*2 работает, шаг настройки меняется, кроме частоты т.е. энкодер не пашет, в тестовой программе все ок. Оказалось, что энкодер нужно жестко привязывать к ногам 2 и 3, я ставил на свое усмотрение вот и не работало.
-
Почитайте и станет всё ясно http://arduino.ru/Reference/AttachInterrupt
-
Здравствуйте ! Я в микроконтроллерах начинающий ,у меня стоит задача сделать перестраиваемый генератор синусоиды 0,1 ....3,5 МГц , но важно , чтобы на выходе синусоида прерывалась с частотой примерно 1000 Гц . Я заказал этот модуль с микросхемой ad9850 , Arduino uno у меня есть уже , осваиваю потихоньку , изучаю интеренет ,решил здесь поспрашивать .
Как этот модуль , с ad9850 , позволяет ли это делать ? Как в скетче этим управлять ?
Картинки , того , что мне бы хотелось получить , прикреплю.
-
AD9850 для установки частоты нужно где-то 8-10ms в итоге максимальная частота включения получится 80-100Гц.
Можно конечно уменьшить задержку но не знаю как она себя поведёт ???
Проще всего добиться этого эффекта можно даже не трогая АДэшку а сделать примитивный коммутатор на PIN диоде, и получать любые значения прерывания :-)
-
Спасибо за информацию , а как Вы порекомендуете сделать ?
-
Я ж писал с помощью PIN диода :-) Схемку могу набросать
-
Да , нарисуйте пожалуйста . Я посмотрел , PIN диоды на СВЧ в основном применяются ?
Здесь что то очень простое лучше применить .
-
У меня в голове крутится такая схема :-) должна работать.
-
Спасибо , попробую на макетке собрать .
-
В общем , приехал ко мне этот модуль , LCD keypad shield у меня был уже , и я собрал генератор во по такой схеме
http://mini-tech.com.ua/index.php?route=product/product&product_id=123
А модулятор я собрал на макетке , но использовал в качестве генератора 555 , сигнал с которой идет на коллектор кт940а , на базу идет с выхода dds , в цепи эмиттера резистор , с которого осциллографом я снял похожую , как мне нужно , картинку .
Но скетч мне не понравился совершенно - регулируется только самый старший разряд частоты и через 1 от него , а выбор разряда не получается - видимо у меня не совсем такой же кейпад шилд , как в примере . А как этот косяк поправить , я пока незнаю.
-
Да скетч вроде адекватно работает, проверял с такой платкой http://www.ebay.com/itm/1602-LCD-Board-Keypad-Shield-Blue-Backlight-For-Arduino-LCD-Duemilanove-Robot-/170928504704
Но удобней с валкодером всё таки :-)
-
Алексей , здравствуйте ! Подскажите по самой первой схеме , ко мне приехали эти индикаторы , но распиновка разъемов у меня
VCC
GND
DIN
CS
CLK
и справа
VCC
GND
DOUT
LODA
CLK
а плата у меня arduino nano , я так понял , индикатор по схеме подключен к ардуине
DIN-PD7
CLK-PD6
LODA-PD5
VCC-VCC
GND-GND
правильно?
-
Индикатор на MAX7219?
-
Да .
-
Если смотреть на индикатор. Подключать к контактам с левой стороны.
VCC-VCC 5v
GND-GND
DIN-D7
CLK-D6
CS-D5
-
Спасибо ! Пока правда , попробовать не получится , энкодер еще в пути где то :)
VCC у меня 6,5 в , для этих индикаторов это допустимо ?
-
Ну индикация и без энкодера должна завестись))
-
Да , работает :)
-
Отлично :$
-
Сегодня приехал наконец энкодер , и все заработало :) Алексей , огромное Вам спасибо !!!
У меня осталось несколько вопросов по схеме - я так понял , последний разряд - десятки герц , единицы герц не отображаются . Как поменять в скетче , чтобы отображались единицы герц ? Мне больше 4 мгц всеравно пока не актуально...
-
Добавил шаг 1Hz с выводом на дисплей. Резистор на схеме можно выкинуть, порт программно притянул к VCC.
Должно работать.
-
Алексей , здравствуйте ! С новым скетчем получается , что регулируется только шаг сотен герц , шаги при нажатии на энкодер не меняются .
Да , единицы герц он стал отображать , а где это в скетче указывается ? , мне интересно .
И попутно еще хотел спросить , у меня пока все эти компоненты запитаны от 6, 5 в , я так понимаю , для ардуины это нормально , там встроенный стабилизатор , а вот для платы ад9850 и лед дисплея , это нормально , или там надо 5в подавать ?
-
Вся схема целиком и полностью должна быть запитана от 5 В !!!
Отображение с точностью до 10 Hz в строке rx_disp = rx_disp/10;
-
Алексей , я подобрал другой бп , и в старом скетче вот эту строку поправил , ноль стер просто , и нормально все стало работать , меня все очень устраивает , спасибо :)
-
Коль пиши если что подправить ;) чем смогу помогу.
-
Алексей , здравствуйте ! Подскажите пожалуйста , как исключить из скетча шаг при нажатии на энкодер 1 мгц ? Он мне как бы не нужен вообще , а частоту постоянно переключаю в пределах сотен кгц , чтобы нажатий меньше было ?
-
Привет! Проверяй :-)
-
Привет ! Похоже , у меня с ардуиной проблемы - видимо даром не прошло , что по ошибке я ее не так в разъем вчера вставил . Скетчи теперь не записываются , выдает
Arduino: 1.6.8 (Windows 7), Плата:"Arduino Nano, ATmega328"
Скетч использует 5 652 байт (18%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 282 байт (13%) динамической памяти, оставляя 1 766 байт для локальных переменных. Максимум: 2 048 байт.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xc5
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xc5
Проблема загрузки в плату. Помощь по загрузке: http://www.arduino.cc/en/Guide/Troubleshooting#upload .
Старый скетч однако остался и работает :)
Это я уже второй генератор собираю , придется ардуин еще заказать .
Алексей , я использую самую первую версию , подскажите , где в ней этот шаг , который надо убрать ? Я сам попробую . Просто незнаю , как начать . Я попробовал позавчера , но смысла этого не очень понимаю , и у меня на индикаторе просто один разряд перестал светиться , пришлось вернуть как было .
-
Я проверил всё прекрасно заливается ;) Возможно проблемы с самой платой?
-
В коде меняется тут
void read_Step_Select() {
if(stp==8) //7
{
stp=1;
}
if(stp==0)
{
stp=7; //6
}
if(stp!=stp_old)
{
if (stp==1)
{
step1 = 1;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
}
else if (stp==2)
{
step1 = 10;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
lc.setChar(0,6,'0',false);
}
else if (stp==3)
{
step1 = 100;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
lc.setChar(0,6,'0',false);
lc.setChar(0,5,'0',false);
}
else if (stp==4)
{
step1 = 1000;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
lc.setChar(0,6,'0',false);
lc.setChar(0,5,'0',false);
lc.setChar(0,4,'0',false);
}
else if (stp==5)
{
step1 = 10000;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
lc.setChar(0,6,'0',false);
lc.setChar(0,5,'0',false);
lc.setChar(0,4,'0',false);
lc.setChar(0,3,'0',false);
}
else if (stp==6)
{
step1 = 100000;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
lc.setChar(0,6,'0',false);
lc.setChar(0,5,'0',false);
lc.setChar(0,4,'0',false);
lc.setChar(0,3,'0',false);
lc.setChar(0,2,'0',false);
}
else if (stp==7)
{
step1 = 1000000;
lc.clearDisplay(0);
lc.setChar(0,7,'1',false);
lc.setChar(0,6,'0',false);
lc.setChar(0,5,'0',false);
lc.setChar(0,4,'0',false);
lc.setChar(0,3,'0',false);
lc.setChar(0,2,'0',false);
lc.setChar(0,1,'0',false);
}
Нижний блок удалить, и поменять значения переменных я выделил цветом
-
Спасибо , попробую на днях . Да , с платой не впорядке , похоже микросхема , которая связывает атмегу с usb портом накрылась , тем не менее , сама ардуина работает , вот фотки почти готового блока , как оказалось , из оцинковки довольно легко можно сделать корпуса , если на предполагаемой линии сгиба просверлить отверстия каждые несколько сантиметров.
-
Неплохо :$ а для чего будет сей девайс?
-
Ответил в личку . Алексей , а вот такие ардуины в этой схеме можно использовать ?
http://samopal.pro/atmega328-arduino/
-
Да пойдёт, это минимальный обвес ардуины, я собирал подобное на чипе Mega168, но я правда постоянно беру ProMini, для моих самоделок самое то :$
-
Алексей, здравствуйте ! Подскажите пожалуйста , я вот сегодня посмотрел , что Atmega168 может быть дешевле , чем Atmega328 вот например
http://ru.aliexpress.com/item/ATMEGA8A-PU-ATMEGA8A-DIP-28-8-bit-with-8K-Bytes-In-System-Programmable-Flash/32571726133.html?spm=2114.30010708.3.2.NOiick&ws_ab_test=searchweb201556_10,searchweb201602_1_10048_10047_10049_10046_10045_10017_106_105_104_10060_103_10061_102_10062_412_10039_10057_10056_10037_10055_10059_10033_10058_10032_405_404,searchweb201603_6&btsid=3141e1dc-8f0b-4bca-8d8b-3a9a706b9052
Можно брать для этой схемы ?
Не посмотрел :) Вы же про них и писали в предыдущем сообщении .
-
Приветствую! По ссылке Mega8 маловато памяти у ней...
-
Лучше не связываться и купить 328 ?
-
Лучше не связываться и купить 328 ?
Ага памяти много не бывает)), возможно ещё пригодится для других проектов :po:
-
Ребята, подскажите, я совсем с контроллерами не сталкивался, но хочется попробовать. Можно ли с ардуино и вот этим генератором (или без него) решить следующую задачку:
нужен импульсный сигнал с длительностью импульса примерно 50-100 нс и частотой от 0 до 3кГц с шагом примерно 0,1Гц. При этом, чтобы можно было длительность импульса менять скажем в пределах 100-500 нс.
Мыслю так, раз тактовая частота ардуино uno 16 МГц, стало быть самый короткий импульс, какой можно получить 1\16 МГц, т.е. 62,5 нс, правильно? И теперь, если ардуиной управлять, то можно импульс пропустить (логическая единица), а затем нули, столько сколько надо для обеспечения нужной скважности. Нужен импульс пошире - две логические единицы и т.д..
-
Как я понял вам нужен генератор специальной формы, по сути ваша схема должна делится на два блока генератор импульсов и модулятор. Сама ADшка может синтезить довольно мелкий шаг при тактовой частоте 125MHz.
The AD9850’s innovative high speed DDS core provides
a 32-bit frequency tuning word, which results in an output
tuning resolution of 0.0291 Hz for a 125 MHz reference clock
input.
Я просто не углублялся в эти тонкости )))
-
С Ардуино Про Мини - все отлично работает. Спасибо огромное !!! С экраном ST7735
А вот с Ардуино Нано - замучился.
Никаким образом не хочет переключатся диапазор 1кгц,100кгц,1 мгц --- не переключатся вообще при нажатии на энкодор. Частота меняется скачками.
Если выставить как на скече -
Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.
//LedControl lc=LedControl(7,6,5,1);
const int buttonPin = 4;
То получается на Ардуино Нано - каша. Частоты с 10мгц при прокрутке энкодера могут скакать до 2мгц
Нажатие на кнопку энкодера - никакой реакции на смену диапазона. Диапазон частоты сами по себе живут - и сменяют друг друга сами по себе.
Если выставить:
Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.
//LedControl lc=LedControl(7,6,5,1);
const int buttonPin = 0;
То частота меняется плавно в обе стороны, а кнопка энкодера не меняет диапазон ни в какую.
Я новичек и по схеме не знаю куда еще подсоединить на Ардуино Нано провод от Энкодера чтобы при нажатии на кнопку энкодера менялся - переключался бы диапазон частот. Буду очень благодарен за подсказку.
-
Резисторы на валкодере имеются?
-
Да имеются. Спасибо, что отвечаете на мой вопрос, Только на Вас надежда.
Экран отлично светится =
Вариант второй, используется дисплей ST7735.
Тактикотехнические характеристики аналогичны первому варианту.
Подключение AD9850 и валкодера берём с первого варианта.
Подключение дисплея:
LED > 3.3V
SCK > D13
SDA > D11
A0 > D7
RST > D6
CS > D5
GND > GND
VCC > 5V
R1 10 kom = все как по схеме на фото в первом посте. Плюс валкодер этой же марки с сопротивлениями на плате.
-
A валкодер к какому напряжению притянут? 3,3в или 5в?
-
У меня вся схема питается только от +5 вольт
-
Я собрал по Вашей схеме по фото на Ардуино Про Мини только с экраном ST7735. Все отлично работает и частоты и диапазоны меняются = СУПЕР!
А вот с Ардуино Нано = у меня частоты танцуют скачками а диапазоны вообще не переключаются
-
А на портах ардуины 3,3 или 5 вольт?
-
+5 вольт Я +3,3вольта вообще не подключаю = на дисплее сзади стоит стабилизатор с 5 до 3 вольт
-
Ну а если кнопку валкодера повесить на D8?
В коде const int buttonPin = 8;
-
Это в этом месте поменять 4 на 8 и провод подключить к 8 ножке:?
В этом месте?
Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.
//LedControl lc=LedControl(7,6,5,1);
const int buttonPin = 8;
-
Ну да
-
Сейчас все перекину , залью измененый скеч с 8 пином и чуть попозже отпишусь.
-
Огромное спасибо!!! Все заработало в штатном режиме.!!! На 4pda вместо спасибо обычно плюсуют - сейчас посмотрю как на этом форуме можно выразить Вам свою благодарность за помощь и доброе отношение.
Удачи Вам!!!
-
У тебя скорее всего порт D4 "битый" поэтому и не работало :-)
-
Я только только начал этим заниматься - пока как в танке. - читаю и курю документацию. Думаю потихоньку вникну в это дело. В любом случае - примите мои благодарности!! Удачи Вам!!! Если не в напряг - возможно посоветоваться с Вами в дальнейшем?
-
Чем могу помогу ;)
-
Прошу помочь со скетчем.
Решил, на основе вашего скетча сделать синтезатор для трансивера со шкалой МАХ7219 и немного запутался.
Схему и скетч со своими доработками прилагаю. Не могу придумать как отключать не нужные реле при переключении диапазонов, как реализовать переключение верхней и нижней полосы. И ещё, не уверен что корректно запускаю стартовую частоту генератора.
Прошу Вас, помогите грамотно допилить скетч.
-
Приветствую! Ну хоть какая реакция реле при переключении?
-
Пока никакой. Платы с макетной доской едут из китая. До этого собирал синтезатор от Сергея 4z5ky.
http://ur5yfv.com.ua/index.php/stati/mikrokontrollery/133-sintezator-chastoty-na-modulyakh-arduino.html
Фото моей поделки здесь http://qrz-e.ru/forum/118-2921-2 Кстати, на этой же странице чуть ниже есть ссылка на ваш Панорамный SWR :-)
Синтезатор от 4z5ky прекрасно работает, но мне не нужны WARC диапазоны. И переключение хочу галетное а не кнопочное (Собираю клопика в корпусе от Эфира-М). В его конструкции нужен дешифратор диапазонов и нет исходников. Только НЕХ файлы. На просьбу дать исходники Сергей не ответил, да и пишет он на баскоме. По совести говоря, программист из меня никакой. Поэтому и обращаюсь за помощью. Если у вас есть что то подобное и уже готовое, то было бы вообще замечательно.
Вчера вечером почесал затылок и придумал как управлять реле при переключении диапазонов. Но до сих пор сомневаюсь в правильности конфигурирования и использования аналоговых выводов.
-
Надо на макете попробовать собрать))
А зачем в трансивер ставить синтез с таким индикатором? Куча помех из-за динамической индикации будет ???
-
В приемнике, для которого делал синтезатор от Сергея 4z5ky помех не обнаружил. Эти помехи проходят как правилор через цепи питания. Поэтому на каждый модуль у меня всегда отдельный стабилизатор (7805). Конкретно в этом прансивере синтезатор ещё и отдельным трансформатором питаться будет. Единственный минус - это щелчки во премя перестройки.
Читал, что щелчки устраняются программно, но как устраняются не написано.
Кстати, какой индикатор посоветуете для снижения помех?
-
Эти помехи проходят как правилор через цепи питания
Да в основном 99% из-за отсутствия ключей управления индикатором на выходе контроллера, поэтому жирные пульсации по цепям питания :-)
-
Здравствуйте ! Подскажите пожалуйста , хочу вместо энкодера KY-040 купить что то вроде
https://ru.aliexpress.com/item/2-EC11/32673684898.html?spm=2114.14010208.99999999.262.zkSFpX
или
https://ru.aliexpress.com/item/Original-Rotary-encoder-code-switch-EC11-audio-digital-potentiometer-with-switch-5Pin-handle-length-20mm-free/1669858125.html?spm=2114.14010208.99999999.270.zkSFpX
и впаять сразу на плату , мне кажется , так надежнее будет , чем шлейфом соединять , да и хлипкая какая то у KY-040 плата .
Какой лучше выбрать ? Или может , есть получше вариант ?
-
Да можно этот поставить, или оптический но он дорогой. 400 импульсов на оборот http://www.ebay.com/itm/Incremental-Optical-Rotary-Encoder-400-600-360P-R-A-B-Phase-5-24V-/172304673265
-
Собрал генератор
Все работает! Спасибо за схему и скетч!
-
Отлично :$
-
Поменял ардуино нано на мк Atmega328p , прошивал в ардуино уно с пом программатора , залил загрузчик , следом скетч .
-
Я ещё кину один вариант с более дешёвой DDS, может понравится :94:
-
Здравствуйте Алексей ! Да , это актуально , очень жду . Может быть , речь идет о подключении вот такого модуля на АД9833 ?
https://ru.aliexpress.com/item/1PC-New-Arrival-AD9833-AD9833BRMZ-CJMCU-9833-sine-wave-triangle-wave-square-wave-Module-Board/32818644829.html?ws_ab_test=searchweb0_0,searchweb201602_3_5570020_10152_10065_10151_10068_5490020_10307_10301_10137_10060_10155_10154_10056_10055_10054_5470020_10059_303_100031_10099_5460020_10338_10339_10103_10102_440_10169_10052_10053_10142_10107_10050_10051_5380020_10326_10084_10083_10080_10082_10081_10110_10111_10112_10113_10114_143_10312_10313_10314_5560020_10078_10079_10073_10125,searchweb201603_23,ppcSwitch_2&btsid=f8fe1b72-dc4d-45f4-b457-908ffdd141e4&algo_expid=66a6d7ec-7f1a-423a-be56-832a2171a838-25&algo_pvid=66a6d7ec-7f1a-423a-be56-832a2171a838
-
Да Николай, всё руки не доходят протестить :-)
-
Понравился этот проект http://www.vwlowen.co.uk/arduino/AD9833-waveform-generator/AD9833-waveform-generator.htm
Может попробуешь :xexe:
-
Скетч из поста (#62) не компелируется в загрузчике, есть у кого рабочий скетч под данную схему? Прошу выложить, тоже пытаюсь сделать диапазонный синтезатор. Вообще думал прописать входа цифровыми выходами здесь http://rfanat.ru/s24/sin_ad_9850_dds_vfo.html на каждый диапазон с выходов А1...А5 была логическая единица вот как допилить тот скетч тоже не знаю, может кто поможет. Т.е. суть такова например выставляешь частоту в предела диап. 40м и на входе А2 появляется лог. 1 включая соответствующий фильтр вывел частоту за пределы диапазона, на всех А1...А5 лог.0 и так далее до следующего диапазона. Всё управление одним энкодером
-
Нужно добавить проверку в код, а на выход повесить например дешифратор SN74LS145, можно будет сделать 10 поддиапазонов.
Надо попробовать сделать. :po:
-
Было бы круто. Так понимаю в скетч нужно будет добавлять как здесь http://greenoakst.blogspot.ru/2012/06/arduino_29.html . А вот как прописывать границы диапазона ?
-
Как по ссылке не обязательно делать, цифровых портов вроде хватает, разбитие по бэндам можно посмотреть например в коде от WSPR маяка.
-
А как это всё будет выглядеть? :sm: Схемотически, что то схему не встретил на AD9850. А как здесь в скетче http://rfanat.ru/s24/sin_ad_9850_dds_vfo.html задать команды на фильтра, плата вытравлена и уже работает, хотелось лишь управлять релюшками
-
В пикаде схемы смотреть можете?
-
Всё прописал в прошивке.
При попадании на диапазон выскакивает 1 на соответствующем выводе. Вот только на А6 и А7 почему то 1 не выскакивает может атмега такая, хотя гальванически контакты до самой микросхемы звонятся.
Работаем........... :D Скетч http://my-files.ru/65k5xa
Пикад пока не делал, стояла 10 снёс нафиг, поставил 7, а то драйвер не вставал, что только не делал, и отменял электронную подпись драйверов и т.д. ничего не помогало, как то так
-
Ну а если еще дешифратор добавить, то вообще будет песня :99:
-
Приатачил, можно посмотреть как используется дешифратор.
-
Что то не получается открыть у меня это расширение sch. :?! Может дадите ссылочку на установку проги.
-
Веювер пикада
-
Всё ОК. А самого скетча нету? :sm:
-
Тут только пример как подключается дешифратор к ардуине))) :94:
-
Конвертнул в pdf :xexe:
-
Благодарю, уже схемку посмотрел. А вот так по выделенным строчкам можно прописывать два выхода на один частотный интервал? Так то компиляция проходит без ошибок.
void sendFrequency(double frequency) {
//
if (rx <= 13550000 || rx >= 13900000) digitalWrite(A1,LOW); else digitalWrite(A1,HIGH);
if (rx <= 13550000 || rx >= 13900000) digitalWrite(A2,LOW); else digitalWrite(A2,HIGH);
if (rx <= 15000000 || rx >= 15850000) digitalWrite(A2,LOW); else digitalWrite(A2,HIGH);
if (rx <= 17440000 || rx >= 17910000) digitalWrite(A3,LOW); else digitalWrite(A3,HIGH);
if (rx <= 21440000 || rx >= 21870000) digitalWrite(A4,LOW); else digitalWrite(A4,HIGH);
if (rx <= 25600000 || rx >= 28800000) digitalWrite(A5,LOW); else digitalWrite(A5,HIGH);
-
Попробовал, залил скетч, ерунда получилась, задача не выполняется
-
Вот http://my-files.ru/7ylox9 , очередной скетч на 9 диапазонов с дешифратором СD4028, остаётся ещё пин. А5 если кому мало диапазонов можно задействовать. :D
-
Синтез на АД9833 , детали приехали
Собрал схему для АД9833 , сигнал на выходе есть , частота регулируется , треугольник , меандр и синус переключаются , но дисплей признаков жизни не подает .
Я купил не совсем ту модель , которая в схеме по ссылке .Я купил вот такую
https://ru.aliexpress.com/item/1-8-SPI-TFT-128-x-160-Pixels-Display-LCD-Module-Breakout-ST7735R-R179T-Drop-Shipping/32810524510.html?spm=a2g0s.9042311.0.0.yQLX7g
У нее 16 контактов, соединил
дисплей Атмега
mosi 17
sck 19
cs 24
a0 23
reset 25
Может , дело в библиотеках ?
Надо наверное мне отдельно с дисплеем поиграться , чтобы оживить .
Алексей , посоветуйте что нибудь :)
-
Николай сделай так, у него включено для QDTech он сам про это пишет
Use the ST7735 library if the display has an ST7735 controller chip or the QDTech library if the display uses the Samsung S6D02A1 chip.
#include <Adafruit_ST7735.h> // Hardware-specific library
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
// #include <Adafruit_QDTech.h> // Hardware-specific library
// Adafruit_QDTech tft = Adafruit_QDTech(cs, dc, rst);
-
Алексей , здравствуйте ! В общем сделал вот так , но не помогло
Склоняюсь к тому , чтобы купить другой дисплей . Но такой вот точно модели как у автора я на али не встретил .
/*
AD9833 Waveform Module vwlowen.co.uk
*/
#include <SPI.h>
#include <rotary.h> // Rotary encoder: https://github.com/brianlow/Rotary
#define dc A0 // Define pins for TFT display.
#define cs A1 //
#define rst A2
#include <Adafruit_GFX.h> // Core graphics library
// include Adafruit library OR QDTech library depending on the display's controller chip.
#include <Adafruit_ST7735.h> // Hardware-specific library
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
// https://github.com/zigwart/Adafruit_QDTech
#define BLACK 0x000 // Define the display colours we'll be using
#define BLUE 0x001F // so they're constants regardless of which
#define GREEN 0x07E0 // display library we use.
#define YELLOW 0xFFE0
#define GREY 0x632C
const int SINE = 0x2000; // Define AD9833's waveform register value.
const int SQUARE = 0x2028; // When we update the frequency, we need to
const int TRIANGLE = 0x2002; // define the waveform when we end writing.
int wave = 0;
int waveType = SINE;
int wavePin = 7;
int freqUpPin = 2; // Define rotary encoder pins.
int freqDownPin = 3;
int stepUpPin = 5;
int stepDownPin = 6;
const float refFreq = 25000000.0; // On-board crystal reference frequency
const int FSYNC = 10; // Standard SPI pins for the AD9833 waveform generator.
const int CLK = 13; // CLK and DATA pins are shared with the TFT display.
const int DATA = 11;
Rotary r = Rotary(freqUpPin, freqDownPin); // Rotary encoder for frequency connects to interrupt pins
Rotary i = Rotary(stepUpPin, stepDownPin); // Rotart encoder for setting increment.
unsigned long freq = 1000; // Set initial frequency.
unsigned long freqOld = freq;
unsigned long incr = 1;
unsigned long oldIncr = 1;
void setup() {
pinMode(freqUpPin, INPUT_PULLUP); // Set pins for rotary encoders as INPUTS and enable
pinMode(freqDownPin, INPUT_PULLUP); // internal pullup resistors.
pinMode(stepUpPin, INPUT_PULLUP);
pinMode(stepDownPin, INPUT_PULLUP);
pinMode(wavePin, INPUT_PULLUP);
// Can't set SPI MODE here because the display and the AD9833 use different MODES.
SPI.begin();
delay(50);
// Initialize either Adafruit OR QDTech display
//QDTech display
// tft.init();
// Adafruit ;display
;tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.setRotation(3);
tft.setTextWrap(false); // Allow text to run off right edge
tft.fillScreen(BLACK);
tft.drawFastVLine(20, tft.height()-55, 4, GREY); // Display 'static' cosmetic text.
tft.drawFastVLine(40, tft.height()-55, 4, GREY);
tft.drawFastVLine(47, tft.height()-55, 4, GREY);
tft.drawFastVLine(88, tft.height()-55, 4, GREY);
tft.drawFastVLine(95, tft.height()-55, 4, GREY);
tft.drawFastVLine(134, tft.height()-55, 4, GREY);
tft.drawFastHLine(20, tft.height()-52, 20, GREY);
tft.drawFastHLine(47, tft.height()-52, 42, GREY);
tft.drawFastHLine(95, tft.height()-52, 40, GREY);
tft.setTextColor(GREY);
tft.setCursor(23, tft.height()-48);
tft.print("MHz kHz Hz");
tft.setCursor(15, tft.height() -20);
tft.setTextSize(1);
tft.drawFastHLine(0, tft.height() - 23, tft.width()-10, BLUE);
tft.setTextColor(BLUE);
tft.println("AD9850 10 Hz to 5 MHz ");
tft.print(" waveform generator");
// Configure interrupt for rotary encoder and enable.
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
AD9833reset(); // Reset AD9833 module after power-up.
delay(50);
AD9833setFrequency(freq, SINE); // Set the frequency and Sine Wave output
updateDisplay();
}
void updateDisplay() {
// To complicate things, the display uses SPI MODE0 but the AD9833 uses SPI MODE3 so it's
// necessary to switch modes before each SPI transfer.
SPI.setDataMode(SPI_MODE0);
tft.fillRect(50, 10, 100, 12, BLACK); // Clear text.
tft.setTextColor(YELLOW);
tft.setCursor(55, 10);
tft.setTextSize(1);
switch (waveType) {
case SINE: tft.print(" sine"); break;
case SQUARE: tft.print(" square"); break;
case TRIANGLE: tft.print("triangle"); break;
}
tft.fillRect(25, 50, 140, 14, BLACK); // Clear frequency numerals.
tft.setTextColor(GREEN);
tft.setTextSize(2);
tft.setCursor(25, 50);
format(freq); // Show frequency in formatted form.
}
void format(unsigned long value) {
// Break the frequency value down into individual digits & into variable 'digit'.
// If a digit corresponds with the currently-selected x10 increment, change the
// text colour to YELLOW. All other digits and commas are GREEN.
unsigned long j = 1000000;
for (int i=6; i>=0; i--) {
int digit = (value / j) % 10;
incr == j ? tft.setTextColor(YELLOW): tft.setTextColor(GREEN);
tft.print(digit);
if ((i == 6) || (i == 3)) { // Add commas at millions and thousands
tft.setTextColor(GREEN);
tft.print(",");
}
j /= 10;
}
}
void loop() {
if (oldIncr != incr) {
updateDisplay();
oldIncr= incr;
}
// Check 'increment' rotary encoder. Increase or decrease 'increment' by a factor of x10
// if encoder has been turned.
unsigned char result = i.process();
if (result) {
if (result == DIR_CW) {if (incr < 1000000) incr *= 10;}
if (result == DIR_CCW) {if (incr >= 10) incr /= 10;}
updateDisplay();
}
// Check if push button on 'increment' rotary encoder is pushed and set Wave Type accordingly.
if (digitalRead(wavePin) == LOW) {
wave += 1;
if (wave > 2) wave = 0;
switch (wave) {
case 0: waveType = SINE; break;
case 1: waveType = SQUARE; break;
case 2: waveType= TRIANGLE; break;
}
AD9833setFrequency(freq, waveType); // Set AD9833 to frequency and selected wave type.
updateDisplay();
delay(200);
}
if (freq != freqOld) { // If frequency has changed, interrupt rotary encoder
AD9833setFrequency(freq, waveType); // must have been turned so update AD9833 and display.
updateDisplay();
freqOld = freq; // Remember new frequency to avoid unwanted display
} // and AD9833 updates.
}
// AD9833 documentation advises a 'Reset' on first applying power.
void AD9833reset() {
WriteRegister(0x100); // Write '1' to AD9833 Control register bit D8.
delay(10);
}
// Set the frequency and waveform registers in the AD9833.
void AD9833setFrequency(long frequency, int Waveform) {
long FreqWord = (frequency * pow(2, 28)) / refFreq;
int MSB = (int)((FreqWord & 0xFFFC000) >> 14); //Only lower 14 bits are used for data
int LSB = (int)(FreqWord & 0x3FFF);
//Set control bits 15 ande 14 to 0 and 1, respectively, for frequency register 0
LSB |= 0x4000;
MSB |= 0x4000;
WriteRegister(0x2100);
WriteRegister(LSB); // Write lower 16 bits to AD9833 registers
WriteRegister(MSB); // Write upper 16 bits to AD9833 registers.
WriteRegister(0xC000); // Phase register
WriteRegister(Waveform); // Exit & Reset to SINE, SQUARE or TRIANGLE
}
void WriteRegister(int dat) {
// Display and AD9833 use different SPI MODES so it has to be set for the AD9833 here.
SPI.setDataMode(SPI_MODE2);
digitalWrite(FSYNC, LOW); // Set FSYNC low before writing to AD9833 registers
delayMicroseconds(10); // Give AD9833 time to get ready to receive data.
SPI.transfer(highByte(dat)); // Each AD9833 register is 32 bits wide and each 16
SPI.transfer(lowByte(dat)); // bits has to be transferred as 2 x 8-bit bytes.
digitalWrite(FSYNC, HIGH); //Write done. Set FSYNC high
}
// Interrupt service routine for the 'frequency' rotary encoder.
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result) {
if (result == DIR_CW) { // Clockwise rotation so add increment to frequency
if ((freq + incr) < 6000000) freq+=incr;
} else {
if (freq > incr) { // Counter-clockwise rotation so subtract increment
freq -= incr; // from frequency unless it would result in a negative
} else { // number.
if (freq >= 1) incr /= 10;
if (incr < 1) incr = 1; // Compensate for math rounding error.
}
}
}
}
-
Я купил не совсем ту модель , которая в схеме по ссылке .Я купил вот такую
...skip...
Может , дело в библиотеках ?
Надо наверное мне отдельно с дисплеем поиграться , чтобы оживить .
Алексей , посоветуйте что нибудь :)
Николай, так получилось у Вас запустить дисплей? Вы пробовали подключить через библиотеку Ucglib?
-
Не , пока задвинул до лучших времен :) , я на самом деле не слишком понимаю в этом , могу только рабочую конструкцию воспроизвести , да и то , с вопросами надоедаю :)
А что это за библиотека Ucglib?
-
А что это за библиотека Ucglib?
Графическая библиотека для разных дисплеев. Используется в некоторых вариантах генератора.
-
Доброго времени суток!
Как задействовать в этом скетче http://my-files.ru/w267zx индикатор МАХ7219 для отображения частоты, что то у меня ничего не выходит. Индикатор подключил так
-
Доброго времени суток!
Как задействовать в этом скетче http://my-files.ru/w267zx индикатор МАХ7219 для отображения частоты, что то у меня ничего не выходит. Индикатор подключил так
А какую собственно библиотеку для вывода информации на свой дисплей Вы используете?
-
Доброго времени суток!
Как задействовать в этом скетче http://my-files.ru/w267zx индикатор МАХ7219 для отображения частоты, что то у меня ничего не выходит. Индикатор подключил так
А какую собственно библиотеку для вывода информации на свой дисплей Вы используете?
Вот эту "LedControl.h"
-
Пины переназначил 5 и 6 , частота высвечивается, вот только надо запятую прописать и убрать последний ноль ( единицы герц) :sm:
-
Пины переназначил 5 и 6 , частота высвечивается, вот только надо запятую прописать и убрать последний ноль ( единицы герц) :sm:
В указанном Вами скетче вывод частоты на дисплей организован в функции showFreq(), в частности там попробуйте поиграться. Или может у Вас вывод по своему организован? Посмотрите на пример выложенный ув. Koshak в начале этой ветки форума, я думаю там все нужное для Вас есть.
-
Пины переназначил 5 и 6 , частота высвечивается, вот только надо запятую прописать и убрать последний ноль ( единицы герц) :sm:
В указанном Вами скетче вывод частоты на дисплей организован в функции showFreq(), в частности там попробуйте поиграться. Или может у Вас вывод по своему организован? Посмотрите на пример выложенный ув. Koshak в начале этой ветки форума, я думаю там все нужное для Вас есть.
Там скетч в hex расширении, так просто не посмотришь
-
Я думал Вы уже всё сделали :-)
-
Там скетч в hex расширении, так просто не посмотришь
Ну тогда смотрите как реализованно в указанной мною функции в Вашем скетче, строки 418-420
-
Я думал Вы уже всё сделали :-)
Да вот решил перенести на индикатор с большими цифрами и теперь небольшая проблемка
-
Всё разрулил, работает!!!!!!! Правда наверное раз 80-100 заливаний и 168-я сдохла, загрузка данных не идёт, заменил.... Благо чип большенький так заказал, придёт и заменю :104:
-
Всё разрулил, работает!!!!!!! Правда наверное раз 80-100 заливаний и 168-я сдохла, загрузка данных не идёт, заменил....
skip
А Вы перед заливкой прошивку не тестите например в Proteus ?
-
Да нет, надо будет научиться в этой проге работать,2-й месяц с ардуинкой занимаюсь, пока во многом темный лес :?!
-
Отличная программа, и можно залить прошивку в контроллер без проблем, есть конечно нюансы, но в целом хоть можно понять как взаимодействует код и контроллер.