Вот тут есть неплохой туториал для новичков по Си в МК http://eugenemcu.ru/publ/2
К примеру работа с портами и битами хорошо расписанна тут http://eugenemcu.ru/publ/2-1-0-53
Изучаем язык Си (Learn C language)
Moderator: STC
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Изучаем язык Си (Learn C language)
запись _BV(PD7) эквивалентна (1 << PD7)1 как определяются порты ? вот например стартер
PORTD|= _BV(PD7);
DDRD |= _BV(DDD7);
что это значит? что то не совсем понял ну понял что нужно делать также если хочу какой то порт использовать )
PD7 это просто номер бита. Он определен в заголовочном файле iom32.h как
#define PD7 7
(1 << PD7) означает сдвинуть единичку влево на 7 разрядов, получится байт с единичкой в 7-м бите. Так делают для удобства.
оператор |= это побитовое ИЛИ.
PORTD|= _BV(PD7) означает прочитать значение порта, сделать побитовое ИЛИ с числом 128 и записать обратно
Биты в регистре PORTD управляют ножками порта D
Биты в регистре DDRD управляют конфигурацией порта D
Да, если поставишь 1, то сработает через 10 мс. Для того чтобы проверить сработал ли таймер, нужно вызывать функцию s_timer_is_action(). Если она вернет значение > 0, значит он сработал.не совсем понял как он работает . но мне его должно хватить . один тик его равен 10мс . правильно ли я думаю что
если поставлю в него 1 то через 10 мс он станет равным 0 и s_timer_is_action станет равным 0
Частота попадания определяется временем выполнения основного цикла программы, Это приблизительно 2-2.5мс. Это и определяет точность.я собираюсь вызывать процедуру обработки движения РХХ в том же месте где сейчас РХХ по УОЗ.
у меня вопрос - как часто туда программа попадает? . то есть если я задам 1 тик таймера , я его с какой точностью увижу?
Сделай отдельную функцию для инициализации, с портами не смешивай. Эту функци. вызывай при старте прошивки или в другом нужном тебе месте.да еще вопрос вот как сделать инициализацию этого рхх , то есть там же где производиться инициализация портов нужно его выдвигуть ...
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Изучаем язык Си (Learn C language)
спасибо
пока спал думал
и понял что без дпдз мне не сделать рхх
заведу дпдз и по нему буду отслеживать перемещение рхх . тогда и таймер не нужен будет
думаю дальше
пока спал думал
и понял что без дпдз мне не сделать рхх
заведу дпдз и по нему буду отслеживать перемещение рхх . тогда и таймер не нужен будет
думаю дальше
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Изучаем язык Си (Learn C language)
еще вопрос .. про АЦП
если я просто скажу что
/**номер канала используемого для ДПДЗ*/
#define ADCI_TPS 5
и потом далее по тексту сделаю все аналогично например измерению напряжения , то оно будет работать?
просто в ПИК я знаю что нужно конфигурировать порты чтобы они стали АЦП или просто ввод вывод а тут что опять я не допонял где это ? )
и все таки с переводом значений ацп тоже путаница в голове
/**переводит значение АЦП в физическую величину - напряжение
* \param adcvalue значение в дискретах АЦП
* \return физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER
*/
uint16_t ubat_adc_to_v(int16_t adcvalue);
как так? программа измерила АЦП , потом при введений компенсаций от пользователя умножила на 6 , чтобы делитель резисторный учесть . провела усреднение . и оказывается еще умудрилась както это дело привести к виду--- физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER ???? как так ? для напряжения это значит * 400 , для температуры 4 . для дад 64 ... а где это учитывается то .. не пойму ...
или это учитывается только при обратном переводе ?
и еще вопрос ... хочу использовать зажигание 3 -4 для вывода на РХХ . мне нужно все где вижу использование портов 3-4 зажигания закоментарить ? или же не помешают они мне ?
если я просто скажу что
/**номер канала используемого для ДПДЗ*/
#define ADCI_TPS 5
и потом далее по тексту сделаю все аналогично например измерению напряжения , то оно будет работать?
просто в ПИК я знаю что нужно конфигурировать порты чтобы они стали АЦП или просто ввод вывод а тут что опять я не допонял где это ? )
и все таки с переводом значений ацп тоже путаница в голове
/**переводит значение АЦП в физическую величину - напряжение
* \param adcvalue значение в дискретах АЦП
* \return физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER
*/
uint16_t ubat_adc_to_v(int16_t adcvalue);
как так? программа измерила АЦП , потом при введений компенсаций от пользователя умножила на 6 , чтобы делитель резисторный учесть . провела усреднение . и оказывается еще умудрилась както это дело привести к виду--- физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER ???? как так ? для напряжения это значит * 400 , для температуры 4 . для дад 64 ... а где это учитывается то .. не пойму ...
или это учитывается только при обратном переводе ?
и еще вопрос ... хочу использовать зажигание 3 -4 для вывода на РХХ . мне нужно все где вижу использование портов 3-4 зажигания закоментарить ? или же не помешают они мне ?
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Изучаем язык Си (Learn C language)
Будет работать, так и делай. Так проще.и потом далее по тексту сделаю все аналогично например измерению напряжения , то оно будет работать?
просто в ПИК я знаю что нужно конфигурировать порты чтобы они стали АЦП или просто ввод вывод а тут что опять я не допонял где это ? )
1. Правильней говорить "программа считала с АЦП измеренное значение", а не "программа измерила АЦП".uint16_t ubat_adc_to_v(int16_t adcvalue);
как так? программа измерила АЦП , потом при введений компенсаций от пользователя умножила на 6 , чтобы делитель резисторный учесть . провела усреднение . и оказывается еще умудрилась както это дело привести к виду--- физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER ???? как так ? для напряжения это значит * 400 , для температуры 4 . для дад 64 ... а где это учитывается то .. не пойму ... или это учитывается только при обратном переводе ?
2. "умудрилась както это дело привести к виду--- физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER". Даже не пыталась умудряться, так как это уже сделало АЦП. 1 дискрета АЦП равна 0.0025В, 1/0.0025 = 400 (дискрет на один Вольт).
3. "для температуры 4 . для дад 64 ... а где это учитывается то .. не пойму ... или это учитывается только при обратном переводе?"
Да, учитывается только если нудно перевести в понятный для пользователя вид (в менеджере, в БК и т.д.).
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Изучаем язык Си (Learn C language)
ну с дискретой вроде понял.
ладно едем дальше
АЦП вроде должен мерить уже ДПДЗ , не паял еще вход так как нужно ОУ ставить еще для разделения СЕКУ3 и моновпрыска
пытаюсь переназначить PC0 PC1 для этого сделал свой файл , где будет своя процедура инициализации портов
и поставил в ckps.c там где используется эти порты следующий макрос компилятору
#ifndef INVERSE_IGN_OUTPUTS
PORTD|= _BV(PD5)|_BV(PD4)|_BV(PD6); // 1st and 2nd ignition channels, pullup for ICP1 (1-й и 2-й каналы зажигания, подтяжка для ICP1)
#ifndef IDL_REGUL
PORTC|= _BV(PC1)|_BV(PC0); //3rd and 4th ignition channels (3-й и 4-й каналы зажигания)
#endif
#else //outputs inversion mode (режим инверсии выходов)
PORTD&= ~(_BV(PD5)|_BV(PD4));
#ifndef IDL_REGUL
PORTC&= ~(_BV(PC1)|_BV(PC0));
#endif
PORTD|= _BV(PD6);
#endif
НО он ругается на него вот так
Error[Pe052]: expected a macro parameter name N:\SECU3\secu3app\sources\ckps.c 476
почему???? с secu3.c использую тот же макрос и не ругается.. не пойму (
все сам разобрался .. так нельзя делать так как это предопределение макросом текста в программе ) ..весь кусок повторил и убрал лишнее )
ладно едем дальше
АЦП вроде должен мерить уже ДПДЗ , не паял еще вход так как нужно ОУ ставить еще для разделения СЕКУ3 и моновпрыска
пытаюсь переназначить PC0 PC1 для этого сделал свой файл , где будет своя процедура инициализации портов
и поставил в ckps.c там где используется эти порты следующий макрос компилятору
#ifndef INVERSE_IGN_OUTPUTS
PORTD|= _BV(PD5)|_BV(PD4)|_BV(PD6); // 1st and 2nd ignition channels, pullup for ICP1 (1-й и 2-й каналы зажигания, подтяжка для ICP1)
#ifndef IDL_REGUL
PORTC|= _BV(PC1)|_BV(PC0); //3rd and 4th ignition channels (3-й и 4-й каналы зажигания)
#endif
#else //outputs inversion mode (режим инверсии выходов)
PORTD&= ~(_BV(PD5)|_BV(PD4));
#ifndef IDL_REGUL
PORTC&= ~(_BV(PC1)|_BV(PC0));
#endif
PORTD|= _BV(PD6);
#endif
НО он ругается на него вот так
Error[Pe052]: expected a macro parameter name N:\SECU3\secu3app\sources\ckps.c 476
почему???? с secu3.c использую тот же макрос и не ругается.. не пойму (
все сам разобрался .. так нельзя делать так как это предопределение макросом текста в программе ) ..весь кусок повторил и убрал лишнее )
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
-
- LQFP144 - On Top Of The Game
- Posts: 358
- Joined: Sun Dec 12, 2010 11:55 am
- Location: украина, Горловка
Re: Изучаем язык Си (Learn C language)
у меня есть чудная книга Евстифеева по меге (описание работы ), а есть ли что нибудь похожее по STM32F103?
где можно почитать про работу блоков этой микросхемы?
где можно почитать про работу блоков этой микросхемы?
Re: Изучаем язык Си (Learn C language)
Я в гугле набираю поиск по STM32 на руском и таким образом нахожу разные статьи по отдельным модулям например АЦП и т.д. Все в одной книге пока не попадалось наверное потому что сама документация stm так оформлена в отличие от avr да и переферия гораздо более широкая и постоянно совершенствуется. Также помогает поиск по ARM и Cortex-M3 так как ядро стандартизировано.
-
- LQFP144 - On Top Of The Game
- Posts: 358
- Joined: Sun Dec 12, 2010 11:55 am
- Location: украина, Горловка
Re: Изучаем язык Си (Learn C language)
та, да но хотелось бы какой то одноименный источник, да еще и на русском, ну это я загнул...
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Изучаем язык Си (Learn C language)
Не падайте духом, есть например тут
http://www.gaw.ru/html.cgi/txt/doc/micr ... rh/1_2.htm
http://www.gaw.ru/html.cgi/txt/doc/micr ... /index.htm
На этом сайте и по AVR и по ARM много полезной информации на русском языке.
http://www.gaw.ru/html.cgi/txt/doc/micr ... rh/1_2.htm
http://www.gaw.ru/html.cgi/txt/doc/micr ... /index.htm
На этом сайте и по AVR и по ARM много полезной информации на русском языке.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook