SPI и Тюнер Fm
- Войдите на сайт для отправки комментариев
Втр, 23/08/2016 - 20:10
Прошу совета.
Нужно управлять микросхемой синтезатора частот Тюнера. согласно даташиту структура передачи данных:
8 бит выбор адреса, после чего сигнал SS (выборки) выставляется в "1" для передачи даных, а сигнал синхронизации 1 такт остается в "1",
после чего передается 40 бит данных.
это возможно сделать, используя стандартную библиотеку?
меня хватило только на это, но по осцилографу нет сигнала синхронизации. :(
#include <SPI.h> // кнопки управления #define keyUP 6 #define keyDOUN 5 #define keyPL 4 int frequlow = 128; int frequhigt = 128; void setup() { SPI.begin(); pinMode(7, OUTPUT); //пин для выборки с задержкой между адресом и даными SPI.setDataMode(3); // Initializes TB2118F chip //first 40 bytes of the chip digitalWrite(7,LOW); digitalWrite(SS,LOW); shiftOut(MOSI, SCK, MSBFIRST, 0x03); //адрес инициализации digitalWrite(7,HIGH); // выборка shiftOut(MOSI, SCK, LSBFIRST, frequlow); // 16 бит (младший байт) shiftOut(MOSI, SCK, LSBFIRST, frequhigt); // (старший байт) shiftOut(MOSI, SCK, MSBFIRST, 0x20); shiftOut(MOSI, SCK, MSBFIRST, 0x88); shiftOut(MOSI, SCK, MSBFIRST, 0x20); digitalWrite(SS,HIGH); digitalWrite(7,LOW); delay(100); } void loop() { // frequency change TB2118F chip //first 24 bytes of the chip digitalWrite(7,LOW); digitalWrite(SS,LOW); shiftOut(MISO, SCK, MSBFIRST, 0x01); digitalWrite(7,HIGH); shiftOut(MOSI, SCK, LSBFIRST, frequlow); shiftOut(MOSI, SCK, LSBFIRST, frequhigt); shiftOut(MOSI, SCK, MSBFIRST, 0x20); //shiftOut(MOSI, SCK, MSBFIRST, 0x88); //shiftOut(MOSI, SCK, MSBFIRST, 0x20); digitalWrite(SS,HIGH); digitalWrite(7,LOW); pinMode(keyUP, INPUT_PULLUP); pinMode(keyDOUN, INPUT_PULLUP); pinMode(keyPL, INPUT_PULLUP); // обработка кнопок if (!digitalRead(keyUP) && !digitalRead(keyPL)){ // регулировка частоты вверх frequlow++; if (frequlow > 255 && frequhigt < 255) frequlow = 0, frequhigt++; if (frequhigt > 254 && frequlow == 255) frequlow = 0, frequhigt = 0; delay(100); } if (!digitalRead(keyDOUN) && !digitalRead(keyPL)){ // регулировка частоты вниз frequlow--; if (frequlow == 0 && frequhigt >= 1) frequlow = 255, frequhigt--; if (frequhigt == 0 && frequlow == 0) frequlow = 255, frequhigt = 255; delay(100); } }
Сам себе отвечу - удалось добиться инициализации тюнера. s скетч был не рабочий из-за оператора shiftOut, заменил его на
SPI.transfer, может дело в библиотеках.
рабочий код: