Страница 37 из 130

Re: Программирование STM8

Добавлено: Пт май 29, 2015 14:40:43
vash_sa
А можно сделать пока так, чтобы то что оцифровывается с выхода микрофона выдавалось в ЦАП и на динамик. Грубо говоря услышать свой голос через динамик. У меня есть 50 Ом динамики. Какой из входов в STM8 можно использовать как обратное преобразование с цифры в сигнал?

Re: Программирование STM8

Добавлено: Пт май 29, 2015 14:46:29
oleg110592
да можно - использовать таймер (еще один) в режиме широтно-импульсной модуляции (ШИМ). Напрямую к динамику не подключать - нужен хотя бы транзистор.

Re: Программирование STM8

Добавлено: Пт май 29, 2015 17:15:18
vash_sa
А к какому его выводу подключать? Есть транзисторы BC847AF. Как электронный ключ или в линейном режиме? Неплохо бы ссылку на пример.

Re: Программирование STM8

Добавлено: Пт май 29, 2015 18:33:13
oleg110592
1)если TIM1 свободен можно использовать например вывод TIM1_CH1 (PC1).
2)Тут схемка есть, правда полевые транзисторчики:
http://blog.vinu.co.in/2014/12/happy-ch ... -year.html
3)Пример есть: Generating PWM signals using STM8S-DISCOVERY (AN3332)
http://www.st.com/web/en/catalog/tools/PF257976
но там с применением SPL - надо смотреть, что находится в функциях внутри

Re: Программирование STM8

Добавлено: Пт май 29, 2015 18:54:52
a5021
Переусложнено. Попробовать и вот этого хватит.

Изображение

Re: Программирование STM8

Добавлено: Пт май 29, 2015 19:15:49
axillent
Может пригодится, пример простой схемы говорящего устройства http://www.getchip.net/posts/087-attiny ... ng-device/

Если на SPL писать, то какая на нее документация есть? Файлы виндусовского хелпа которые идут вместе с библиотекой или что то другое?

Re: Программирование STM8

Добавлено: Сб июн 06, 2015 11:35:03
vash_sa
Здравствуйте Коты! Можно попросить кусок кода с настройкой PWM на TIM2 stm8s005k6. Никак не получается разобраться. Желательно с настройкой прерывания на 8 кГц. В IAR.
Спасибо.

Re: Программирование STM8

Добавлено: Сб июн 06, 2015 18:13:21
GARMIN
Вот образец рабочей программы:
Спойлер

Код: Выделить всё

/*****************************************************************************
* Установка таймера TIM2 CH3 в режим ШИМ
* частота = 16 МГЦ / 200 = 80кГц
* выход таймера TIM2_CH3 (PA3) (10)
******************************************************************************/
void init_timer (void)
{
	GPIO_ConfigOutput (PWM_PORT1, PWM_PIN1, PortHiSpeed, PortPushPull);	// ШИМ 
	PWM_PORT = 0;
// таймер ШИМ TIM2	
	TIM2->CR1 = TIM2_CR1_ARPE 		* 1		// использовать буфер записи в триггер ARP
			| TIM2_CR1_OPM			* 0		// нет однократного режима
			| TIM2_CR1_URS 			* 0		// нет ожидания конца счёта
			| TIM2_CR1_UDIS 		* 0		// 
			| TIM2_CR1_CEN 			* 0;	// пока счётчик не разрешать
	TIM2->CCER1 = TIM2_CCER1_CC2P	* 0
			| TIM2_CCER1_CC2E		* 0		// запретить канал 1
			| TIM2_CCER1_CC1P		* 0
			| TIM2_CCER1_CC1E		* 0;	// запретить канал 2
	TIM2->CCER2 = TIM2_CCER2_CC3P	* 0	
			| TIM2_CCER2_CC3E		* 0;	// запретить канал 3

	TIM2->PSCR = 0;							// прескалер = 2^0 = 1
	TIM2->IER = TIM2_IER_CC3IE 		* 0		// запретить прерывания от таймера 2
			| TIM2_IER_CC2IE 		* 0
			| TIM2_IER_CC1IE 		* 0
			| TIM2_IER_UIE 			* 0;
	TIM2->ARRH = (TIM4_COUNTER & 0xFF00) >> 8;	// счёт от 0 до 200
	TIM2->ARRL = TIM4_COUNTER & 0x00FF;
	TIM2->CCR3H = (PWM_MIN & 0xFF00) >> 8;
	TIM2->CCR3L = PWM_MIN & 0x00FF;
						// уровень ШИМ 0 (нет выхода)
	TIM2->CCMR3 = TIM2_CCMR_CCxS_OUTPUT		// канал 3 сконфигурировать на выход
			| TIM2_CCMR_OCxPE * 1			// разрешить буфер записи в канал
			| TIM2_CCMR_OCxM_PWM1;			// режим PWM1 - выход активен пока счётчик меньше регистра сравнения	
	TIM2->CCER1 = TIM2_CCER1_CC2P	* 0		// запретить каналы 1 и 2
			| TIM2_CCER1_CC2E		* 0
			| TIM2_CCER1_CC1P		* 0
			| TIM2_CCER1_CC1E		* 0;
	TIM2->CCER2 = TIM2_CCER2_CC3P	* 0		// активный уровень выхода высокий
			| TIM2_CCER2_CC3E		* 1;	// разрешить канал 3

	TIM2->CR1 |= TIM2_CR1_CEN;				// разрешить счётчик	
	TIM2->EGR = TIM2_EGR_TG			* 0		// нет у TIM2 
			| TIM2_EGR_CC3G 		* 1		// разрешить евент канала 3
			| TIM2_EGR_CC2G 		* 0
			| TIM2_EGR_CC1G 		* 0
			| TIM2_EGR_UG 			* 1;	// сгенерировать апдейт 3 канала
}

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 09:15:18
oleg110592
8-ми битный шим на TIM2 канал 1, переделано с SPL-ного примера:
Спойлер

Код: Выделить всё

#include "stm8s.h"

/** TIM2 Output Compare and PWM modes */
typedef enum
{
  TIM2_OCMODE_TIMING     = ((uint8_t)0x00),
  TIM2_OCMODE_ACTIVE     = ((uint8_t)0x10),
  TIM2_OCMODE_INACTIVE   = ((uint8_t)0x20),
  TIM2_OCMODE_TOGGLE     = ((uint8_t)0x30),
  TIM2_OCMODE_PWM1       = ((uint8_t)0x60),
  TIM2_OCMODE_PWM2       = ((uint8_t)0x70)
}TIM2_OCMode_TypeDef;

/** TIM2 Output Compare Polarity */
typedef enum
{
  TIM2_OCPOLARITY_HIGH               = ((uint8_t)0x00),
  TIM2_OCPOLARITY_LOW                = ((uint8_t)0x22)
}TIM2_OCPolarity_TypeDef;

/** TIM2 Output Compare states */
typedef enum
{
  TIM2_OUTPUTSTATE_DISABLE           = ((uint8_t)0x00),
  TIM2_OUTPUTSTATE_ENABLE            = ((uint8_t)0x11)
}TIM2_OutputState_TypeDef;


void TIM2_init(void) 
{
    /* Set the Prescaler value */
    TIM2->PSCR = (uint8_t)(0x00);
    /* Set the Autoreload value */
    TIM2->ARRH = (uint8_t)(0x00);
    TIM2->ARRL = (uint8_t)(0xFF);
    
    /* Disable the Channel 1: Reset the CCE Bit, Set the Output State , the Output Polarity */
    TIM2->CCER1 &= (uint8_t)(~( TIM2_CCER1_CC1E | TIM2_CCER1_CC1P));
    /* Set the Output State &  Set the Output Polarity  */
    TIM2->CCER1 |= (uint8_t)((uint8_t)(TIM2_OUTPUTSTATE_ENABLE & TIM2_CCER1_CC1E) | 
                             (uint8_t)(TIM2_OCPOLARITY_HIGH & TIM2_CCER1_CC1P));

    /* Reset the Output Compare Bits  & Set the Ouput Compare Mode */
    TIM2->CCMR1 = (uint8_t)((uint8_t)(TIM2->CCMR1 & (uint8_t)(~TIM2_CCMR_OCM)) |
                            (uint8_t)TIM2_OCMODE_PWM1);
    
    /* Set the OC1PE Bit */
    TIM2->CCMR1 |= (uint8_t)TIM2_CCMR_OCxPE;
    /* Set the ARPE Bit */
    TIM2->CR1 |= (uint8_t)TIM2_CR1_ARPE;
    /* Set the CEN Bit */
    TIM2->CR1 |= (uint8_t)TIM2_CR1_CEN;
}

void main( void )
{
    CLK->CKDIVR = 0; 
    TIM2_init(); 
    TIM2->CCR1H = 0x00;
    TIM2->CCR1L = 128; // set PWM
    while(1) {};
}
проверил на 20-ти ногом STM8S003 - на выходе TIM2_CH1/PD4 меандр.
Подходит для вывода звука - частота шим 62.5 КГц, оцифрованные 8-ми битные данные выпихивать в регистр TIM2->CCR1L.

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 15:13:39
a5021
Зачем 62.5кгц ?

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 16:12:49
oleg110592
А можно больше? Фильтр попроще - индуктивность меньше. Тут на тини сделано, частота шим 62 kHz:
http://rdimitrov.twistedsanity.net/blog ... er,%20Rev2

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 16:27:28
vash_sa
Спасибо опробую разные варианты. А, на самом деле, зачем так много на 62кГц. Если я звук оцифровываю с микрофона на 8кГц, то как 62 кГц отразится на его выводе. Или это частота несущих колебаний? А изменение заполнения можно с частотой 8 кГц. Как скажется разность этих частот пока не понятно.

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 17:08:20
oleg110592
если сделать частоту шима 8КГц, то будет слышна в динамике, лучше перенести значение частоты в тот диапазон, где не слышна ухом человека. Да и отфильтровать бы ее не мешало - меньше искажений будет.

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 17:12:00
a5021
Да хватит бредить уже. ФНЧ там на что тогда, и как при его наличии вы собрались 8кгц слушать? Никаких тут 62.5кгц нафиг не вперлось.

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 17:16:27
oleg110592
какой ФНЧ? Сколько вперлось? Свой вариант пожалуйста. Голословно в бреде обвиняете. :))

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 17:29:13
a5021
Резистор с кондером в этой схеме это образуют простейший Фильтр Низких Частот, который надо рассчитывать на 4кгц для нашего случая. Тогда шим 8кгц "застрянет" в нем, а полезный сигнал пойдет на динамик. Речевой спектр лежит в полосе 3400 гц. На кой хрен эти 62.5кгц впились?

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 17:35:57
oleg110592
я вообще про мной предложенную схему:
Изображение
простым фильтром 8КГц полностью не "застрянет" (имхо)

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 18:02:44
a5021
Эта схема лишь чуть усложненный вариант фильтра резистор+конденсатор. Причем, усложнения применены в направлении, которое для нашего случая не только не востребовано, но и вредит.

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 18:08:04
oleg110592
а речь то не о сложности, а о том что чем больше частота шим, тем проще фильтровать, можно даже не фильтровать - не слышно ее

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 18:12:13
a5021
Вы как собираетесь 8кбит поток подавать на шим с частотой 62.5кгц?