Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

ЦАП+ПДП

Непрочитано 28.08.2012, 15:49  
sosedi
Частый гость
 
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
sosedi на пути к лучшему
Сообщение ЦАП+ПДП

Сразу к делу! Пытаюсь, с помощью DMA, передать массив из синусоиды ЦАПу и наблюдаю вот такой интересный момент:каждое прерывание таймера- увеличивает выдаваемое значения цапа на "1" !!!!!!!!!!!
т.е ,к примеру, если мы отправили на ЦАП "50"(DHR12R1) и прошло "5" прерываний таймера, то на выходе мы увидим "55" (DAC_DOR1).
Внизу скриншот из STM Studio, на нем отлично видно что отправляет DMA(красная линия) и что выдает ЦАП(синяя линия) !В конце графика ,с 52 секунды, я отключил DMA и четко видно что значение в регистре (DHR12R1) отстается неизменным, а выходное значение(DAC_DOR1) - меняется !!!!!
На осциллографе точно такая же картина .....
Ну и собственно вопрос, ПОЧЕМУ так?


Код:
const uint16_t sinus_500hz[] =
{ 2048, 2112, 2177, 2241, 2305, 2368, 2432, 2495, 2557, 2619, 2681, 2742, 2802,
        2861, 2920, 2978, 3035, 3091, 3145, 3199, 3252, 3303, 3353, 3402, 3450,
        3496, 3541, 3584, 3626, 3666, 3705, 3742, 3777, 3811, 3843, 3873, 3901,
        3928, 3952, 3975, 3996, 4015, 4032, 4047, 4060, 4071, 4080, 4087, 4092,
        4095, 4095, 4095, 4092, 4087, 4080, 4071, 4060, 4047, 4032, 4015, 3996,
        3975, 3952, 3928, 3901, 3873, 3843, 3811, 3777, 3742, 3705, 3666, 3626,
        3584, 3541, 3496, 3450, 3402, 3353, 3303, 3252, 3199, 3145, 3091, 3035,
        2978, 2920, 2861, 2802, 2742, 2681, 2619, 2557, 2495, 2432, 2368, 2305,
        2241, 2177, 2112, 2048, 1984, 1919, 1855, 1791, 1728, 1664, 1601, 1539,
        1477, 1415, 1354, 1294, 1235, 1176, 1118, 1061, 1005, 951, 897, 844,
        793, 743, 694, 646, 600, 555, 512, 470, 430, 391, 354, 319, 285, 253,
        223, 195, 168, 144, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1, 0, 1, 4,
        9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 168, 195, 223, 253, 285, 319,
        354, 391, 430, 470, 512, 555, 600, 646, 694, 743, 793, 844, 897, 951,
        1005, 1061, 1118, 1176, 1235, 1294, 1354, 1415, 1477, 1539, 1601, 1664,
        1728, 1791, 1855, 1919, 1984 };

//***********DAC****************
    GPIOA-›MODER	|= GPIO_MODER_MODER4_1;		// alternate function
    RCC-›APB1ENR 	|= RCC_APB1ENR_DACEN;		// вкл. тактирование ЦАП
    DAC-›CR 		|= DAC_CR_TEN1;
    DAC-›CR 		|= DAC_CR_MAMP1;			// амплитуда на максимум
    DAC-›CR 		= ~DAC_CR_TSEL1;			// 000: Timer 6 TRGO event
    DAC-›CR 		|= DAC_CR_EN1;			// вкл. ЦАП 1

//***********TIM6***************
    RCC-›APB1ENR 	|= RCC_APB1ENR_TIM6EN;		// тактирование таймера
    TIM6-›PSC 		= 16000-1;					// предделитель
    TIM6-›ARR 		= 4000;						// переполнение
    TIM6-›CR2 		|= TIM_CR2_MMS_1;			// output (TRGO)
    TIM6-›CR1 		|= TIM_CR1_CEN;				// запуск счета

//***********DMA1***************
	RCC-›AHB1ENR	|= RCC_AHB1ENR_DMA1EN;
	DMA1_Stream5-›CR|= DMA_SxCR_CHSEL;			// 111: channel 7 selected
	DMA1_Stream5-›PAR= (uint32_t)&DAC-›DHR12R1; 	// указатель на переферийное устройство
	DMA1_Stream5-›M0AR=(uint32_t)&sinus_500hz[0];	//адрес буфера
	DMA1_Stream5-›NDTR=200;						// кол-во передаваемых данных
	DMA1_Stream5-›CR|= DMA_SxCR_MINC;			// инкремент указателя буфера
	DMA1_Stream5-›CR|= DMA_SxCR_MSIZE_0;			// размер элемента в памяти 16 бит
	DMA1_Stream5-›CR|= DMA_SxCR_PSIZE_0;			// размер элемента в переферии 16 бит
	DMA1_Stream5-›CR|= DMA_SxCR_CIRC;			// цикличная передача данных
	DMA1_Stream5-›CR|= DMA_SxCR_DIR_0;			// 01: Memory-to-peripheral
	DMA1_Stream5-›CR|= DMA_SxCR_PL;				// 11: Very high
	DMA1_Stream5-›CR|= DMA_SxCR_EN;				// включение ПДП
Миниатюры:
Нажмите на изображение для увеличения
Название: DAC.JPG
Просмотров: 81
Размер:	69.3 Кб
ID:	38141  
Реклама:
sosedi вне форума  
Сказали "Спасибо" sosedi
warel (29.06.2019)
Непрочитано 29.08.2012, 15:11  
true71
Почётный гражданин KAZUS.RUN
 
Аватар для true71
 
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,446
Сказал спасибо: 5,259
Сказали Спасибо 1,054 раз(а) в 614 сообщении(ях)
true71 на пути к лучшему
По умолчанию Re: ЦАП+ПДП

Типичная картина переполнения разрядности.

По ходу в программе Вы где-то к значению, передаваемому в регистр DHR12R1, прибавляете значение какого-то счетчика.
true71 вне форума  
Сказали "Спасибо" true71
warel (29.06.2019)
Непрочитано 29.08.2012, 17:41  
sosedi
Частый гость
 
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
sosedi на пути к лучшему
Счастье Re: ЦАП+ПДП

Сообщение от true71 Посмотреть сообщение
Типичная картина переполнения разрядности.

По ходу в программе Вы где-то к значению, передаваемому в регистр DHR12R1, прибавляете значение какого-то счетчика.
Дк нет же, как раз на графике наглядно видно!!!! что значения в регистре (DHR12R1) правельны, а в (DAC_DOR1) инкрементируются с каждым прерыванием таймера, ПРИЧЕМ регистр (DAC_DOR1)-доступен только для чтение что наводит на мысль влияния внутреннего генератора ЦАПа (пила!!!!! ). Проверив дисассемблер было замечено,что команда DAC-›CR = ~DAC_CR_TSEL1; не накладывает обратную маску, а инвертирует весь регистр !Следовательно вместо того чтобы включить срабатывание от таймера 6, я включал генератор пилы, ну и т.д)Вот как-то так !
sosedi вне форума  
Сказали "Спасибо" sosedi
warel (29.06.2019)
Непрочитано 29.08.2012, 17:44  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: ЦАП+ПДП

Сообщение от sosedi Посмотреть сообщение
DAC-›CR = ~DAC_CR_TSEL1
DAC-›CR &= ~DAC_CR_TSEL1. Или нет ?
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
warel (29.06.2019)
Непрочитано 29.08.2012, 18:12  
sosedi
Частый гость
 
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
sosedi на пути к лучшему
Радость Re: ЦАП+ПДП

Сообщение от dosikus Посмотреть сообщение
DAC-›CR &= ~DAC_CR_TSEL1. Или нет ?
Гдеж ты раньше был, я весь день на это убил )
я раньше с лог операциями не работал, вот и тупил сидел) пока в дисассемблер не глянул!
sosedi вне форума  
Сказали "Спасибо" sosedi
warel (29.06.2019)
Непрочитано 29.08.2012, 18:18  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: ЦАП+ПДП

sosedi,
Гы ... Это ж аксиомы .
Код:
   Val |= MASK - установить бит(биты) 
   Val &=(~MASK)-сбросить биты
Что такое маска объяснять не надо? Да и , маска естественно должна совпадать по разрядности.
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
warel (29.06.2019)
Непрочитано 29.08.2012, 21:04  
sosedi
Частый гость
 
Регистрация: 31.07.2012
Сообщений: 45
Сказал спасибо: 28
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
sosedi на пути к лучшему
Сообщение Re: ЦАП+ПДП

Сообщение от dosikus Посмотреть сообщение
sosedi,
Гы ... Это ж аксиомы .
Код:
   Val |= MASK - установить бит(биты) 
   Val &=(~MASK)-сбросить биты
Что такое маска объяснять не надо? Да и , маска естественно должна совпадать по разрядности.
Да, согласен)))) Ошибка очень глупая )
но меня смутила статья http://mycontroller.ru/stm32-dma-initsializatsiya/
там сброс битов тоже с ошибкой:
Код:
 //----------------- Манипуляции с регистром конфигурации  ----------------
 //Следующие действия можно обьединить в одну команду (разбито для наглядности)
 DMA1_Channel4-›CCR   =  0;                       //предочистка регистра конфигурации
 DMA1_Channel4-›CCR   = ~DMA_CCR4_CIRC;           //выключить циклический режим
 DMA1_Channel4-›CCR  |=  DMA_CCR4_DIR;            //направление: чтение из памяти
 //Настроить работу с переферийным устройством
 DMA1_Channel4-›CCR   = ~DMA_CCR4_PSIZE;          //размерность данных 8 бит
 DMA1_Channel4-›CCR   = ~DMA_CCR4_PINC;           //неиспользовать инкремент указателя
 //Настроить работу с памятью
 DMA1_Channel4-›CCR   = ~DMA_CCR4_MSIZE;          //размерность данных 8 бит
 DMA1_Channel4-›CCR  |=  DMA_CCR4_MINC;           //использовать инкремент указателя
 USART1-›CR3         |=  USART_CR3_DMAT;          //разрешить передачу USART1 через DMA
sosedi вне форума  
Сказали "Спасибо" sosedi
warel (29.06.2019)
Непрочитано 29.08.2012, 21:36  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: ЦАП+ПДП

Сообщение от sosedi Посмотреть сообщение
но меня смутила статья http://mycontroller.ru/stm32-dma-initsializatsiya/
там сброс битов тоже с ошибкой:
Очепятался , спешит.
Здесь раньше и правильней .
http://mycontroller.ru/stm32-spi-ini...-ispolzovanie/
Кстати на первых этапах проверяй в дебуггере , если не уверен .
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
warel (29.06.2019)
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Троичный ЦАП majorka65 Микроконтроллеры, АЦП, память и т.д 40 07.01.2011 14:43
Быстродействующий ЦАП EKuzmich Микроконтроллеры, АЦП, память и т.д 11 19.12.2010 16:56
МК + ЦАП jelsay Микроконтроллеры, АЦП, память и т.д 29 25.11.2010 00:39
ЦАП PCM1725 svetokn Микроконтроллеры, АЦП, память и т.д 41 02.06.2009 18:20
внутренний ЦАП Vilerius Цифровые сигнальные процессоры 0 09.07.2007 01:30


Часовой пояс GMT +4, время: 14:22.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.