Изучаем язык Си (Learn C language)

Русскоязычный форум SECU-3 по общим вопросам. General discussion in Russian language. English sub-forum.

Moderator: STC

nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Изучаем язык Си (Learn C language)

Post by nikll »

Вот тут есть неплохой туториал для новичков по Си в МК http://eugenemcu.ru/publ/2
К примеру работа с портами и битами хорошо расписанна тут http://eugenemcu.ru/publ/2-1-0-53
User avatar
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)

Post by STC »

1 как определяются порты ? вот например стартер
PORTD|= _BV(PD7);
DDRD |= _BV(DDD7);
что это значит? что то не совсем понял :) ну понял что нужно делать также если хочу какой то порт использовать )
запись _BV(PD7) эквивалентна (1 << PD7)
PD7 это просто номер бита. Он определен в заголовочном файле iom32.h как
#define PD7 7
(1 << PD7) означает сдвинуть единичку влево на 7 разрядов, получится байт с единичкой в 7-м бите. Так делают для удобства.
оператор |= это побитовое ИЛИ.
PORTD|= _BV(PD7) означает прочитать значение порта, сделать побитовое ИЛИ с числом 128 и записать обратно
Биты в регистре PORTD управляют ножками порта D
Биты в регистре DDRD управляют конфигурацией порта D
не совсем понял как он работает . но мне его должно хватить . один тик его равен 10мс . правильно ли я думаю что
если поставлю в него 1 то через 10 мс он станет равным 0 и s_timer_is_action станет равным 0
Да, если поставишь 1, то сработает через 10 мс. Для того чтобы проверить сработал ли таймер, нужно вызывать функцию s_timer_is_action(). Если она вернет значение > 0, значит он сработал.
я собираюсь вызывать процедуру обработки движения РХХ в том же месте где сейчас РХХ по УОЗ.
у меня вопрос - как часто туда программа попадает? . то есть если я задам 1 тик таймера , я его с какой точностью увижу?
Частота попадания определяется временем выполнения основного цикла программы, Это приблизительно 2-2.5мс. Это и определяет точность.
да еще вопрос вот как сделать инициализацию этого рхх , то есть там же где производиться инициализация портов нужно его выдвигуть ...
Сделай отдельную функцию для инициализации, с портами не смешивай. Эту функци. вызывай при старте прошивки или в другом нужном тебе месте.
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
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Изучаем язык Си (Learn C language)

Post by Stranger21 »

спасибо

пока спал думал
и понял что без дпдз мне не сделать рхх
заведу дпдз и по нему буду отслеживать перемещение рхх . тогда и таймер не нужен будет
думаю дальше
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Изучаем язык Си (Learn C language)

Post by Stranger21 »

еще вопрос .. про АЦП
если я просто скажу что
/**номер канала используемого для ДПДЗ*/
#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г
User avatar
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)

Post by STC »

и потом далее по тексту сделаю все аналогично например измерению напряжения , то оно будет работать?
просто в ПИК я знаю что нужно конфигурировать порты чтобы они стали АЦП или просто ввод вывод а тут что опять я не допонял где это ? )
Будет работать, так и делай. Так проще.
uint16_t ubat_adc_to_v(int16_t adcvalue);
как так? программа измерила АЦП , потом при введений компенсаций от пользователя умножила на 6 , чтобы делитель резисторный учесть . провела усреднение . и оказывается еще умудрилась както это дело привести к виду--- физическая величина * UBAT_PHYSICAL_MAGNITUDE_MULTIPLAYER ???? как так ? для напряжения это значит * 400 , для температуры 4 . для дад 64 ... а где это учитывается то .. не пойму ... или это учитывается только при обратном переводе ?
1. Правильней говорить "программа считала с АЦП измеренное значение", а не "программа измерила АЦП".
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
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Изучаем язык Си (Learn C language)

Post by Stranger21 »

ну с дискретой вроде понял.
ладно едем дальше
АЦП вроде должен мерить уже ДПДЗ , не паял еще вход так как нужно ОУ ставить еще для разделения СЕКУ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г
lsasha7
LQFP144 - On Top Of The Game
Posts: 358
Joined: Sun Dec 12, 2010 11:55 am
Location: украина, Горловка

Re: Изучаем язык Си (Learn C language)

Post by lsasha7 »

у меня есть чудная книга Евстифеева по меге (описание работы ), а есть ли что нибудь похожее по STM32F103?
где можно почитать про работу блоков этой микросхемы?
JOleg
QFP80 - Contributor
Posts: 89
Joined: Mon Dec 20, 2010 10:40 am

Re: Изучаем язык Си (Learn C language)

Post by JOleg »

Я в гугле набираю поиск по STM32 на руском и таким образом нахожу разные статьи по отдельным модулям например АЦП и т.д. Все в одной книге пока не попадалось наверное потому что сама документация stm так оформлена в отличие от avr да и переферия гораздо более широкая и постоянно совершенствуется. Также помогает поиск по ARM и Cortex-M3 так как ядро стандартизировано.
lsasha7
LQFP144 - On Top Of The Game
Posts: 358
Joined: Sun Dec 12, 2010 11:55 am
Location: украина, Горловка

Re: Изучаем язык Си (Learn C language)

Post by lsasha7 »

та, да но хотелось бы какой то одноименный источник, да еще и на русском, ну это я загнул...
User avatar
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)

Post by STC »

Не падайте духом, есть например тут
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
Post Reply