Allregia 9 18 августа, 2011 Опубликовано 18 августа, 2011 · Жалоба возникала непонятка с burst режимом в LPC1768: включен 1 вход, подключенный к потенциометру, данные с его регистра рещультата переписываются в ЦАП. Кручу потенциометр и смотрю осциллографом выход ЦАПа - там все меняется о 0 до 3в, но - периодически проскакивают ипульсы, то вверх то вниз, колеблящейся амплитуды, доходящей до 0 и до питания. Если ставлю потенциометр в 0, то на выходе ЦАПа ноль, с положительными импульсами, если ставлю потенциометр в макс - на вхыоде 3в и импульсами до нуля (не всегда. амплитуд дрожит). Длительность импульсов около 8мкс. Про работает на 100мгц, частота периферии вся 1/4. В программе работает только прерывание SysTick и мертвый цикл в мейне: Код такой: //------------------------------------------------------------------------------ void ADC_Init (void) { LPC_PINCON->PINSEL3 &= ~(3UL<<30); /* P1.31 is GPIO */ LPC_PINCON->PINSEL3 |= (3UL<<30); /* P1.31 is AD0.5 */ LPC_SC->PCONP |= (1<<12); /* Enable power to ADC block */ LPC_ADC->ADCR = (1<< 5) | /* select AD0.5 pin */ (4<< 8) | /* ADC clock is 25MHz */ (1<<16) | // burst mode (1<<21); /* enable ADC */ } //-------------------------------------------------------------------------------- void DAC_Init(void){ LPC_PINCON->PINSEL1 |= (2UL<<20); /* set p0.26 to DAC output */ LPC_DAC->DACCTRL |=(1<<1); // dowble buffer } //-------------------------------------------------------------------------------- int main(void){ if (SysTick_Config(SystemCoreClock / 1000)) { // Setup SysTick Timer for 1 msec interrupts while (1); // Capture error } halPORTS_Config(); // конфигурирование портов DAC_Init(); ADC_Init(); while(1){ LPC_DAC->DACR = 0xFFC0 & LPC_ADC->ADDR5; } } Да, в периоде этих пичков я никакой закономерности не увидел. Проблема точно в АЦП, т.к. если я просто постоянно пишщу в ЦАП констанку, то на выходе пичков нет. Возможно это из-за асинхронного (по сравнению с конверсией) чтения регистра результата АЦП, но тогда я не очень понимаю как барст должен работать. Я полагал что его можно читать в произвольный момент времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 18 августа, 2011 Опубликовано 18 августа, 2011 · Жалоба Кажется, это уже обсуждалось: треск АЦП LPC1768. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 18 августа, 2011 Опубликовано 18 августа, 2011 · Жалоба Барст оказался не причем: когда я его убрал (не устанавливаю 16-й бит в конциге АЦП), а сделал вручную: while(1){ LPC_ADC->ADCR |= (1<<24); /* start conversion */ while (!(LPC_ADC->ADGDR & (1UL<<31))); /* Wait for Conversion end */ LPC_DAC->DACR = LPC_ADC->ADGDR &0xFFC0; LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */ } Получил те-же импульсы! Кажется, это уже обсуждалось: треск АЦП LPC1768. Спасибо, сейчас почитаю. Почитал. Так что, получается это глюк этого процессора, и его АЦП вообще нельзя пользоваться, если не фильтровать эти глитчи?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 19 августа, 2011 Опубликовано 19 августа, 2011 · Жалоба Чтобы убрать эти глитчи, написал вот такой медианнный фильтр по 3-м точкам. Но может мжно как-то проще? uint32_t Med(uint32_t D){ static uint32_t DataArray[3]={0,0,0}; uint32_t Res,Max, Min,MaxV, MinV,i; Res=0; Max=Min=0; DataArray[2]=D; MaxV=DataArray[Max]; MinV=DataArray[Min]; for(i=1;i<3;i++){ // search max/min if(DataArray[i]>MaxV){ Max=i; MaxV=DataArray[i]; } if(DataArray[i]<MinV){ Min=i; MinV=DataArray[i]; } } for(i=0;i<3;i++){ // select index not equal to Min or Max if((i!=Min)&&(i!=Max)){ Res=i; break; } } DataArray[0]=DataArray[1]; DataArray[1]=DataArray[2]; return DataArray[Res]; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 21 августа, 2011 Опубликовано 21 августа, 2011 · Жалоба Народ, ну помогите-же кто-нибудь! простой код: while(1){ while (!((Res=LPC_ADC->ADDR5) & (1UL<<31))); // Wait for Conversion end LPC_DAC->DACR = Res &0xFFC0; } Потоенциометр на входе АЦП стоит на нуле, что на выходе ЦАПа - видно на фотке. Медианный фильтр что я привел выше - не помогает. Ну я уже не знаю что делать!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 23 августа, 2011 Опубликовано 23 августа, 2011 · Жалоба В итоге, решили от LPC1768 в окончательной версии продукта избавится, поставим PIC32. На надежность и качество изделий Микрочипа вроде никогда нареканий небыло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
porty 0 23 августа, 2011 Опубликовано 23 августа, 2011 · Жалоба опыт показал что это ошибка внутреннего устройства контроллера, где то результат либо не защелкивается либо мультипликсируется как попало. Но если подшаманить настройками никак не влияющими на ADC, например скоростью SPI то можно получить гарантированную работоспособность ADC на разных кристаллах в разных условиях с полным циклом испытаний (климатика, е-м совместимость и тд). Как побобрать - мы подбирали наугад. Просто брали например настройки делителя SPI и повышали или понижали скорость благо запас был. При этом всё стабильно работало, как бы не дорабатывай программу алгоритмически не изменяя скорости работы переферии и частот. Так же можно было изменять режимы работы ADC и разные периоды оцифровки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 23 августа, 2011 Опубликовано 23 августа, 2011 · Жалоба Так же можно было изменять режимы работы ADC и разные периоды оцифровки. Пробовал. На "гличи" это не влияло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
porty 0 23 августа, 2011 Опубликовано 23 августа, 2011 · Жалоба насчёт стабильности у LPC1768 проблемы не только с АЦП а вообще с любым внешним интерфейсом, как оказалось что захват значения таймера по фронту сигнала очень сильно глючит если этот фронт имеет время нарастания/спада более 1нс и тд. А так же с SPI - выхода SPI имеют время нарастания и спада от 5 до 10нс что очень плохо для FPGA без входов шмитта ибо у них быстродействие сотни МГц и приводит к ложному клоку во время перехода в области неопределённого состояния. Тут сам чип весьма неудачный. но если нужно дёшево то в принципе фильтрами обвешать реально возможно и всё будет стабильно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 26 августа, 2011 Опубликовано 26 августа, 2011 · Жалоба Да, я уже понял что этот проц какой-то недоделанный :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 28 августа, 2011 Опубликовано 28 августа, 2011 · Жалоба Да, я уже понял что этот проц какой-то недоделанный :( Причем LPC2368 работает без нареканий... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 13 сентября, 2011 Опубликовано 13 сентября, 2011 · Жалоба LPC1778 тоже вроде не глючит (в смысле АЦП)... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 18 сентября, 2011 Опубликовано 18 сентября, 2011 · Жалоба LPC1778 тоже вроде не глючит (в смысле АЦП)... Возможно. Зато errata по RTC и USB Host убивает наповал. А в свежей сентябрьской errata добавили еще и ограничение по скорости ISP 57600. Фантастика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 19 сентября, 2011 Опубликовано 19 сентября, 2011 · Жалоба А где сентябрьская? :smile3046: на сайте вижу English LPC176x Errata Sheet V9 (Jun 1, 2011) Или NXP как всегда тормозят с обновлением ссылок? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 19 сентября, 2011 Опубликовано 19 сентября, 2011 · Жалоба Нашел случайно через гугль тут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться