Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 20.06.2007, 15:08   #1
Николай
Senior Member
 
Регистрация: 02.03.2007
Адрес: Ульяновск
Возраст: 43
Сообщений: 109
Вес репутации: 103/50
Николай will become famous soon enoughНиколай will become famous soon enough
Отправить сообщение для Николай с помощью ICQ
По умолчанию Как лучше подключить кодек к PIC?

Я использую PIC18F6621 и кодек МС145481. Подключенны между собой по SPI, причем пик настроен как slave с контролем SS, частоту 8кГц и 256кГц формирую этим же пиком. Причем 8кГц на кодек подаю сразу, а на пик (SS) через инвертор. 256кГц через инвертор и на пик и на кодек. Эта схема работает, но уж больно грамозко. Подскажите пожалуйста может можно подключить по проще? (На DSP переходить не планирую)
Николай вне форума   Ответить с цитированием
Старый 21.06.2007, 10:39   #2
PetrM
Junior Member
 
Регистрация: 10.05.2007
Сообщений: 6
Вес репутации: 100/0
PetrM will become famous soon enoughPetrM will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

Не совсем ясно, зачем автор для работы со звуком 8кГц х 8бит, использует кодек. Обычно внешние кодеки используют для получения более качественного звука.
Я в 8битных приложениях использую в качестве DAC MCP41050, а ADC собственный ADC PICа. Для фильтрации достаточно RC цепочки, в крайнем случае фильтр 2 порядка на операционнике. Схема получается намного дешевле, и процессор тратит намного меньше ресурсов. Используется одно прерывание 8кГц по которому выдается в SPI очередной байт и запускается ADC.
PetrM вне форума   Ответить с цитированием
Старый 21.06.2007, 12:36   #3
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 49
Сообщений: 4,100
Вес репутации: 1883/107
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Как лучше подключить кодек к PIC?

Цитата:
Сообщение от PetrM Посмотреть сообщение
Не совсем ясно, зачем автор для работы со звуком 8кГц х 8бит, использует кодек. Обычно внешние кодеки используют для получения более качественного звука.
Я в 8битных приложениях использую в качестве DAC MCP41050, а ADC собственный ADC PICа. Для фильтрации достаточно RC цепочки, в крайнем случае фильтр 2 порядка на операционнике. Схема получается намного дешевле, и процессор тратит намного меньше ресурсов. Используется одно прерывание 8кГц по которому выдается в SPI очередной байт и запускается ADC.
Исползуется эта схема потому, что такой кодек имеет необходимые фильтры+это вовсе не 8 битный звук а 12-ти битный за счет компандирования сжатый до 8 бит. Подоюные кодеки для телефонии самая калбаса. Некоторые из таких кодеков эффективно подавляют 50-60Гц, создают близкую к идеальной полосу частот. На рассыпухе такую фигню явно затратнее делать.
IgorV вне форума   Ответить с цитированием
Старый 23.06.2007, 11:00   #4
Gauss1973
Junior Member
 
Регистрация: 23.06.2007
Адрес: GMT +8
Возраст: 46
Сообщений: 8
Вес репутации: 103/0
Gauss1973 will become famous soon enoughGauss1973 will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

Я использовал MC145483 и PIC18F6520-(8MHz*4).
-MCLK формировал с помощью ШИМ-модулятора. Частота была 250кГц скважность 50 на 50.
-FSR и FST были соединены вместе и сигнал формировал с помощью ШИМ-модулятора. Частота была 7.8125 кГц скважность 50 на 50.
-Для передачи и приёма данных BCLKT, DR, DT подключил к SPI. (Mode 0,0 SPI, end of output time sampling)
-BCLKT - частота была 2000 кГц и появляласть только в моменты приёма/передачи данных
-BCLKR - был припаян к массе (16-ти битный режим)
Никаких инверторов не использовал.
Gauss1973 вне форума   Ответить с цитированием
Старый 25.06.2007, 10:15   #5
Николай
Senior Member
 
Регистрация: 02.03.2007
Адрес: Ульяновск
Возраст: 43
Сообщений: 109
Вес репутации: 103/50
Николай will become famous soon enoughНиколай will become famous soon enough
Отправить сообщение для Николай с помощью ICQ
По умолчанию Re: Как лучше подключить кодек к PIC?

Код:
Я использовал MC145483 и PIC18F6520-(8MHz*4).
-MCLK формировал с помощью ШИМ-модулятора. Частота была 250кГц скважность 50 на 50.
-FSR и FST были соединены вместе и сигнал формировал с помощью ШИМ-модулятора. Частота была 7.8125 кГц скважность 50 на 50.
-Для передачи и приёма данных BCLKT, DR, DT подключил к SPI. (Mode 0,0 SPI, end of output time sampling)
-BCLKT - частота была 2000 кГц и появляласть только в моменты приёма/передачи данных
-BCLKR - был припаян к массе (16-ти битный режим)
С частотой 8кГц отправляю 0x7f, получаю сегда 0x00?
Николай вне форума   Ответить с цитированием
Старый 25.06.2007, 11:07   #6
Gauss1973
Junior Member
 
Регистрация: 23.06.2007
Адрес: GMT +8
Возраст: 46
Сообщений: 8
Вес репутации: 103/0
Gauss1973 will become famous soon enoughGauss1973 will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

Цитата:
Сообщение от Николай Посмотреть сообщение
-BCLKR - был припаян к массе (16-ти битный режим)[/code]
С частотой 8кГц отправляю 0x7f, получаю сегда 0x00?
Было два разных устройства (приёмник и передатчик): в одном данные только читались с кодека. В другом только воспроизводились.
Gauss1973 вне форума   Ответить с цитированием
Старый 25.06.2007, 11:39   #7
Николай
Senior Member
 
Регистрация: 02.03.2007
Адрес: Ульяновск
Возраст: 43
Сообщений: 109
Вес репутации: 103/50
Николай will become famous soon enoughНиколай will become famous soon enough
Отправить сообщение для Николай с помощью ICQ
По умолчанию Re: Как лучше подключить кодек к PIC?

Я не совсем понял
Код:
Было два разных устройства (приёмник и передатчик): в одном данные только читались с кодека. В другом только воспроизводились.
Я использую МС145481, голос в обе стороны.
Частота 9216*4, соответственно по SPI /16 =2304кГц. PIC18F6621 инициирую SPI master. Частоту 8 кГц формирую шимом используя TMR2, на этот же таймер включил прерывания и отправляю 0x7f. После этого происходить прерывания SPI и я получаю, что SSPBUF всегда равен нулю???
Николай вне форума   Ответить с цитированием
Старый 25.06.2007, 12:53   #8
Gauss1973
Junior Member
 
Регистрация: 23.06.2007
Адрес: GMT +8
Возраст: 46
Сообщений: 8
Вес репутации: 103/0
Gauss1973 will become famous soon enoughGauss1973 will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

я так настраиваю ШИМ:

//Настройка 8kHz-синтезатора ================================================== ===========
//init PWM
//SET PWM PERIOD
PR4=63;
//SET PWM OUT
// TRISG0=0;
//SET ENABLE TMR4
T4CON=0B00000111; //PRE=16 POST=1
TMR4IP =0;
TMR4IE =1;
TMR4IF=0;
//SET PWM DUTY CYCLE
//установка DUTY ШИМ
DUTY = 128;
DCCP3X=0; //CCP1CON,5
DCCP3Y=0; //CCP1CON,4
if(DUTY & 0B00000001){DCCP3Y=1;};//0 bit
if(DUTY & 0B00000010){DCCP3X=1;};//1 bit
WREG= DUTY;
CCPR3L = WREG >> 2;
//Настройка 256kHz-синтезатора MCLK ================================================== =========
//init PWM
//SET PWM PERIOD
PR2=31;
//SET PWM OUT
// TRISC2=0;
//SET ENABLE TMR2
T2CON=0B00000100; //PRE=1 POST=1
TMR2IF=0;
//SET PWM DUTY CYCLE
DUTY = 64;
DC1B1=0; //CCP1CON,5
DC1B0=0; //CCP1CON,4
if(DUTY & 0B00000001){DC1B0=1;};//0 bit
if(DUTY & 0B00000010){DC1B1=1;};//1 bit
WREG= DUTY;
CCPR1L = WREG >> 2;
//================================================== =================================
//SET CONFIGURE CCP3 MODULE FOR PWM
TMR4=62;//PR4=63 для точной синхронизации
TMR2=2;//PR2=31 для точной синхронизации
//SET CONFIGURE CCP1 MODULE FOR PWM
CCP1CON=0B00001100; //PWM ON
CCP3CON=0B00001100; //PWM ON
//================================================== =================================
Gauss1973 вне форума   Ответить с цитированием
Старый 25.06.2007, 13:06   #9
Gauss1973
Junior Member
 
Регистрация: 23.06.2007
Адрес: GMT +8
Возраст: 46
Сообщений: 8
Вес репутации: 103/0
Gauss1973 will become famous soon enoughGauss1973 will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

теперь прерывания:

void interrupt low_priority LOW_ISR(void){
//#pragma regsused w fsr2l fsr2h //-for PICC-18 v8.35pl3
#pragma regsused// wreg//-for PICC-18 v9.50
//----------------------------------------------------------------------------------
SSPBUF = DATATODAC_H; //выдать данные в MC14583
//----------------------------------------------------------------------------------
WREG_TEMP=WREG; //save working register
FSR0H_TEMP = FSR0H; //save FSR0H register
FSR0L_TEMP = FSR0L; //save FSR0H register
NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
asm("movf _SSPBUF,w,c");//считать данные из приёмного буфера SPI
SSPBUF = DATATODAC_L;//выдать данные в MC14583
NOP();
asm("movwf _SPIBUFH");//TEST
DATATODAC_H = SPIBUFH;//TEST
//----------------------------------------------------------------------------------
*ptr = WREG;
++ptr;
//----------------------------------------------------------------------------------
NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
//----------------------------------------------------------------------------------
if(--intcounter){nop();}else{LastIntFlag =1;};//soon synchronization
//----------------------------------------------------------------------------------
TMR4IF = 0;
asm("movf _SSPBUF,w,c");//считать данные из приёмного буфера SPI
NOP();
asm("movwf _SPIBUFL");//TEST
DATATODAC_L = SPIBUFL;//TEST
//----------------------------------------------------------------------------------
*ptr = WREG;
++ptr;
//----------------------------------------------------------------------------------
//isr code can go here or be located as a call subroutine elsewhere
WREG=WREG_TEMP; //restore working register
FSR0H = FSR0H_TEMP; //restore FSR0H register
FSR0L = FSR0L_TEMP; //restore FSR0_L register
};

извини что много мусора - выдрас с древнего проекта и уже не всё помню. здесь в прерываниях читаются данные из АЦП кодека, запоминаются в буферных регистрах и на следующем прерывании опять выдаются в ЦАП кодека.Помнится что код работал без проблем.
Gauss1973 вне форума   Ответить с цитированием
Старый 25.06.2007, 13:19   #10
Gauss1973
Junior Member
 
Регистрация: 23.06.2007
Адрес: GMT +8
Возраст: 46
Сообщений: 8
Вес репутации: 103/0
Gauss1973 will become famous soon enoughGauss1973 will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

настройка SPI была такой:
void SPISetup(
void){ //настройка модуля SPI
bit_clr(SSPCON1,5); //SSPEN=off
//настройка SPI
TRISC3=0;
TRISC5=0;
SSPSTAT=0B11000000; //Mode 0,0 SPI, end of output time sampling
SSPCON1=0B00100001; //Mode 0,0 SPI Master Mode, 1/16 Tosc bit SSP is on
asm("movf _SSPBUF,w,c"); //очистить приёмный буфер
asm("movf _SSPBUF,w,c"); //очистить приёмный буфер
//------------------------------------------------------
}
Gauss1973 вне форума   Ответить с цитированием
Старый 25.06.2007, 16:57   #11
Николай
Senior Member
 
Регистрация: 02.03.2007
Адрес: Ульяновск
Возраст: 43
Сообщений: 109
Вес репутации: 103/50
Николай will become famous soon enoughНиколай will become famous soon enough
Отправить сообщение для Николай с помощью ICQ
По умолчанию Re: Как лучше подключить кодек к PIC?

Что -то все равно считываю нули из буфера SSPBUFF. Может есть какие нибудь особенности, нюансы аппаратного подключения????
Николай вне форума   Ответить с цитированием
Старый 25.06.2007, 20:09   #12
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 49
Сообщений: 4,100
Вес репутации: 1883/107
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Как лучше подключить кодек к PIC?

Цитата:
Сообщение от Gauss1973 Посмотреть сообщение
asm("movf _SSPBUF,w,c"); //очистить приёмный буфер
asm("movf _SSPBUF,w,c"); //очистить приёмный буфер
//------------------------------------------------------
}
А в хитече можно так не заходя в АСМ:
Код:
RCREG;
SSPBUF;
или подобные, будет производится чтение из регистра, но никуда не пишется ничего. Т.е. практически тоже что и в асме у тебя.

Более того, что обычно не пишут в книжках т.к. это чудачество какое то:
Код:
(1234); // такая запись не вызовет ошибку, максимум предупреждение. 

(" некий текст без возможности получить на него ссылку");
- тоже не вызовет ошибку. Текст будет болтаться где-то в теле проги, там где константы лежат.

Последний раз редактировалось IgorV; 25.06.2007 в 20:18.
IgorV вне форума   Ответить с цитированием
Старый 26.06.2007, 06:17   #13
Gauss1973
Junior Member
 
Регистрация: 23.06.2007
Адрес: GMT +8
Возраст: 46
Сообщений: 8
Вес репутации: 103/0
Gauss1973 will become famous soon enoughGauss1973 will become famous soon enough
По умолчанию Re: Как лучше подключить кодек к PIC?

Цитата:
Сообщение от Николай Посмотреть сообщение
Что -то все равно считываю нули из буфера SSPBUFF. Может есть какие нибудь особенности, нюансы аппаратного подключения????
тогда для начала нужно попробовать только считывать данные из кодека, (ничего на записывать в него - аппаратно отсоединить вывод кодека) . Сигналы управления кодеком должны быть синхронны - сигнал начала кадра(8К) должен чётко совпадать по фазе с сигналом тактирования (256К). Сразу по фронту сигнала начала кадра нужно начинать обмен по SPI(чтение/передача первого байта), потом через время, достаточное для передачи байта (можно также смотреть флаг BF), начать второй обмен (второй байт). У меня не работал кодек , если все эти сигналы были не синхронны... Также когда я в прерываниях читал данные из кодека и момент чтения "плавал" на пару мксек - искажалась форма сигнала на несколько процентов.
Gauss1973 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, как лучше подключить к PIC'у мощный сервопривод? Gene1982 Источники питания и силовая электроника 9 29.07.2008 16:28
Как лучше передать число int на компьютер? Gene1982 Продукция MICROCHIP 4 08.04.2008 23:56
Как получить max. скорость для связи PIC c ПК ? Синклер Продукция MICROCHIP 21 19.03.2008 10:51
DS18b20 как лучше подключить за 15 метров dr_Sash Продукция MICROCHIP 18 07.12.2007 13:22
RC цепочка по питанию PIC, как считать ? Синклер Продукция MICROCHIP 1 20.03.2007 17:26


Часовой пояс GMT +3, время: 09:33.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot