06.01.2014, 15:31
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,542
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
|
Re: FAQ по STM8
Easyrider83, я про общие подходы.
А по существу - (лень копать ДШ) может ли таймер изменить значение предделителя без предварительной остановки? Это к
Сообщение от Easyrider83
|
TIM4-›CR1 = TIM4_CR1_CEN;
TIM4-›PSCR = TIM4_PRESCALER_16;
|
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
06.01.2014, 16:02
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от Easyrider83
|
При работе от HSI все в порядке. Этот глюк только при работе от HSE наблюдается.
Попробую сам разобраться. Код рабочий, все нормально там
|
Мда, праздники удались! Я не буду говорить о вреде прозябания на SPL, но HSI, HSE - никакой разницы, таймеру пофигу. Значение прескалера обновится только после переполнения.
Заносится значение прескалера, устанавливается бит UG, потом включается таймер.
|
|
|
Сказали "Спасибо" nahimovv
|
|
|
06.01.2014, 16:04
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от akegor
|
может ли таймер изменить значение предделителя без предварительной остановки
|
Легко! Просто нужно знать как работает таймер и что нужно получить.
|
|
|
|
06.01.2014, 16:17
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Спасибо, nahimovv, бит UG помог.
Код:
|
void delays_init (void)
{
CLK-›PCKENR1 |= CLK_PCKENR1_TIM4;
TIM4-›PSCR = TIM4_PRESCALER_4;
TIM4-›EGR |= TIM4_EGR_UG;
TIM4-›CR1 = TIM4_CR1_CEN;
} |
|
|
|
|
15.01.2014, 00:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Попробовал вчера вечером sdcc в действии (на своем STM8S003): прерывания от Timer1 работают, EXTI работают, а вот АЦП, собака, что-то не дает прерываний (я сделал простую мигалку на 16-ти светодиодах и дешифраторе, по умолчанию период мигания ~1с, полупериод равен значению, считанному АЦП, в миллисекундах - но что бы я с PD2 (AIN3) не делал, период мигания не меняется.
Вот такой код инициализации:
Код:
|
// select PD2[AIN3] & enable interrupt for EOC
ADC_CSR = 0x23;
ADC_TDRL = 0x08; // disable Schmitt triger for AIN3
// right alignment
ADC_CR2 = 0x08; // don't forget: first read ADC_DRL!
// f_{ADC} = f/18 & continuous non-buffered conversion & turn it on
ADC_CR1 = 0x73; |
вот - что в прерывании:
Код:
|
ADC_value = ADC_DRL; // in right-alignment mode we should first read LSB
ADC_value |= ADC_DRH ‹‹ 8;
ADC_CSR &= 0x3f; // clear EOC & AWD flags |
Само значение ADC_value (инициализировано числом 500) используется так:
Код:
|
// ADC_value sets half-period in ms
if(Global_time - T › (long)ADC_value){
T = Global_time;
if(onboard_blink) PD_ODR ^= GPIO_PIN3; // blink on-board LED
PC_ODR = (LedCntr++) ‹‹ 3;
if(LedCntr == 0x20) LedCntr = 0;
} |
Пока придумал два варианта: 1) кривые руки (хоть даташит 3 раза перечитал), 2) я уже умудрился убить флеш S003 (уж очень мне не нравится упомянутое в даташите число "100").
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
15.01.2014, 01:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
уж очень мне не нравится упомянутое в даташите число "100"
|
Причём, это - в двоичном виде!
__________________
There's always more than one way to skin a cat.
|
|
|
|
15.01.2014, 03:43
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
не дает прерываний
|
Wakes up вижу, а Start conversion где?
Сообщение от eddy
|
я уже умудрился убить флеш S003
|
Поздравления! Для этого есть S103.
|
|
|
|
15.01.2014, 08:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от nahimovv
|
Wakes up вижу, а Start conversion где?
|
Вот же:
Сообщение от eddy
|
ADC_CR1 = 0x73;
|
младший бит ADC_CR1 - и есть start conversion.
Сообщение от nahimovv
|
Для этого есть S103.
|
Ну, дык, это тоже прикуплю (лучше, наверное, S105 - на нем макетки дешевле). Но пока есть только макетка с S003 и "вольтметр" с ним же.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
15.01.2014, 10:43
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: FAQ по STM8
Вот пример работы с АЦП на STM8:
Код:
|
/*ADC INIT*/
ADC1-›TDRL = ADC1_SCHMITTTRIG_CHANNEL5|ADC1_SCHMITTTRIG_CHANNEL 6;
ADC1-›CR1 = ADC1_PRESSEL_FCPU_D18;
ADC1-›CR2 = ADC1_ALIGN_RIGHT; |
Код:
|
u16 Adc_Read (u8 AdcChannel)
{
u16 Result;
ADC1-›CR1 = ADC1_PRESSEL_FCPU_D18;
ADC1-›CSR = AdcChannel;
ADC1-›CR1 = ADC1_PRESSEL_FCPU_D18|ADC1_CR1_ADON;
ADC1-›CR1 = ADC1_PRESSEL_FCPU_D18|ADC1_CR1_ADON;
while ((ADC1-›CSR&ADC1_CSR_EOC)==0);
Result = ADC1-›DRL;
Result|= (ADC1-›DRH‹‹8);
ADC1-›CR1 = 0x70;
return Result;
} |
|
|
|
|
15.01.2014, 11:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Easyrider83, у меня почти то же самое. Только мне нужно непрерывное считывание с записью результата в глобальную переменную по прерыванию EOC. Судя по всему, я просто спалил-таки флеш.
Ладно, вечером еще попробую. Если действительно флеш уже сдохла, буду ковырять "вольтметр".
А вообще, надо будет с зарплатки прикупить себе пару макеточек на S103 или S105 по 130 рубликов.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:36.
|
|