Например TDA7294

Форум РадиоКот • Просмотр темы - Приемник на si4735
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 13:16:16

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Приемник на si4735
СообщениеДобавлено: Чт фев 26, 2015 09:44:28 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0
Всем привет.
Дошли руки до этой замечательной микросхемы. Но возникла проблема - не могу считать с неё состояние. Для обмена использую I2C.
Не могу понять где загвоздка.
Отсылка команды происходит так:
Код:
      i2c_start(); 
      i2c_write(0xC6);      //адрес микросхемы si4735
      i2c_write(0x01);
      i2c_write(0x10);
      i2c_write(0x05);
      i2c_stop();   
      delay_ms(200);

то же самое в даташите:
Изображение

это включение микросхемы в фм диапазоне... этот код работает.

считывать состояние пытаюсь так:
Код:
    unsigned int freq;
    unsigned char R1, R2, R3, R4, R5, R6, R7, status;
    i2c_start();
    i2c_write(0xC6);
    i2c_write(0x22);
    i2c_write(0x03);
    i2c_stop();
    i2c_start();
    i2c_write(0x23);
    status=i2c_read(1);
    R1=i2c_read(1);
    R2=i2c_read(1);
    R3=i2c_read(1);
    R4=i2c_read(1);
    R5=i2c_read(1);
    R6=i2c_read(1);
    R7=i2c_read(0);
    i2c_stop();
    freq=R2*256;
    freq=freq+R3;


в даташите:

Изображение

на выходе во всех R - 255...

программу управления пишу в CodeVisionAVR... Как отлаживать - ума не приложу. Микросхемы приемника нету в протеусе. Кто нить пробовал работать с si47xx?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Пт фев 27, 2015 08:39:20 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0
Хух.. разобрался... :roll:

Правильный код такой:
Код:
    unsigned int freq;
    unsigned char R1, R2, R3, R4, R5, R6, R7, status;
    i2c_start();
    i2c_write(0xC6);
    i2c_write(0x22);
    i2c_write(0x01);
    i2c_stop();
    i2c_start();
    i2c_write(0xC7);      //адрес откуда читать при SEN=1
    status=i2c_read(1);
    R1=i2c_read(1);
    R2=i2c_read(1);
    R3=i2c_read(1);
    R4=i2c_read(1);
    R5=i2c_read(1);
    R6=i2c_read(1);
    R7=i2c_read(0);
    i2c_stop();
    freq=R2*256;
    freq=freq+R3;
    return freq;



оказалось что в начале блока считывания надо подать адрес микросхемы si4735 увеличенный на 1. В моем случае это 0xC7. На это я убил 3 дня :)))

Вообще микросхема хитрая...
Изображение

Выбор типа интерфейса осуществляется с помощью вывода GPO1. Если в момент подачи питания (вернее сразу после сброса) на этом выводе будет 1 - режим обмена данных будет двухпроводной (i2c), а если в этот момент на ноге GPO1 будет 0 () - 3-х проводной.

При интерфейсе i2c, адрес устройства задается выводом SEN. Если там 1 - адрес 0xC6 - на передачу команд в микросхему и 0хС7 - на чтение состояния, а если там 0 - адрес 0х22 - на запись и 0х23 на чтение.

мой девайс для отладки 8) :
Изображение

Микроконтроллер atmega8... si4735 спаяна на переходнике из-за того что сильно мелкая... Программа на микроконтроллер пока очень сырая. Просто две кнопки +/- частота. Десятичную точку на пока индикатор не вывожу, потом придумаю как. Сейчас ФМ диапазон и частота настройки 102,5 МГц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Чт мар 05, 2015 08:24:40 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0

Вроде бы более менее заработало. Сделал :solder: "магнитную антенну" намотав 100 витков на край ферритового стержня. Амплитудную модуляцию возле компа и моей светодиодной лампы трудно ловить, все забивает помехами, а ФМ вполне прилично работает.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Чт мар 05, 2015 08:48:16 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0
Схема микроконтроллерной части:
Изображение

текст программы:
Спойлер
Код:
#include <mega8.h>
#include <stdio.h>
#include <delay.h>

// I2C Bus functions
#include <i2c.h>

//запрет автоматического распределения регистров
#pragma regalloc-
#define t 50          //продолжительность импульса при передачи данных на жк индикатор
#define radio_adr 0xC6

// Declare your global variables here

unsigned char key;
unsigned char dot[11];  // положения точeк
unsigned char on_dot;
int i, n, p, l, seg;
unsigned char temp_lcd;
unsigned char filter=0x02;
unsigned char band;   //диапазон
/*
1 - FM1: 64 -  75 MHz
2 - FM2: 87 - 108 MHz
3 -  LW: 153 - 279 kHz
4 -  AM: 522 - 1710 kHz
SW:
5 -  90: 3200 - 3400 kHz
6 -  75: 3900 - 4000 kHz
7 -  60: 4750 - 5060 kHz
8 -  49: 5900 - 6200
9 -  41: 7100 - 7400
10-  31: 9500 - 9900
11-  25: 11650 - 12050
12-  22: 13600 - 13800
13-  19: 15100 - 15600
14-  16: 17550 - 17900
15-  13: 21450 - 21850
16-  11: 25650 - 26100
*/

unsigned char band_name[16][2]={
    {0, 0},
    {12, 1},       //F1
    {12, 2},       //F2
    {13, 11},      //L
    {14, 11},      //A
    {9, 0},        //90
    {6, 0},        //60
    {4, 9},        //49
    {4, 1},        //41
    {3, 1},        //31
    {2, 5},        //25
    {2, 2},        //22
    {1, 9},        //19
    {1, 6},        //16
    {1, 3},        //13
    {1, 1}         //11
};

unsigned int band_freq[16][2]={
    {0,0},                    // частота начала диапазона, частота конца диапазона
    {6400, 7500},         //F1
    {8700, 10800},        //F2
    {153, 279},           //L
    {522, 1710},          //A
    {2400, 3400},         //90
    {4750, 5060},         //60
    {5900, 6200},         //49
    {7100, 7400},         //41
    {9500, 9900},         //31
    {11650, 12050},       //25
    {13600, 13800},       //22
    {15100, 15600},       //19
    {17550, 17900},       //16
    {21450, 21850},       //13
    {25650, 26100}        //11
};


unsigned int tuning_freq[16][2]={       //частоты на которые настраивается в момент включения диапазона
    {0,0},                               //+шаг перестройки
    {7050,5},
    {10250,5},
    {153,9},
    {522,9},
    {2400,5},
    {4750,5},
    {5900,5},
    {7100,5},
    {9500,5},
    {11650,5},
    {13600,5},
    {15100,5},
    {17550,5},
    {21450,5},
    {25650,5}
};

unsigned char lcd[15]={
  //  bpcdgeaf
    0b10110111,         //0     
    0b10100000,         //1
    0b10011110,         //2
    0b10111010,         //3
    0b10101001,         //4
    0b00111011,         //5
    0b00111111,         //6
    0b10100011,         //7
    0b10111111,         //8
    0b10111011,         //9
    0b01000000,         //10 - .
    0b00000000,         //11 - пробел
    0b00001111,         //12 - F
    0b00010101,         //13 - L
    0b10101111          //14 - A
};

unsigned char lcd_buffer[13]={           //массив для вывода на индикатор
    1,                                   //будет видно только 10 цифр
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    0,
    11,
    12,
    0
};

char read_key()
{
    char k;
    if (key != 100){
        if (PINB.0==0){
            delay_ms(10);
            if (PINB.0==0){
                k=1; 
            }     
        }
        if (PINB.1==0){
            delay_ms(10);
            if (PINB.1==0){
                k=2;
            }
        }
        if (PINB.2==0){
            delay_ms(50);
            if (PINB.2==0){
                k=3;
            }
        }
    }
    if ((PINB.0==1)&&(PINB.1==1)&&(PINB.2==1)){
        k=0;
    }

    return k;
}

void lcd_clr(){
    for (l=0; l<14; l++){
        lcd_buffer[l]=11;           //заполняем весь буферный массив нулями
    }
}


void lcd_print(unsigned char pos, unsigned int data, unsigned char d){
    unsigned char s;

    if (pos>9) pos=9;
    for (s=pos; s<pos+5; s++) dot[s]=0;  //убираем точки с видимой части экрана
    if (data>9999){
        lcd_buffer[pos] =  data/10000;
        lcd_buffer[pos+1]=(data/1000)%10;
        lcd_buffer[pos+2]=(data/100)%10;
        lcd_buffer[pos+3]=(data/10)%10;
        lcd_buffer[pos+4]=data%10;
        dot[pos+5-d]=1;   //точка на d символов справа
    }
    if ((data>999)&&(data<10000)){
        lcd_buffer[pos]= data/1000;
        lcd_buffer[pos+1]=(data/100)%10;
        lcd_buffer[pos+2]=(data/10)%10;
        lcd_buffer[pos+3]=data%10;
        lcd_buffer[pos+4]=11;
        dot[pos+4-d]=1;
    }
    if ((data>99)&&(data<1000)){
        lcd_buffer[pos]= data/100;
        lcd_buffer[pos+1]=(data/10)%10;
        lcd_buffer[pos+2]=data%10;
        lcd_buffer[pos+3]=11;
        lcd_buffer[pos+4]=11;
        dot[pos+3-d]=1;
    }
    if ((data>9)&&(data<100)){
        lcd_buffer[pos]=data/10;
        lcd_buffer[pos+1]=data%10;
        lcd_buffer[pos+2]=11;
        lcd_buffer[pos+3]=11;
        lcd_buffer[pos+4]=11;
        dot[pos+2-d]=1;
    }
    if (data<10){
        lcd_buffer[pos]=data%10;
    }
}

void lcd_write(){
//передача на ЖК индикатор NJU6432
//PORTC.0 - DN
PORTC.1=0;       //CL
PORTC.2=1;       //CE
delay_us(10);
seg=1;
for (i=1; i<14; i++){
    temp_lcd=lcd[lcd_buffer[i-1]];    //заносим код числа во временную переменную
    if (dot[i]==1)temp_lcd=temp_lcd|0b01000000;  //если в массиве точек указан текущий разряд - ставим точку     
    for (n=0; n<8; n++){
        PORTC.0=temp_lcd&0b00000001;  //  выводим в порт крайний бит текущего числа
        delay_us(10);
        PORTC.1=1;          //вколючаем синхроимпульс
        delay_us(t);
        PORTC.1=0;          //выключаем синхроимпульс
        delay_us(10);
        PORTC.0=0;
        delay_us(t);
        temp_lcd=temp_lcd>>1;    //сдвиг вправо на 1 разряд
        seg++;
        if (seg==53){   //первая служебная тетрада
            for (p=0; p<4; p++){
                PORTC.0=0;
                delay_us(10);
                PORTC.1=1;          //вколючаем синхроимпульс
                delay_us(t);
                PORTC.1=0;          //выключаем синхроимпульс
                delay_us(10);
                PORTC.0=0;
                delay_us(t);

                seg++;
            }           
        }
     
    }
    delay_us(50);   

    for (p=0; p<4; p++){     //вторая служебная тетрада
        PORTC.0=1;
        delay_us(10);
        PORTC.1=1;          //вколючаем синхроимпульс
        delay_us(t);
        PORTC.1=0;          //выключаем синхроимпульс
        delay_us(10);
        PORTC.0=0;
        delay_us(t);                               
    }           

PORTC.2=0;
}

void radio_poverup(unsigned int b){

    if (b<3) {   //включаем в ФМ диапазоне
      i2c_start(); 
      i2c_write(radio_adr);      //адрес микросхемы si4735
      i2c_write(0x01);
      i2c_write(0x10);
      i2c_write(0x05);
      i2c_stop();
      for (i=0; i<11; i++){
         dot[i]=0;      //все десятичные точки не видны на экране
      } 
      delay_ms(310);
      on_dot=2;
    }
    else{        //включаем в АМ диапазоне
      i2c_start(); 
      i2c_write(radio_adr);      //адрес микросхемы si4735
      i2c_write(0x01);      //power_up
      i2c_write(0x11);
      i2c_write(0x05);
      i2c_stop();   
      for (i=0; i<11; i++){
         dot[i]=0;      //все десятичные точки не видны на экране
      }
      delay_ms(310); 
      on_dot=0;
    }
}

void radio_volume(){
          //громкость
      i2c_start(); 
      i2c_write(radio_adr);
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x00);
      i2c_write(0x00);
      i2c_write(0x3F);
      i2c_stop();   
      delay_ms(20);

}

void radio_set_band(unsigned char b){
    unsigned int min_freq;
    unsigned int max_freq;
    min_freq=band_freq[b][0];
    max_freq=band_freq[b][1];
   
    lcd_buffer[8]=band_name[b][0];
    lcd_buffer[9]=band_name[b][1];  //заносим наименование диапазона в буфер индикатора
    if (b<3) {   //для ФМ диапазона
     
      //указываем нижнюю границу диапазона
      i2c_start();
      i2c_write(radio_adr);
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x14);
      i2c_write(0x00);
      i2c_write((unsigned char)(min_freq>>8));
      i2c_write((unsigned char)min_freq);
      i2c_stop();
      delay_ms(10);
     
      //указываем верхнюю границу диапазона
      i2c_start();
      i2c_write(radio_adr);
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x14);
      i2c_write(0x01);
      i2c_write((unsigned char)(max_freq>>8));
      i2c_write((unsigned char)max_freq);
      i2c_stop();
      delay_ms(10);

    }
    else{        //для АМ диапазона
        //нижняя граница диапазона
      i2c_start(); 
      i2c_write(radio_adr);
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x34);
      i2c_write(0x00);
      i2c_write((unsigned char)(min_freq>>8));           
      i2c_write((unsigned char)min_freq);   
      i2c_stop();   
      delay_ms(10);
     
      //верхняя граница диапазона
      i2c_start(); 
      i2c_write(radio_adr);
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x34);
      i2c_write(0x01);
      i2c_write((unsigned char)(max_freq>>8));           
      i2c_write((unsigned char)max_freq);   
      i2c_stop();   
      delay_ms(10);
     
    }
}

void radio_set_freq(unsigned char b){
    unsigned int cur_freq;
    cur_freq=tuning_freq[b][0];
    if (b<3) {  //установка частоты настройки для ФМ диапазона
      i2c_start();
      i2c_write(radio_adr);
      i2c_write(0x20);
      i2c_write(0x00);
      i2c_write((unsigned char)(cur_freq>>8));     //частота настройки
      i2c_write((unsigned char)cur_freq);
      i2c_write(0x00);
      i2c_stop();   
      delay_ms(20);

    }
    else{
      i2c_start(); 
      i2c_write(radio_adr);           
      i2c_write(0x40);
      i2c_write(0x00);
      i2c_write((unsigned char)(cur_freq>>8));     //частота настройки
      i2c_write((unsigned char)cur_freq);
      i2c_write(0x00);     
      i2c_write(0x00);
      i2c_stop();   
      delay_ms(20);
    }
}

void radio_am_filter(unsigned char b){
    if (b>2){
      i2c_start();                //полоса пропускания АМ
      i2c_write(radio_adr);
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x31);
      i2c_write(0x02);
      i2c_write(0x00);           
      i2c_write(filter);   
      i2c_stop();   
      delay_ms(10);
     
      i2c_start();               
      i2c_write(radio_adr);         // AM_SOFT_MUTE_MAX_ATTENUATION
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x33);
      i2c_write(0x02);
      i2c_write(0x00);           
      i2c_write(0x00);   
      i2c_stop();   
      delay_ms(10);
     
      i2c_start();               
      i2c_write(radio_adr);         // AM_AUTOMATIC_VOLUME_CONTROL_MAX_GAIN
      i2c_write(0x12);
      i2c_write(0x00);
      i2c_write(0x31);
      i2c_write(0x03);
      i2c_write(0x25);           
      i2c_write(0x00);   
      i2c_stop();   
      delay_ms(10);       
      }
   
}

void radio_frequency_up(unsigned char b){ //увеличиваем частоту настройки
     if (tuning_freq[b][0]<band_freq[b][1]){
        tuning_freq[b][0]=tuning_freq[b][0]+tuning_freq[b][1];
     }
     else{
        tuning_freq[b][0]=band_freq[b][0];  //перескакиваем в начало диапазона
     }
}

void radio_frequency_down(unsigned char b){ //уменьшаем частоту настройки
     if (tuning_freq[b][0]>band_freq[b][0]){
        tuning_freq[b][0]=tuning_freq[b][0]-tuning_freq[b][1];
     }
     else{
        tuning_freq[b][0]=band_freq[b][1];   //перескакиваем в конец диапазона
     }
}

unsigned int radio_cur_freq(unsigned char b){ //получение текущей астоты на которую настроена микросхема
    unsigned int fr;
    unsigned char R1, R2, R3, R4, R5, R6, R7, status;
    if (b<3) {  //для ФМ диапазона

        i2c_start();
        i2c_write(radio_adr);
        i2c_write(0x22);
        i2c_write(0x01);
        i2c_stop();
        i2c_start();
        i2c_write(0xC7);      //адрес откуда читать при SEN=1
        status=i2c_read(1);
        R1=i2c_read(1);
        R2=i2c_read(1);
        R3=i2c_read(1);
        R4=i2c_read(1);
        R5=i2c_read(1);
        R6=i2c_read(1);
        R7=i2c_read(0);
        i2c_stop();
        fr=R2;
        fr=fr<<8;          //типа умножение на 255
        fr=fr+R3;

    }
    else{
        i2c_start();
        i2c_write(radio_adr);
        i2c_write(0x42);
        i2c_write(0x01);
        i2c_stop();
        i2c_start();
        i2c_write(0xC7);      //адрес откуда читать при SEN=1
        status=i2c_read(1);
        R1=i2c_read(1);
        R2=i2c_read(1);
        R3=i2c_read(1);
        R4=i2c_read(1);
        R5=i2c_read(1);
        R6=i2c_read(1);
        R7=i2c_read(0);
        i2c_stop();
        fr=R2;
        fr=fr<<8;          //типа умножение на 255
        fr=fr+R3;
       
    }
    return fr;
}







void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=P State1=P State0=P
PORTB=0x07;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x07;;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// I2C Bus initialization
// I2C Port: PORTC
// I2C SDA bit: 4
// I2C SCL bit: 5
// Bit Rate: 100 kHz
// Note: I2C settings are specified in the
// Project|Configure|C Compiler|Libraries|I2C menu.

band=1; // диапазон при включении
i2c_init();
    for (i=0; i<11; i++){
        dot[i]=0;      //все десятичные точки не видны на экране
    }

      lcd_clr();     
      radio_poverup(band);      //включаем в нужном диапазоне
      radio_volume();
      radio_set_band(band);     //указываем застоты выбранного диапазона
      radio_set_freq(band);     //указываем на какую частоту настроить
      delay_ms(150);
      lcd_print(0,  radio_cur_freq(band), 2);
      lcd_write();

while (1)
      {
      // Place your code here
       
        key=read_key();
       
        switch (key) {
        case 1:
            key=100;
            radio_frequency_up(band);
            radio_set_freq(band);     //указываем на какую частоту настроить
            delay_ms(100);     
            lcd_print(0,  radio_cur_freq(band), on_dot);   
            lcd_write();

        break;
        case 2:
            key=100;
            radio_frequency_down(band);
            radio_set_freq(band);     //указываем на какую частоту настроить
            delay_ms(100);     
            lcd_print(0,  radio_cur_freq(band), on_dot);     
            lcd_write();

        break;
        case 3:
            key=100;
            if (band<15){
                band++;
            }
            else band=1;
            if ((band==3)||(band==1)){
            //выключаем микросхему приемника
            //если переход с ФМ диапазона на АМ и обратно
                i2c_start(); 
                i2c_write(radio_adr);     //адрес микросхемы si4735
                i2c_write(0x11);          //выключаем
                i2c_stop();   
                delay_ms(5);
                radio_poverup(band);      //включаем в нужном диапазоне
                radio_volume();
            }
            radio_am_filter(band);    //фильтр а АМ диапазоне
            radio_set_band(band);     //указываем застоты выбранного диапазона
            radio_set_freq(band);     //указываем на какую частоту настроить
            delay_ms(150);
            lcd_print(0,  radio_cur_freq(band), on_dot);
            lcd_write();

        break;

        default:
        };

       

      }
}


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Пн мар 09, 2015 15:33:04 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0
а это схема радиоприемной части.

Изображение

магнитная антенна L1 имеет 100 витков на ферритовом стержне длинной 200 мм от какого-то советского приемника.

наверное с входными цепями нужно что-то делать... сильно уж просто...


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Чт мар 12, 2015 20:00:42 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0
Возник вопрос по существу... А какую тактовую частоту микроконтроллера лучше выбрать что бы было меньше помех радиоприему. Сейчас работает на частоте 1 МГц и как раз посредине средневолнового диапазона хорошая такая несущая... Есть вариант без сложностей выбрать 1, 2, 4 и 8 МГц. Что посоветуете?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Чт мар 12, 2015 20:21:10 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 607
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3715
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Интересный у Вас проект! Контроллер при приёме сигнала приемником должен быть погружен в сон с отключенным тактовым генератором. Чтобы уменьшить помехи радиоприему в короткое время работы МК следует продумать монтаж. Если соберете на печатке с короткими проводниками, в том числе и к ЖКИ, то будет лучше. Пока на мекетке в длинными проводами от помех приему на АМ избавиться будет сложно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Вт апр 14, 2015 21:25:13 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
А у Вас на АМ как настройка работает? Перестраиваю частоту шагами по килогерцу, звук на мгновение проваливается после каждого шага. Никак не поборю.

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Чт апр 16, 2015 22:56:37 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
Посмотрел/послушал Ваш ролик, заметил - у Вас та же байда при перестройке частоты на УКВ (думаю что и на АМ тоже). Видимо что-то надо настроить в камне, чтобы этого не было, ведь в промышленных приемниках, сделанных на этой микросхеме, такого нет. Ковыряюсь с настройками AVC и SOFT_MUTE, пока безрезультатно.

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Пт июл 17, 2015 12:36:52 
Первый раз сказал Мяу!

Зарегистрирован: Чт фев 13, 2014 18:38:37
Сообщений: 25
Рейтинг сообщения: 0
dadigor писал(а):
Посмотрел/послушал Ваш ролик, заметил - у Вас та же байда при перестройке частоты на УКВ (думаю что и на АМ тоже). Видимо что-то надо настроить в камне, чтобы этого не было, ведь в промышленных приемниках, сделанных на этой микросхеме, такого нет. Ковыряюсь с настройками AVC и SOFT_MUTE, пока безрезультатно.

Да, на АМ очень сильно затихает в момент перестройки. На FM более менее нормально (станции слышно и во время перестройки). Не знаю как это побороть. На АМ вообще приходится ждать пока "выпиливает" усиление с после установки частоты.
У вас ничего не получилось?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Ср окт 07, 2015 00:05:54 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
Я с весны не возвращался к макетику, но скоро займусь. Промышленные радиоприемники на этой схеме вроде бы не имеют такого свойства, видимо надо играться с настройками АРУ и шумоподавителя.

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Вс авг 28, 2016 19:54:37 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 27, 2008 15:41:29
Сообщений: 25
Рейтинг сообщения: 0
Извиняюсь, что поднимаю мертвую тему.
Приобрел на Али модуль с микросхемой Si4730.
При подаче команды Power Up возвращает татус 0х40, то бишь ошибка. Это еще полбеды. При установке частоты в режиме FM не устанавливается бит STCINT в регистре статуса.
Если просто читать статус, выдает 0х80, то есть норма. Версию чипа так же читает.
Где подвох?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Пт сен 09, 2016 21:08:13 
Родился

Зарегистрирован: Пт сен 09, 2016 18:27:15
Сообщений: 5
Рейтинг сообщения: 0
Странные ныне пошли разработчики . Код писать умеют , а обычные буквари читать не хотят . Совсем читать не хотят . Силабовский чип - это по сути ФАПЧ прямого преобразования . У любого ФАПЧа - будь он цифровой или аналоговый ВСЕГДА будет " хрюк " при перестройке - для этого и нужно блокировать выход приемника . А в режиме АМ нужно еще время , чтобы эту самую АРУ правильно выставить .

Кому не нравятся слова ФАПЧ или даже УКВ - можете смело заМЯУнять на PLL и FM.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Ср сен 28, 2016 22:13:55 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
Т.е. величина Хрюка постоянная и не регулируемая и сделать его менее заметным никак нельзя? И все настройки, предоставляемые разработчиками микросхемы бесполезны в этом деле?
Кстати, интересно, как идёт перестройка частоты при малых приращениях - неужели происходит огромное переколебание в контуре ФАПЧ при перестройке частоты скажем с 5000 кГц до 5001 кГц (именно так я шагаю по диапазону). Я считал, что это должен быть достаточно незаметный Хрюк и если придавить АРУ, можно будет добиться приемлемымых результатов, когда перепад уровней будет зависеть только от самого сигнала, а не от действия АРУ.
Видимо я был не прав, не понимая сути работы этой микросхемы. Жаль, придётся отказаться от её применения.

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Ср окт 05, 2016 13:19:35 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
henx
Вы решили проблему? Если нет, опишите поподробнее, или в кодах, что и как подаете.

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Сб окт 22, 2016 18:39:12 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 27, 2008 15:41:29
Сообщений: 25
Рейтинг сообщения: 0
Инициализация
Код:
        si47xx_reset();       
        cmd[0] = POWER_UP;         
      // The device is being powered up in FM RX mode.       
        cmd[1] = POWER_UP_IN_CTSIEN|POWER_UP_IN_FUNC_FMRX|0x10 ;   
        // The opmode needs to be set to analog mode
        cmd[2] = POWER_UP_IN_OPMODE_RX_ANALOG;       
        // Powerup the device       
       while(!si47xx_waitForCTS());      
        i2c_Restart();
        i2c_SendByte(0xc6);
        if(i2c_ReadAcknowledge()) return;             
        i2c_PutString(cmd,3);       
        i2c_Stop();
        while(!si47xx_waitForCTS());
       
       // If the calling function would like to have results then read them.
           
        DelayMs(POWERUP_TIME);               // wait for si47xx to powerup       
        DelayMs(200);
        DelayMs(200);
       
        si47xx_getPartInformation();   
         
        si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK);
        si47xx_waitForCTS();
        si47xx_set_property(DIGITAL_OUTPUT_FORMAT, 0x0);
        si47xx_waitForCTS();
        si47xx_set_property(RX_HARD_MUTE, 0);
        si47xx_waitForCTS();
        si47xx_set_property(FM_SEEK_TUNE_SNR_THRESHOLD, 3);
        si47xx_waitForCTS();
        si47xx_set_property(FM_SEEK_TUNE_RSSI_THRESHOLD, 20);
   
       while(!si47xx_waitForCTS());
   
        si47xx_set_property(FM_RDS_CONFIG, 0);
        si47xx_waitForCTS();
        si47xx_set_property(FM_DEEMPHASIS, FM_DEEMPH_50US); // Deemphasis
        // Band is already set to 87.5-107.9MHz (Europe)
        si47xx_waitForCTS();
        si47xx_set_property(FM_SEEK_FREQ_SPACING, 10);      // 100 kHz Spacing
         
        si47xx_set_property(REFCLK_FREQ, REFCLK_FREQ);
   
        si47xx_waitForCTS();
        si47xx_set_property(REFCLK_PRESCALE, 1);
   
        while(!si47xx_waitForCTS());
       


Зависание происходит во время ожидания бита STCINT.
Код:
 frequency =10200;
          fmTuneFreq(frequency);   
          DelayMs(100);
          xerr=0;
     
    while(!(xerr&STCINT))
    {      si47xx_command(1, GET_INT_STATUS,0, 0);
        si47xx_waitForCTS();
        xerr=si47xx_readStatus();
    }      


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Вс окт 23, 2016 00:03:24 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
а что делает
fmTuneFreq(frequency);
раскройте. Насколько я понял, посылается команда 0x20 FM_TUNE_FREQ ?

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Вс окт 23, 2016 15:57:41 
Первый раз сказал Мяу!

Зарегистрирован: Вс июл 27, 2008 15:41:29
Сообщений: 25
Рейтинг сообщения: 0
Короче, разобрался, дело было в параметре REFCLK_FREQ, вместо значения ещё раз передавался адрес REFCLK_FREQ.
Записал значение по умолчанию, 0x8000, Прерывания появились.
Да, команда fmTuneFreq(frequency) это команда 0x20


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Пн окт 24, 2016 21:43:05 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 127
Зарегистрирован: Пт дек 26, 2014 20:33:38
Сообщений: 593
Откуда: Самая большая деревня. (По мнению Габриэля Гарсиа Маркеса)
Рейтинг сообщения: 0
henx, написал вам в личку

_________________
О технике чего спорить-то, давайте попробуем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Приемник на si4735
СообщениеДобавлено: Пт апр 06, 2018 06:47:24 
Друг Кота
Аватар пользователя

Карма: 35
Рейтинг сообщений: 82
Зарегистрирован: Чт окт 08, 2009 00:43:16
Сообщений: 3284
Рейтинг сообщения: 0
Силабовский чип - это по сути ФАПЧ прямого преобразования . У любого ФАПЧа - будь он цифровой или аналоговый ВСЕГДА будет " хрюк " при перестройке - для этого и нужно блокировать выход приемника

Чириканье прослушивается тогда, когда неправильно выбраны параметры ФНЧ в петле ФАПЧ. Правильно сконструированный синтезатор издает настолько короткое "чик-чирик", что ничего приглушать не нужно.

У меня вопрос к pooh007 и dadigor. Как ведет себя SI4735 при расстройке на 50-100 килогерц от частоты FM радиостанции, то есть при неточной настройке на частоту? Прослушивается ли громкий скрежет, хрипы, скрипы? Смакетировал я себе DSP приемник на китайской микросхеме схожей с SI4735, уж больной она скрипит когда настраиваешься, аж уши отваливаются. При точной настройке все нормально, а чуть в стороне по частоте жутко верещит.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y