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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для true71
 
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,415
Сказал спасибо: 5,550
Сказали Спасибо 1,052 раз(а) в 608 сообщении(ях)
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
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
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
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
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
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
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, время: 08:31.


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