Программирование STM8
Re: Программирование STM8
А можно сделать пока так, чтобы то что оцифровывается с выхода микрофона выдавалось в ЦАП и на динамик. Грубо говоря услышать свой голос через динамик. У меня есть 50 Ом динамики. Какой из входов в STM8 можно использовать как обратное преобразование с цифры в сигнал?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
да можно - использовать таймер (еще один) в режиме широтно-импульсной модуляции (ШИМ). Напрямую к динамику не подключать - нужен хотя бы транзистор.
Re: Программирование STM8
А к какому его выводу подключать? Есть транзисторы BC847AF. Как электронный ключ или в линейном режиме? Неплохо бы ссылку на пример.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
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 - надо смотреть, что находится в функциях внутри
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
Переусложнено. Попробовать и вот этого хватит.


Re: Программирование STM8
Может пригодится, пример простой схемы говорящего устройства http://www.getchip.net/posts/087-attiny ... ng-device/
Если на SPL писать, то какая на нее документация есть? Файлы виндусовского хелпа которые идут вместе с библиотекой или что то другое?
Если на SPL писать, то какая на нее документация есть? Файлы виндусовского хелпа которые идут вместе с библиотекой или что то другое?
Re: Программирование STM8
Здравствуйте Коты! Можно попросить кусок кода с настройкой PWM на TIM2 stm8s005k6. Никак не получается разобраться. Желательно с настройкой прерывания на 8 кГц. В IAR.
Спасибо.
Спасибо.
- GARMIN
- Держит паяльник хвостом
- Сообщения: 952
- Зарегистрирован: Вс дек 02, 2012 16:58:33
- Откуда: от туда
- Контактная информация:
Re: Программирование STM8
Вот образец рабочей программы:
Спойлер
Код: Выделить всё
/*****************************************************************************
* Установка таймера 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 канала
}
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
8-ми битный шим на TIM2 канал 1, переделано с SPL-ного примера:
проверил на 20-ти ногом STM8S003 - на выходе TIM2_CH1/PD4 меандр.
Подходит для вывода звука - частота шим 62.5 КГц, оцифрованные 8-ми битные данные выпихивать в регистр TIM2->CCR1L.
Спойлер
Код: Выделить всё
#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
Зачем 62.5кгц ?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
А можно больше? Фильтр попроще - индуктивность меньше. Тут на тини сделано, частота шим 62 kHz:
http://rdimitrov.twistedsanity.net/blog ... er,%20Rev2
http://rdimitrov.twistedsanity.net/blog ... er,%20Rev2
Re: Программирование STM8
Спасибо опробую разные варианты. А, на самом деле, зачем так много на 62кГц. Если я звук оцифровываю с микрофона на 8кГц, то как 62 кГц отразится на его выводе. Или это частота несущих колебаний? А изменение заполнения можно с частотой 8 кГц. Как скажется разность этих частот пока не понятно.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
если сделать частоту шима 8КГц, то будет слышна в динамике, лучше перенести значение частоты в тот диапазон, где не слышна ухом человека. Да и отфильтровать бы ее не мешало - меньше искажений будет.
Re: Программирование STM8
Да хватит бредить уже. ФНЧ там на что тогда, и как при его наличии вы собрались 8кгц слушать? Никаких тут 62.5кгц нафиг не вперлось.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
какой ФНЧ? Сколько вперлось? Свой вариант пожалуйста. Голословно в бреде обвиняете. 
Re: Программирование STM8
Резистор с кондером в этой схеме это образуют простейший Фильтр Низких Частот, который надо рассчитывать на 4кгц для нашего случая. Тогда шим 8кгц "застрянет" в нем, а полезный сигнал пойдет на динамик. Речевой спектр лежит в полосе 3400 гц. На кой хрен эти 62.5кгц впились?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
Эта схема лишь чуть усложненный вариант фильтра резистор+конденсатор. Причем, усложнения применены в направлении, которое для нашего случая не только не востребовано, но и вредит.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Программирование STM8
а речь то не о сложности, а о том что чем больше частота шим, тем проще фильтровать, можно даже не фильтровать - не слышно ее
Re: Программирование STM8
Вы как собираетесь 8кбит поток подавать на шим с частотой 62.5кгц?