Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738

Цифровой осциллограф на LPC1768 LangTiger

27.12.2014, 12:35. Показов 6849. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Хочу набраться теории и опыта в программировании ARM и Cortex. Для освоения выбрал нетривиальную тему - "Осциллограф".
За основу взял демоборд с LPC1768 LangTiger (все что нужно на первое время есть на борту).
Написал обработчик прерывание АЦП (накопление выборок) и процедуру вывода на дисплей данных, накидал простейший алгоритм синхронизации.

Подскажите алгоритмы синхронизации. Подскажите как лучше накапливать выборки: в прерываниях по таймеру с определенным интервалом или по прерываниям от АЦП и измерением времени накопления выборок?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        for (m = 1; m < 0x7FF - 320; m++){
            
             temp0 = (ADCBuffer[m-1]/256) & 0xFF;
             temp1 = (ADCBuffer[m]/256) & 0xFF;
            temp2 = (ADCBuffer[m+10]/256) & 0xFF;
 
            if (((temp0 < 127 & temp0 > 110)& temp2 > 127 + i) | z > 0){  //Поиск условия синхронизации
                z++;
                LCD_DrawLine( oldADC[z-1], z-1, oldADC[z], z , White ); //Стирание предыдущих линий
                oldADC[z-1] = temp0;                
                LCD_DrawLine( temp0, z-1, temp1, z , Black );   //Вывод новых линий          
                if (z == 320) break;
            }
 
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2014, 12:35
Ответы с готовыми решениями:

Простой цифровой осциллограф.
Сделал себе простенький цифровой осциллограф. Скорее даже, осциллографический тестер. Конечно, не бог весть что, но для...

Цифровой осциллограф. Самокалибровка
Мой первый осциллограф. Hantek DSO6074BC (pc based). Учусь пользоваться, изучаю мануал. На &quot;передней панели&quot; имеются входы...

Цифровой осциллограф из конструктора
Здравствуйте ! Подскажите пожалуйста, этого конструктора достаточно будет для того чтобы собрать из него цифровой осциллограф ? Или...

55
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
29.12.2014, 22:21  [ТС]
Студворк — интернет-сервис помощи студентам
Спасибо за поддержку.
Примеры как раз и изучаю. АЦП включается после настройки DMA. В LPC каналы настраиваются вручную указанием источника данных
C
1
2
3
    LPC_GPDMACH0->DMACCConfig   = ......
                            | (4 << 1)                 // source peripheral (1 - 5) = ADC
    LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t) &(LPC_ADC->ADCR);
АЦП в одиночном только для проверки работы DMA.
АЦП 12-ти битный, а вот DMA с ним может работать только в режиме 32 бита.

Добавлено через 18 минут
Цитата Сообщение от korsaj Посмотреть сообщение
Если я использую 1 канал то указатель связанного списка я указываю 0 или его же, как сделано в коде выше?
Нашел ответ: Должен быть равен 0, так модуль определит что это последний элемент связанного списка.
Так что он у меня правильно записал одними и теми же значениями весь массив.
Почитал еще даташит на мк и заметил что инициализировано не все..

Добавлено через 1 час 41 минуту
Есть два примера работы с DMA.
Первый ADC - DMA - RAM, написан с использованием библиотеки.
Второй RAM - DMA - RAM, написан вчистую..
Буду основыватся на втором чтобы лучше понять работу модуля DMA.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
31.12.2014, 17:14  [ТС]
Достал меня этот DMA.
Не могу его заставить читать данные из АЦП. Точнее сказать он читает, заполняет массив, только первым считанным значением. А почему так я не пойму...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
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<< 16) |
                          (1<< 5) |              /* select AD0.5 pin */
                          (0<< 8) |              /* ADC clock is 50MHz/(0+1) */
                          (1<<21);               /* enable ADC */ 
 
    LPC_ADC->ADINTEN = 1<<5;//  | 1<<8;             /* Interrupt and Reset on MR0 */
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void DMA_Init (void) {
    
    NVIC_DisableIRQ(DMA_IRQn);
    NVIC_SetPriority(DMA_IRQn, 5);
 
    LPC_SC->PCONP       |=  (1<<29);               /* Enable power to PCGPDMA block */
 
    LPC_GPDMA->DMACSync   = (1<<6);                                // enable synchro logic for all reqs
 
    /* clear all interrupts on channel 0 */
    LPC_GPDMA->DMACIntTCClear = 0x01;
    LPC_GPDMA->DMACIntErrClr = 0x01;
 
    LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t) &(LPC_ADC->ADGDR);     //istochnik dannih
    LPC_GPDMACH0->DMACCDestAddr = (uint32_t) mADCBuffer;            //priemnik dannix;
    LPC_GPDMACH0->DMACCLLI      = (uint32_t) 0;                     // last linked lists
    LPC_GPDMACH0->DMACCControl  = 0x7FF                             // transfer size (0 - 11) = 2048
                            | (7 << 12)                    // source burst size (12 - 14) = 256 Byte         
                            | (7 << 15)                    // destination burst size (15 - 17) = 256 Byte    
                            | (1 << 18)                    // source width (18 - 20) = 16 bit
                            | (1 << 21)                    // destination width (21 - 23) = 16 bit
                            | (0 << 26)                    // source increment (26) = no increment
                            | (1 << 27)                    // destination increment (27) = increment
                            | (1 << 31);                   // terminal count interrupt enabled
 
    LPC_SC->DMAREQSEL &= 0xEEFFFFFF; 
    LPC_GPDMA->DMACConfig = 0x01;   /* Enable DMA channels, little endian */
 
    LPC_GPDMACH0->DMACCConfig   =  0                   // channel enabled (0)
                            | (4 << 1)                 // source peripheral (1 - 5) = ADC
                            | (0 << 6)                 // destination peripheral (6 - 10) = none
                            | (2 << 11)                // flow control (11 - 13) = per to mem
                            | (1 << 14)                // (14) = mask out error interrupt
                            | (1 << 15)                // (15) = mask out terminal count interrupt
                            | (0 << 16)                // (16) = no locked transfers
                            | (0 << 18);               // (27) = no HALT    
    
    NVIC_EnableIRQ(DMA_IRQn); 
    LPC_GPDMACH0->DMACCConfig |= 1;                     //Enable channel
    while ( !(LPC_GPDMA->DMACConfig & 0x01) );      
}
C
1
2
3
4
void ADC_StartCnv (void) {
    LPC_ADC->ADCR &= ~(7<<24);                     /* stop conversion  */
    LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void DMA_IRQHandler (void) 
{
  uint32_t regVal;
  regVal = LPC_GPDMA->DMACIntTCStat;
  if ( regVal )
  {
    mFADCOK = 1;
    LPC_GPDMA->DMACIntTCClear |= regVal;
    LPC_GPDMACH0->DMACCControl  |= 0x7FF;
    LPC_GPDMACH0->DMACCDestAddr = (uint32_t) mADCBuffer;
    LPC_GPDMACH0->DMACCConfig |= 1; //Enable channel
  } 
  regVal = LPC_GPDMA->DMACIntErrStat;
  if ( regVal )
  {
    LPC_GPDMA->DMACIntErrClr |= regVal;
  } 
  return;
}
Я не пойму что я делаю не так. Тот пример что у меня есть он рассчитан на однократное преобразование..
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
03.01.2015, 12:25  [ТС]
Удалось таки его запустить. Нужно было сделать вот так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
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<< 16) |
                          (1<< 5) |              /* select AD0.5 pin */
                          (0<< 8) |              /* ADC clock is 50MHz/(0+1) */
                          (1<<21);               /* enable ADC */ 
 
}
Не пойму.., АЦП сам по себе останавливается через короткий случайный промежуток времени (1-9 секунд), причем все регистры остаются без изменений..

Добавлено через 1 час 1 минуту
Если закомментировать обращение к буферу с данными АЦП, то все стабильно работает. Видимо что-то не так делаю с атомарным доступом..

Добавлено через 14 часов 50 минут
Если напряжение на входе АЦП не изменять все работает, но только стоит сдвинуть ручку переменника или подать на вход сигнал, все тут же замирает..

Добавлено через 4 часа 39 минут
Победил я эту "животИну"!!!
Просто нужно мне даташит внимательней читать.
Автоматический режим АЦП запускается сразу после установки бита BURST и не зависит от битов START, а я делал по другому устанавливал BURST, а когда нужно было запускать преобразование ставил START. И останавливал преобразование тем же битовым полем START. Что совсем не правильно..

Добавлено через 1 час 46 минут
Вот что получилось.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
int main(void){
  SystemInit();
  ADC_Init();
  DMA_Init();
  ADC_StartCnv();
  . . . . . . . . . . .
Инициализация АЦП
C
1
2
3
4
5
6
7
8
9
10
11
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 */
                          (0<< 8) |              /* ADC clock is 50MHz/(0+1) */
                          (1<<21);               /* enable ADC */ 
}
Инициализация DMA
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void DMA_Init (void) {
    
    NVIC_DisableIRQ(DMA_IRQn);
    NVIC_SetPriority(DMA_IRQn, 5);
 
    LPC_SC->PCONP       |=  (1<<29);               /* Enable power to PCGPDMA block */
 
    LPC_GPDMA->DMACSync   = (1<<6);                                // enable synchro logic for all reqs
 
    /* clear all interrupts on channel 0 */
    LPC_GPDMA->DMACIntTCClear = 0x01;
    LPC_GPDMA->DMACIntErrClr = 0x01;
 
    LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t) &(LPC_ADC->ADGDR);     //istochnik dannih
    LPC_GPDMACH0->DMACCDestAddr = (uint32_t) mADCBuffer;            //priemnik dannix;
    LPC_GPDMACH0->DMACCLLI      = (uint32_t) 0;                     // last linked lists
    LPC_GPDMACH0->DMACCControl  = 0x7FF                             // transfer size (0 - 11) = 2048
                            | (0 << 12)                    // source burst size (12 - 14) = 1 Byte         
                            | (7 << 15)                    // destination burst size (15 - 17) = 256 Byte    
                            | (1 << 18)                    // source width (18 - 20) = 16 bit
                            | (1 << 21)                    // destination width (21 - 23) = 16 bit
                            | (0 << 26)                    // source increment (26) = no increment
                            | (1 << 27)                    // destination increment (27) = increment
                            | (1UL << 31);                   // terminal count interrupt enabled
 
    LPC_SC->DMAREQSEL &= 0xEEFFFFFF; 
 
    LPC_GPDMA->DMACConfig = 0x01;   /* Enable DMA channels, little endian */
    while ( !(LPC_GPDMA->DMACConfig & 0x01) );
 
    LPC_GPDMACH0->DMACCConfig   =  0                   // channel enabled (0)
                            | (4 << 1)                 // source peripheral (1 - 5) = ADC
                            | (0 << 6)                 // destination peripheral (6 - 10) = none
                            | (2 << 11)                // flow control (11 - 13) = per to mem
                            | (1 << 14)                // (14) = mask out error interrupt
                            | (1 << 15)                // (15) = mask out terminal count interrupt
                            | (0 << 16)                // (16) = no locked transfers
                            | (0 << 18);               // (27) = no HALT    
    
    NVIC_EnableIRQ(DMA_IRQn); 
    LPC_GPDMACH0->DMACCConfig |= 1;                     //Enable channel   
}
Запус преобразования
C
1
2
3
4
5
6
void ADC_StartCnv (void) {
 
  LPC_GPDMACH0->DMACCConfig |= 1;   //Enable DMA channel
 
  LPC_ADC->ADCR |=  (1<<16);                     /* start Burst */
}
Ожидание готовности и получение указателя на буфер данных АЦП
C
1
2
3
4
5
6
7
uint16_t* mGetADCBuffer(void){
 
    while (mFADCOK == 0);
    mFADCOK = 0;
 
    return mADCBuffer;
}
Обработчик прерываний от DMA
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void DMA_IRQHandler (void){
  uint32_t regVal;
 
  regVal = LPC_GPDMA->DMACIntTCStat;
  if ( regVal )
  {
    LPC_ADC->ADCR &=  ~(1<<16);                     /* stop Burst */
 
    if (LPC_GPDMACH0->DMACCConfig & 1){
       LPC_GPDMACH0->DMACCConfig = 0;              //enable channel
    }
 
    mFADCOK = 1;
 
    LPC_GPDMA->DMACIntTCClear |= regVal;            /* clear all interrupt */
 
    LPC_GPDMACH0->DMACCControl  &= ~0x7FF;          /* clear transfer size */
    LPC_GPDMACH0->DMACCControl  |= 0x7FF;           /* set transfer size */
    LPC_GPDMACH0->DMACCDestAddr = (uint32_t) mADCBuffer;  /* set buffer pointer  */
  } 
 
  regVal = LPC_GPDMA->DMACIntErrStat;
  if ( regVal )
  {
    //DMAErrCount++;
    LPC_GPDMA->DMACIntErrClr |= regVal;
  } 
  return;
}


Добавлено через 15 часов 42 минуты
С дисплеем все сложнее - он работает через 16-ти битную параллельную шину, а перевести его на SPI не возможно. Из-за особенностей реализации протокола нет возможности использовать DMA.
1
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
04.01.2015, 20:10  [ТС]
Сделал оформление дисплея. Алгоритм следующий - попиксельно выводится весь экран одной функцией, а цвет пикселя берется из отдельной функции в которой реализован алгоритм программного рисования. Это в дальнейшем даст возможность восстановления цветовой схемы экрана при стирании осциллограммы и других выводимых примитивов.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//---------------------------------------------------------------------
void LCD_PrintFrame(uint16_t color){
    uint16_t    x, y;   
 
    LCD_SetCursor(0,0);
    LCD_WriteIndex(0x0022);
 
    for (x = 0; x < 320; x++)
    {
        for( y = 0; y < 240; y++ ){ 
            LCD_WriteData(GetFrameColor(x, y));
        }
    }
}
 
//---------------------------------------------------------------------
uint16_t GetFrameColor(uint16_t x, uint16_t y){
    uint16_t color;
    if (x <= 288){
        if (y <= 32){              //Niz
            color = 0x1111;       
        }else if (y <= 32+193){   //Centralnaya oblast
            if ((y - 33)%24 == 0 | (x%24 == 0)){ 
                if ((y - 33)%6 == 0 & x%6 == 0 | y == 33 
                    | y == 33+192 | x == 0 | x == 288
                    | (x == 144 & (y-33)%3 == 0)
                    | ((y == 33 + 24*4) & x%3 == 0)){
                    color = 0x4444;
                }else{
                    color = 0x0000;
                }
            }else{
                color = 0x0000;
            }
        }else{                     //Verh
            color = 0x1111;
        }
    }else{
        color = 0x1111;        //Pravii krai
    }
    return color;
}
Миниатюры
Цифровой осциллограф на LPC1768 LangTiger  
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
04.01.2015, 20:15  [ТС]
Верхнее поле 16 пикселей, нижнее 32, левое 32, центральное поле 288х192.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
05.01.2015, 01:11  [ТС]
Первый вывод на новый дисплей
Миниатюры
Цифровой осциллограф на LPC1768 LangTiger  
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
05.01.2015, 13:21  [ТС]
Столкнулся с проблемой стирания выведенной осциллограммы.
Попробовал 3 метода:
1 - перерисовка всей области вывода осциллограммы - появляется мерцание и низкая яркость выводимой осциллограммы;
2 - стирание выведенной осциллограммы, запомненной во временный буфер и вывод новой с запоминание ее во временный буфер - мерцание появляется в меньшей степени, но все же присутствует;
3 - стирание выведенной осциллограммы по отрезкам (осциллограмма строится отрезками), стер предыдущий (запомненный) отрезок / нарисовал новый - мерцание практически отсутствует, но появляются пропуски на осциллограмме из-за наложений отрезков.

Кто что подскажет?
Делать видеобуфер и в нем подготавливать изображение к выводу и выводить или есть еще варианты?
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
05.01.2015, 13:38  [ТС]
Фото 3-го варианта:
Миниатюры
Цифровой осциллограф на LPC1768 LangTiger  
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
05.01.2015, 13:45  [ТС]
Тоже самое только крупнее
Миниатюры
Цифровой осциллограф на LPC1768 LangTiger  
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
05.01.2015, 19:44  [ТС]
Есть идея. Дабы сэкономить ОЗУ и время ядра, сделаю следующим образом: для каждого столбца возьму один 16-ти разрядный регистр в котором будет хранится начало выводимой области (32..224) и количество закрашенных пикселей (0-192). Соответственно при выводе новой осциллограммы нужно будет проверить регистр для выводимого столбца, стереть закрашенную область (вывести фон) и заполнить столбец дисплея и регистр новыми значениями.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
06.01.2015, 00:26
Ты делай делай и исходники выкладывай. Может получится Российский осциллограф не хуже там всяких "риглаф"
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
06.01.2015, 00:33  [ТС]
Я то делаю ))
Я тут еще насчупил счупальцами исходники на DS0201. Можно будет почерпнуть немного ))
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.01.2015, 11:00
Цитата Сообщение от korsaj Посмотреть сообщение
Я тут еще насчупил счупальцами исходники на DS0201.
Таких исходников - пруд пруди, почти для каждого кита для кортексов М3 и более с экраном и тачскрином (TI, ST, NXP). Вопрос вашей реализации заключается лишь в том, что для быстрого вывода очень желательно наличие параллельной шины для вывода на экран через DMA. Это заметно разгрузит и без того перегруженный в осциле процессор.
Иначе, как бы вы ни мучались, все равно будет "помаргивать", "лагать", и "сыпаться" . Любая добавка с масками на экране, контролем области визирования и т.д. и т.п. потребует заметно более мощного проца, но и естественно - параллельного а не последовательного вывода на экран.

Добавлено через 4 минуты
ЗЫ: у вас же есть предел последовательной записи в экран - это 18МГц по частоте SPI (хотя по факту и на 25 работает, тут зависит от схемотехники и длины проводов), и собственно, возможности самого экрана - не факт что он может работать и на 18МГц.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
06.01.2015, 12:41  [ТС]
Спасибо. Я уже писал.
Цитата Сообщение от korsaj Посмотреть сообщение
С дисплеем все сложнее - он работает через 16-ти битную параллельную шину, а перевести его на SPI не возможно. Из-за особенностей реализации протокола нет возможности использовать DMA.
Для моего экрана ограничение 13 МГц по SPI и 510 кГц по параллельной шине.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.01.2015, 12:56
Цитата Сообщение от korsaj Посмотреть сообщение
Из-за особенностей реализации протокола нет возможности использовать DMA.
не бывает такого. Если нельзя втупую грузить данные из памяти в экран, то это надо делать хотя бы кусками. Посмотрите примеры DMA, скажем, для SD-карт (библа от Чана). Причем, и в режиме SDIO, и в SPI - нигде нету функции а-ля "записать 10кб на флешку". Везде контроллер DMA пишет в интерфейс кусками, прерываясь через даже 4 байта, когда отправляет команды и адреса. Все равно это дает колоссальный прирост в производительности.

Добавлено через 1 минуту
Цитата Сообщение от korsaj Посмотреть сообщение
Для моего экрана ограничение 13 МГц по SPI
ну по SPI сейчас вы выжали этот поток? Вы полностью его занимаете, и экран тормозит и моргает?
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
06.01.2015, 13:06  [ТС]
Цитата Сообщение от Voland_ Посмотреть сообщение
ну по SPI сейчас вы выжали этот поток? Вы полностью его занимаете, и экран тормозит и моргает?
Выжал, только по параллельной шине. Экран тормозит, но только из-за алгоритмов которые были написаны китайцами в примерах под демоборд, как раз занимаюсь переделкой данных алгоритмов. Экран способен обновляться с частотой 65Гц.

А с DMA проблемы из-за того что разработчики демоборда намудрили с шиной. У дисплея она 16-ти разрядная, а они ее завели через регистр-защелку и теперь если использовать DMA нужно пересылать данные по 1 байту и каждый раз манипулировать 3 выводами..
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
06.01.2015, 13:12  [ТС]
Вот участок схемы
Миниатюры
Цифровой осциллограф на LPC1768 LangTiger   Цифровой осциллограф на LPC1768 LangTiger  
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
06.01.2015, 20:22
AD9057BRS-80 если вы задались целью построить осциллограф можете рассмотреть.
http://chip-nn.ru/78.php
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
06.01.2015, 22:17  [ТС]
Внешний АЦП это следующий этап (правда я прицеливался на AD9280). Вначале хочу разобраться в тонкостях работы системы в общем, а уж потом рюшечки.

Добавлено через 48 минут
или вот этот AD9203.

Добавлено через 45 минут
Для интереса посчитал время для отрисовки 1 пикселя на дисплее.
Для одиночного пикселя - 417 команд, обновление в таком режиме всего экрана 0,3 секунды.
Для серии (установили курсор 266 команд, дальше запись по 47 команд) - 47 команд, время обновление экрана 0,036 секунды (27 Гц). Поэтому отрисовывать придется только частично. В DS0201 отрисовывают посекторно.
Я хочу отрисовывать построчно (команда установки курсора и серия выводов пикселя - 266 + 47*n).
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
06.01.2015, 23:23
Да да идеально было бы иметь быстрый интерфейс для управления ЖК дисплеем. Если вы будете использовать AD92** то без предварительной записи полученных данных в ОЗУ на дисплей не выведешь нужную диаграмму. Просто далее вы столкнётесь с дороговезной деталей для вашего устройства. Я одно время рассматривал монитор от ПК и самую простую видеокарту.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2015, 23:23

Цифровой осциллограф и сеть 220В
можно ли смотреть синус в сети 220 вольт цифровым осциллографом? тема вроде гдето поднималась но не нашел.

Цифровой осциллограф RIGOL DS1052E
добрый день, хочу взять осциллограф, использоваться будет в схемах с AVR (пока), хочется что-то более-менее хорошее, но при этом, как...

Цифровой осциллограф. Что скажете.
На диалэкстриме появился осцил Siglent SDS1102CM за $438.80. http://syklent.som/en/product_show.asp?articleid=159 Он судя по всему в...

Цифровой осциллограф RIGOL DS1102E
Какие щупы у данного осцила идут в комплекте? (маркировка)

Цифровой осциллограф Rigol DS1052E + Linux
Здравствуйте. Рассматриваю в качестве потенциального кандидата для покупки осциллограф Rykot DS1052E. Есть вопросы к тем, у кого уже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru