18.02.2017, 18:00
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от tanq
|
Это не обясняет, почему при прерывании по обеим фронтам всё начинает работать корректно, в то время как по отрицательному фронту - нет.
|
Глядя на вашу реализацию и код вообще трудно что-то объяснить.
1. PB4 и PB5 - In the open-drain output column, "T" defines a true open-drain I/O (P-buffer, weak pull-up, and protection diode to VDD are not implemented). Значит рискуете вообще убить оба входа.
2. Какие ещё функции в прерывании? Вам время девать некуда?
3. unsigned short time; - а почему не переопределения типа uint16_t?
4. time = TIM1-›CNTRH‹‹8 | TIM1-›CNTRL; - вы упорно продолжаете не верить в чудеса оптимизации? Почему не на две строки? Вы уверены, что TIM1-›CNTRH‹‹8 будет верным в плане оптимальности?
5. Никто вам ничего не подскажет, нет целостности картины. Возьмите логанализатор, заведите пару тестовых пинов и дрыгайте ими в прерывании. Тогда сравнивая входные сигналы с тестовым ногодрыгом в прерывании вы увидите что к чему, т.е. полную картину происходящего.
|
|
|
|
18.02.2017, 18:34
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от STM32F0
|
1. PB4 и PB5 - In the open-drain output column, "T" defines a true open-drain I/O (P-buffer, weak pull-up, and protection diode to VDD are not implemented). Значит рискуете вообще убить оба входа.
|
В схеме стабилитроны на 4.7В стоят. На случай замыкания этих линий на 12В питания вентилятора. В питании вентиляторов PTC. Подтягивающие резисторы 10К.
Сообщение от STM32F0
|
2. Какие ещё функции в прерывании? Вам время девать некуда?
|
В этом прерывании - никакие. Вычисление RPM из временных меток делается в прерывании таймера TIM1, имеющего тот же приоритет. В этом устройстве время экономить нет смысла - это контроллер кулера. Там единственное критическое место - приём команд через uart. Дал ему наивысший приоритет.
Сообщение от STM32F0
|
3. unsigned short time; - а почему не переопределения типа uint16_t?
|
А зачем? Мне так удобнее. Компилятор после препроцессора всё равно получит на вход unsigned short.
Сообщение от STM32F0
|
4. time = TIM1-›CNTRH‹‹8 | TIM1-›CNTRL; - вы упорно продолжаете не верить в чудеса оптимизации? Почему не на две строки? Вы уверены, что TIM1-›CNTRH‹‹8 будет верным в плане оптимальности?
|
Про сдвиг на 8 бит - уверен. Листинг смотрел.
Сообщение от STM32F0
|
5. Никто вам ничего не подскажет, нет целостности картины. Возьмите логанализатор, заведите пару тестовых пинов и дрыгайте ими в прерывании.
|
Пожалуй, так и сделаю. На плате много разъемов. У меня подозрение, что используемый чип слишком ранней ревизии - и в этом проблема.
|
|
|
|
05.04.2017, 12:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,384
Сказал спасибо: 5,529
Сказали Спасибо 1,044 раз(а) в 601 сообщении(ях)
|
Re: FAQ по STM8
Люди!!!
Подскажите, плз, какая среда программирования сейчас наиболее адекватная?
Скорый пробег по гуглу результатов не дал, скорее дал, но слишком размыто.
Не хочется засорять компьютер, перебирая разные среды и компиляторы.
ЗЫ: Когда изучал программирование под АНДРОИД наустанавливал столько всего, что в итоге пришлось переустанавливать систему. Не хочется этого.
|
|
|
|
05.04.2017, 14:54
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: FAQ по STM8
ИАР или Космик. Я предпочитаю ИАР.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
05.04.2017, 15:35
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от STM32F0
|
Я предпочитаю ИАР.
|
+100
Правда редактор у него ну очень спартанский, но есть возможность прикрутить внешний. Я geany пользую.
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
05.04.2017, 15:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,384
Сказал спасибо: 5,529
Сказали Спасибо 1,044 раз(а) в 601 сообщении(ях)
|
Re: FAQ по STM8
А версия которая ?
Обычно последние версии грешат глюками.
|
|
|
|
05.04.2017, 16:46
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: FAQ по STM8
В последней вроде глюков не добавили. Старые глюки пофиксили, в основном.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
11.04.2017, 09:34
|
|
Прохожий
Регистрация: 11.04.2017
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Последний раз редактировалось Full_zero; 12.04.2017 в 08:05.
|
|
|
|
07.05.2017, 19:21
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: FAQ по STM8
Подскажите, как правильно использовать буферизацию в АЦП с одновременной сменой каналов. Проц STM8S003. Мне надо оцифровать 1 канал 10 раз и усреднить, оцифровать 2 канал 10 раз и тоже усреднить. Очевидный метод решения задачи не работает: если в обработчике прерывания тупо менять номер канала, то АЦП впадает в ступор. Если предварительно сбросить бит CONT, то он тоже впадает в ступор, потому что DBUF может использоваться только с флагом CONT. Если же сбрасывать DBUF перед сбросом CONT, а потом всё включать назад, то оцифровка идёт верно, но не совсем - в каких-то из 10 регистров оказываются не те значения. Как с этим бороться?
|
|
|
|
01.09.2017, 04:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: FAQ по STM8
Непонятку словил в IAR EW.
Есть структура,
Код:
|
struct key_unit
{
uint32_t u32_number;
uint16_t u16_counter;
uint8_t u8_buttons;
uint8_t u8_state;
};//8 байт |
являющаяся членом другой структуры
Код:
|
struct eeprom_unit
{
struct key_unit st_keys[10];
struct phone_unit st_phones[5];
uint8_t lock_state[2];
uint16_t u16_autoclose_time;
uint8_t u8_alarm_time;
uint8_t u8_open_button_mode;
uint8_t CRC;
} //237 bytes (up to 299) |
структура изначально объявлена в EEPROM, но для проверки перенес в RAM
struct eeprom_unit ST_EEPROM;
Есть переменная
uint8_t u8_last_command
Работаем с 8-битным членом структуры key_unit - u8_buttons
значение u8_last_command: 0x60
значение ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons: 0x24
эти значения вижу и в отладчике, но...
Код:
|
if (u8_last_command == ((ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons ‹‹ 4 ) + (ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons & 0xF0)))
{
//do something...
} |
Результат проверки условия в if - "ложь", "do something" не выполняется.
А вот так выполняется:
Код:
|
if (u8_last_command == (uint8_t)((ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons ‹‹ 4 ) + (ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons & 0xF0)))
{
//do something...
} |
и вот так тоже
Код:
|
if (u8_last_command == ((uint8_t)(ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons ‹‹ 4 ) + (ST_EEPROM.st_keys[u8_serv_tmp].u8_buttons & 0xF0)))
{
//do something...
} |
Все члены выражения - 8-битные, операций, которые могут привести к их автоматическому расширению до 16 бит, нет, но на деле результат выражения 16-битный, и как минимум в одном месте 8-битный член структуры фактически расширяется до 16-битного, и 4 старших бита, которые, как я рассчитывал, при сдвиге влево будут выброшены, на деле никуда не деваются,
Глюк или нормальное поведение?
Когда структуры не было, и всё хранилось отдельными массивами, всё работало без приведения.
Последний раз редактировалось AR_Favorit; 01.09.2017 в 04:10.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:29.
|
|