![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
kaspersky89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 7.12.2007 Репутация: 1 Всего: 1 |
Как и обещал выкладываю исходник который делал сегодня ночью на скорую руку, нервно выкуривая сигарету за сигаретой когда какойнить алгоритим не хотел правильно работать.
Комментарии не поставил, нет времени распыляться на это, кому надо поймут что за код, хотя надо постараться чтоб проследить логику работы нек-х функций ![]() Просьба к гуру в программинге МК, как мне оптимизировать код чтоб он правильней выглядел и чётче работал, а то компиленый файл чёто большой получается. Критикуйте если есть желание и время. Мне кажется главный косяк в коде, так это таймер, я сделал его без делителя, и программной задержкой выставлял время ровно на 1 секунду. Мне кажется таймер этот всю программу будет тормозить. На данном этапе покачто алгоритм, будет шлифоваться. Следующий этап эволюции это надо приладить к схеме термодатчик, необходимо учитывать температуру двигателя, чтобы когда движок холодный то ЭПХХ работал в режиме прогрева, с открытым клапаном Холостого Хода, Есть мысль взять термод-к в виде транзистора цифровой вроде как из серии DS18(точно не помню) както его прекрепить к двиглу и по I2c вести контроль температуры. Как кто думает, стоит ли брать, и морочиться с этим DS ? Просто я чего помощи в оптимизации кода прошу, потому как проект будет разростаться, может даже на диплом пойдёт ![]() ![]()
|
|||
|
||||
cardinal |
|
||||||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
1.
Если после if только одна строка, то скобки { и } не нужны
=>
2.
=>
3.
=>
4. _BV это что? 5. bit_is_clear никто так не проверяет! -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||||||
|
|||||||||||||
kaspersky89 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 7.12.2007 Репутация: 1 Всего: 1 |
cardinal Я думал ты пошутил с этим вопросом, _BV Немного лекции AVR GCC сдвиг можно осуществлять и с помощью функции _BV(), что даже предпочтительней, так как в этом случае компилятор сам выполняет поразрядный сдвиг и вставляет результат в компилируемый код. Это обеспечивает отсутствие затрат времени во время непосредственного выполнения кода в микроконтроллере. В случае использования функции _BV() две предыдущие команды будут выглядеть следующим образом. PORTD |= _BV(PD3); // установить "1" на линии 3 порта D PORTD &= ~_BV(PD4); // установить "0" на линии 4 порта D
Наверно это старый дедовский сполсоб, Но он работает, покажи мне как сделать иначе, обязательно учту P.S. Я поставил на WinAVR патч, поэтому могу использовать некоторые старые команды Добавлено через 7 минут и 52 секунды Cardinal Может заменить так Статый вариант if (bit_is_clear(PIND,3)) { ... } На новую версию if (!(PIND & (1<<PIND3))) { ... } |
||||
|
|||||
cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Без восклицательного знака!
Насчет _BV не знал на самом деле. Почитал тут http://www.myrobot.ru/stepbystep/pr_mcports.php буду пользоваться ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
kaspersky89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 7.12.2007 Репутация: 1 Всего: 1 |
Так как насчёт DS18 ? Адекватно ли будет прицепить его на движок копейки?
|
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 8 Всего: 99 |
Ну если его темп. характеристики говорят что можно (я не смотрел), то какие сомнения?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Den64 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 6.4.2006 Где: Курск Репутация: 1 Всего: 2 |
Датчик темпиратуры класный. Самое главное точно измеряет +-0.5. Стоит использовать! Измеряет от -55 до +125. --------------------
Инагда пишу звуками. |
|||
|
||||
kaspersky89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 7.12.2007 Репутация: 1 Всего: 1 |
Спасиб, убедили насчёт DS
![]() Теперь надо подучить протокол I2c . Адресация устройств, временные интервалы протокола, какие команды слать, и какие принимать. Думаю сложного особо ничего не будет ![]() Просто как и всегда пугает неизвестность и мнимая сложность изучения нового устройства ![]() Ну ладно, Думаю следующее моё сообщение на этой ветке будет с новой схемой, и прошивкой. А то окончательно загажу форум спамом ![]() ![]() |
|||
|
||||
makwen |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: 1 Всего: 1 |
а чего I2C?! Если ты будешь использовать датчик температуры DS1820, то у него интерфейс 1WIRE. ЗЫ: С работай этого датчика проблем не возникало ![]() |
|||
|
||||
kaspersky89 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 7.12.2007 Репутация: 1 Всего: 1 |
makwen
Извиняюсь не знал. Тут функция из одного кода, как раз считает температуру по 1WIRE. Так что разобраться с датчиком не сможет только ленивый или в доску пьяный программёр ![]()
|
||||
|
|||||
makwen |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: 1 Всего: 1 |
прикрепил файлик с библиотекой под DS1820, которую сам писал 2 года назад. Может чем-то поможет ![]() Только нумжно временные интервалы соблюдать. Это сообщение отредактировал(а) makwen - 12.1.2008, 19:47 Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |