Работа с SPI (генератор AD9833)
- Войдите на сайт для отправки комментариев
Ср, 22/04/2020 - 23:41
Добрый день. Подскажите как разобраться в связке arduino - ad9833
Как передовать нужные биты, какой код при этом должен быть.
Из интерфейса 6 кнопок которыми нужно менять настройки модуля AD9833 (отображается на дисплее lcd 16x2)
Стартовый скетч для проверки модуля был отсюда https://tsibrov.blogspot.com/2018/06/ad9833.html
#include <SPI.h>
void setup() {
SPI.begin();
WriteAD9833(0x2100); //0010 0001 0000 0000 - Reset + DB28
WriteAD9833(0x50C7); //0101 0000 1100 0111 - Freq0 LSB (4295)
WriteAD9833(0x4000); //0100 0000 0000 0000 - Freq0 MSB (0)
WriteAD9833(0xC000); //1100 0000 0000 0000 - Phase0 (0)
WriteAD9833(0x2000); //0010 0000 0000 0000 - Exit Reset
}
void WriteAD9833(uint16_t Data){
SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV2, MSBFIRST, SPI_MODE2));
digitalWrite(SS, LOW);
delayMicroseconds(1);
SPI.transfer16(Data);
digitalWrite(SS, HIGH);
SPI.endTransaction();
}
void loop() {
WriteAD9833(0x2000); //0010 0000 0000 0000 - Синусоидальный сигнал
delay(5000);
WriteAD9833(0x2002); //0010 0000 0000 0010 - MODE=1 - Треугольный
delay(5000);
WriteAD9833(0x2020); //0010 0000 0010 0000 - OPBITEN=1 - Прямоугольный (MSB/2)
delay(5000);
WriteAD9833(0x2028); //0010 0000 0010 1000 - OPBITEN=1, DIV2=1 - Прямоугольный (MSB)
delay(5000);
}
Какую литературу почитать или статьи для новичка
Даташит на свой модуль читай
Мы имеем 16 бит. 3-тий и 8-ой биты устанавливаем как 1. (что содержит данная комбинация бит пока не будем рассматривать)
WriteAD9833(0x2100); //0010 0001 0000 0000
Вызываем функцию WriteAD9833( ) и передаем ей значение 0x2100
Так вот как фраза 0010 0001 0000 0000 превращается в 0x2100 ?
smd разные основания счисления
smd разные основания счисления
0010 0001 0000 0000 двоичная ?
0x2100 шестнадцатеричная ?
3-тий и 8-ой биты устанавливаем как 1.
//0010 0001 0000 0000
Цифры в числах считаются справа.
0x - используется для обозначения системы исчисления ?
при переводе 0010000100000000 двоичной системы в шестнадцатиричную получается 2100
Короче начинать надо с учебника по информатике, потом учебник по программированию, а потом уже и до даташитов руки дойдут.
при переводе 0010000100000000 двоичной системы в шестнадцатиричную получается 2100
это ОЧЕВИДНО !!!
Короче начинать надо с учебника по информатике, потом учебник по программированию, а потом уже и до даташитов руки дойдут.
На какие стоит обратить внимание ?
Так все же означает 0х перед 16ричным числом ?
Нужно же с какого то даташина начинать изучение.
Так все же означает 0х перед 16ричным числом ?
Нужно же с какого то даташина начинать изучение.
0x и означает 16-тиричное число.
Найди и прочитай Кернигана и Ритчи, 80% таких вопросов сами собой отвалятся, как хвост у ящерецы.
А до "даташынов" тебе еще как до Китаю раком.
Найди и прочитай Кернигана и Ритчи, 80% таких вопросов сами собой отвалятся, как хвост у ящерецы.
А до "даташынов" тебе еще как до Китаю раком.
Полностью согласен.
С чего по проще начать знакомство с SPI ?
скачай Саймон Монк, "Программируем Ардуино", скачай на телефон/планшет, читай в сортире вместо дезодоранта. Многое почерпнешь с самых основ.
Полностью согласен, но делать не буду
Полностью согласен, но делать не буду
Можно ведь совмещать чтение с практикой. Тем более книга на 2-3 дня чтения
Давайте писать по теме.
Покуда у тебя знаний столько, сколько счас - пиши, не пиши, - толку не будет
Давайте писать по теме.
а мы разве "по теме" не закончили?
Давайте если возможно конкретно по вопросам.
WriteAD9833(0x2100); //0010 0001 0000 0000 - Reset + DB28после этого можем установить частоты передав 2 16-битных слова Сначала в младший регистр, затем в старший.
WriteAD9833(0x50C7); //0101 0000 1100 0111 - Freq0 LSB (4295) WriteAD9833(0x4000); //0100 0000 0000 0000 - Freq0 MSB (0)если к примеру частота 10кгц то будет 0110 0111 0001 0000
WriteAD9833(B0110 0111 0001 0000); WriteAD9833(B0100 0000 0000 0000);И далее снимает reset
WriteAD9833(B0010 0000 0000 0000); //0010 0000 0000 0000 - Exit ResetДавайте если возможно конкретно по вопросам. Понятно что специально изучать даташит мало кто то будет, но все же.
Сброс регистра управления.
WriteAD9833(0x2100); //0010 0001 0000 0000 - Reset + DB28после этого можем установить частоты передав 2 16-битных слова Сначала в младший регистр, затем в старший.
WriteAD9833(0x50C7); //0101 0000 1100 0111 - Freq0 LSB (4295) WriteAD9833(0x4000); //0100 0000 0000 0000 - Freq0 MSB (0)если к примеру частота 10кгц то будет 0110 0111 0001 0000
WriteAD9833(B0110 0111 0001 0000); WriteAD9833(B0100 0000 0000 0000);И далее снимает reset
WriteAD9833(B0010 0000 0000 0000); //0010 0000 0000 0000 - Exit Resetи в чем вопрос?
и в чем вопрос?
Правильно я понимаю или нет
если к примеру частота 10кгц то будет 0110 0111 0001 0000
WriteAD9833(B0110 0111 0001 0000); WriteAD9833(B0100 0000 0000 0000);вот это значение как считали?
10000 в десятичной это 10 0111 0001 0000 в двоичной
дописывает слева 01 до 16 символов и получаем
0110 0111 0001 0000 или В 0110 0111 0001 0000
Так как число помещается в младший регистр то в старший идут нули. но слева остается 01
10000 в десятичной это 10 0111 0001 0000 в двоичной
вы статью по своей собственной ссылке из первого сообщения читали? - В регистр синтезатора грузится вовсе не частота в явном виде, а некое значение. рассчитанное из этой частоы. В статье приведена формула. как это значение рассчитать. Например, чтобы запустить генератор на частоте 400 Гц. в его регистр загружают вовсе не 400, а число 4295
точно, выпустил из вида.
Применя формулу нужно передать число 1 1010 0011 0110 1110 тогда разбивая по регистрам что получится ?
1010 0011 0110 1110 и 0000 0000 0000 0001 ?
В примере
WriteAD9833(0x50C7); //0101 0000 1100 0111 - Freq0 LSB (4295) WriteAD9833(0x4000); //0100 0000 0000 0000 - Freq0 MSB (0)В MSB передают 0100 0000 0000 0000
что означает 1-ка если 4295 уместилось в младший регистр ?
В примере
WriteAD9833(0x50C7); //0101 0000 1100 0111 - Freq0 LSB (4295) WriteAD9833(0x4000); //0100 0000 0000 0000 - Freq0 MSB (0)В MSB передают 0100 0000 0000 0000
что означает 1-ка если 4295 уместилось в младший регистр ?
и опять ответ есть в статье