Altinkaya: турецкие корпуса для РЭА

Программа для аудиоресивера

Новичок
 
Регистрация: 09.07.2012
Адрес: Тамбов
Сообщений: 111
Репутация: 17
7 14
0 0
Отправить сообщение для Серенький с помощью ICQ Отправить сообщение для Серенький с помощью Skype™
 
21.02.2014 20:12 #1
Здравствуйте!
Есть желание собрать устройство, про которое я уже писал ранее.
В планах это такой аудиоресивер:
-Радио будет встроенным (тюнер от автомагнитолы) и управляться микроконтроллером (синтезатор частоты, например, LM7001J);
-3 стерео входа, 1 псевдоквадро выход (TDA7313/PT2313L);
-Входа можно будет выбирать программно, т.е. управлять тем же МК;
-Для всех режимов будет использоваться один дисплей;
-MP3 тоже будет встроенным (чтение с USB устройств и SD карт), управление через тот же МК (декодер vs1011);
-В режиме MP3 на экране отображается название проигрываемого файла(желательно), прошедшее время с начала песни и её длительность;
-В режиме радио отображается текущая частота (по возможности - горит индикатор станции на настроенной частоте);
-В режиме линейного входа на дисплее надпись LINE IN;
-Во всех режимах регулируются громкость, баланс, низкие и высокие частоты.

Изучаю язык C++, но пока умею только выводить символы и слова на LCD, и моргать светодиодами, про управление микросхем по I2C шине ничего не понял... (CodeVisionAVR)

Буду очень благодарен за любую помощь, кроме ссылок на учебники (Прочитал соответствующие темы Шпака и Лебедева).

Надеюсь на Вашу помощь!
Оценка
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей.
Гуру
 
Регистрация: 13.05.2006
Сообщений: 3,908
Репутация: 1246
1,233 65
59 33
 
22.02.2014 11:19 #2
Для AVR много понаписано всего. Поищите в сети примеры и по ним с книжкой разбирайтесь. Можете проект протеуса на казус.ру (там есть тема проекты протеус) скачать и по шагам разбираться.
Оценка
Новичок
 
Регистрация: 09.07.2012
Адрес: Тамбов
Сообщений: 111
Репутация: 17
7 14
0 0
Отправить сообщение для Серенький с помощью ICQ Отправить сообщение для Серенький с помощью Skype™
 
22.02.2014 22:25 #3
Цитата:
Сообщение от LEAS
Для AVR много понаписано всего. Поищите в сети примеры и по ним с книжкой разбирайтесь. Можете проект протеуса на казус.ру (там есть тема проекты протеус) скачать и по шагам разбираться.
Вы далеко не первый, кто меня посылает в это плавание)
Библиотека для TDA7313 есть, но для CodeVisionAVR ли она? И как посылать команды тдашке?
Цитата:
/************************************************** ***


Это библиотека для работы с шиной i2c и микросхемой TDA7313.
Линией синхронизации SCL назначен PORTB.0
Линией передачи данных SDA назначен PORTB.1

Настройки данной библиотеки:
В строке 1 надо указать где линия SDA
В строках 2-5 указать соответствующие номера битов и порт
В строках 6-9 в принципе можно ничего не трогать, но если сильно хочется... А порт смотри внимательно!!!!!!!!
В строке 10 указывается в мкс длительность импульсов, т.о. регулирутся скорость обмена данными
Если не трогали строки 6-9, то 12-15 тоже не надо колыхать если конечно не изменится порт

************************************************** ***/

#include <DELAY.h>
//#define SDA PORTC.7 /*1*/
#define CLR_B6 &=~(1<<6) /*Очистка бита 0*/ /*2*/
#define CLR_B7 &=~(1<<7) /*Очистка бита 1*/ /*3*/
#define SET_B6 |=(1<<6) /*Установка бита 0*/ /*4*/
#define SET_B7 |=(1<<7) /*Установка бита 1*/ /*5*/
#define SCL_ZERO DDRC SET_B6 /*Установка 0 на SCL путем переключения данной линии на выход*/ /*6*/
#define SCL_ONE DDRC CLR_B6 /*Установка 1 на SCL путем переключения данной линии на вход*/ /*7*/
#define SDA_ZERO DDRC SET_B7 /*Установка 0 на SDA путем переключения данной линии на выход*/ /*8*/
#define SDA_ONE DDRC CLR_B7 /*Установка 1 на SDA путем переключения данной линии на вход*/ /*9*/
#define PAUSE delay_us(15) /*Необходимая пауза. Для 100 килобит в сек не менее 4,7 мкс*/ /*10*/

void i2_start(void) { /*Функция инициализации и старта шины i2c*/
DDRC CLR_B6; /*Сделали входом PORTC.6 */ /*12*/
DDRC CLR_B7; /*Сделали входом PORTC.7 */ /*13*/
PORTC CLR_B6; /*Убрали внутреннюю подтяжку с PORTB.0 на SCL теперь 1 за счет внешней подтяжки*/ /*14*/
PORTC CLR_B7; /*Убрали внутреннюю подтяжку с PORTB.1 на SDA теперь 1 за счет внешней подтяжки */ /*15*/
PAUSE;
SDA_ZERO; /*При единицах на SDA SCL, делаем 0 на SDA, тем самым стартуем */
PAUSE;
SCL_ZERO; /*Даём 0 на SCL, подготовив тем самым интерфейс к передаче байта */
PAUSE;
}

void i2_stop (void) {
SDA_ZERO;
PAUSE;
SCL_ONE;
PAUSE;
SDA_ONE;
PAUSE;
}

unsigned char i2_write (unsigned char bw) { /*Функция передачи байта по шине*/
unsigned char check=0;
unsigned char k, m; /*Вспомогательные переменные*/
for (k=0 ; k<8 ; k++) { /*Цикл отправки байта по битам, начиная с самого старшего, как в спецификации на шину*/
m = 1& (bw >> (7-k)); /*Операция логического И между числом 1 и очередным битом, для выявления его значения*/
if (m==0) {SDA_ZERO;} /*Если очередной бит равен 0 то линию SDA делаем выходом, и т.о. на ней становится 0 ибо в PORTх вписан0 в i2_start */
else {SDA_ONE;}; /*Если очередной бит равен 1 то линию SDA делаем входом, и т.о. на ней становится 1 т.к. есть внешний подтяг. резистор */
PAUSE; /*Технологическая пауза*/
SCL_ONE; /*Даем синхроимпульс*/
PAUSE; /*Ждем пока приемник определит значение бита на SDA пока на SCL единица */
SCL_ZERO; /*Убираем 1 с линии синхронизации, подготавливая приемник к приему очередного бита*/
PAUSE;
}; /*для for, чтобы не запутаться*/
/*Посылка девятого бита подтверждения*/
SDA_ONE;
PAUSE;
SCL_ONE;
PAUSE;
if (PINC.7==1) {check=1;}
else {check=0;};
SCL_ZERO;
PAUSE;
return check;
}


void tda7313_write(unsigned char command) { /*Функция инициализации и отправки данных на TDA7313*/
i2_start(); /*Даем сигнал старта шины*/
if(i2_write(0x88)) {goto m7;}; /*Вводим адрес тдашки и если она не дала бит подтверждения приема то на метку 1*/
i2_write(command); /*передаем данные в микруху */
m7:
i2_stop(); /*останавливаем обмен по шине*/

}
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 23:09.
Обратная связь РадиоЛоцман Вверх