2 630 сообщений в этой теме

Блуд    0

я дико извиняюсь, ссылку с ходу не нашёл.

но все проекты интересные сохраняю.

эту схему можно подключить к любой машине с электрическими форсунками. все подключение – к одному контакту на форсунке и к одному контакту на датчике скорости, ну и плюс питание.

датчик скорости - 2-х контактный, выдает 4 импульса за один оборот колеса с амплитудой ~8V (а как расход конвертировать в литры на 100 км без него?). в принципе, думаю, совместим с подавляющим числом автомобилей.

по совместительству показывает напряжение бортовой сети))

запрограммировать биты EESAVE, BOOTSZ1, BOOTSZ0, CKSEL1.

так как выложен исходный код, не забываем, что любая попытка модифицировать и выдать за своё / продать его, или заработать иным образом карается законом об авторском праве. выложено исключительно в целях ознакомления.

авторское право пренадлежит Дмитрию aka kd@gers

тем не менее, интерес в подсчёте расхода автовладельцев карбюраторных машин, всё ещё остаётся.

main.zip

post-84922-1240923208_thumb.jpg

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
vecha    2

Заинтересован собрать проект, но поскольку полный чайник по МК, наверное и вопросы мои будут соответствовать этому. Можно ли будет добавить такую функцию как "обороты двигателя"? Кварц доподнительный не нужен,как я понял ? Какой програматор собрать уже из проверенных участниками форума? Буду приобретать детали,поэтому переспрашиваю. Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0

по поводу программатора. если совсем лень, и под рукой есть LPT-порт, то собирается так известная "схема 5 проводков", крайне ненадёжная, но идеальна для новичков.

http://www.myrobot.ru/stepbystep/mc_programmer.php

если LPT нету, то можно собрать схему Громова (COM-порт). схема также довольно примитивна.

http://easyelectronics.ru/avr-shag-pervyj-programmator.html

спалить его сложно, в отличие от LPT. наилучшим вариантом я считаю аналог AVR910, то бишь 89S, полноценный USB-программатор по схеме изобретателя PROTTOSS'a. сам пользуюсь таким, собирается за один вечер, в основе лежит Mega8 - всё зашито в ней, работает почти со всеми программами (это ведь аналог AVR910). удобна ещё тем, что питание можно брать прямо с неё.

http://prottoss.com/projects/AVR910.usb.pr..._programmer.htm

выглядит так: см. вложение. удобен ещё тем, что гененирует на одной из ножек меандр (через CKOUT от меги8), в случае некорректного прошивания фьюзов CKSEL, реанимация МК не составит труда.

по поводу оборотов двигателя - вот ещё проект, где уже готовенькая схема реализации. тоже скопипастил откуда-то)

сие устройство с интервалом в 5сек показывает кол-во топлива в баке авто и температуру салона. Настраиваеться практический на любой датчик в баке сопративлением до 500 Ом(ограничение внесено вручную). Работает на Меге8 отображает на семисегментник динамический с общим анодом, датчик температуры ds18b20. пожелания и жалобы сюда. если гдето начудил сильно не пинайте я только учусь )))

значит как правильно настроить:

1.отключаем "родной" прибор(откидываем провод от датчика бака)

2. подключаем прибор переключаем в режим настроек

3. в первом меню выставляем емкость бака

4. щелкаем кнопку "mod" выставляем максимальное сопративление датчика бака(на жигулях нового типа датчик на 330 Ом)

5. щелкаем кнопку "mod" и видим показания ацп...тут надо подстроечным резистором поймать значение 255 (ПРИ ПУСТОМ БАКЕ!!! либо при в ручную опущенном в нижнее положение поплавке)

6. коротнуть провод датчика бака на корпус(либо поднять поплавок в верхнее положение) при этом измениться показания на ацп, нажать на кнопку "+" при этом сохраняться данные в еепром

7. еще раз проверить правильность ввода перещелкиванием "mod" и переключить кнопку(или джампер) в обычный режим.

вот и все

схему не чертил, печатку не делал поэтому выкладываю проект с проэтуса

P.S. резонатор на 8,0000МГц(что было под рукой)

кнопки лучше вынести на шлейф потому, что они нужны 1 раз только для настройки

+ до 8 датчиков температуры

+ дискретные светодиоды

+ вольтметр (от 8 до 15В погрешность 0,05)

+ тахометр(инжектор)

+ часы с внешним календарем (ds1307)

авторские права: shtorm. помним, что любая попытка заработать на чужом проекте или продать его, карается законом об авторском праве.

tank11.rar

post-84922-1240931752_thumb.png

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Futer    0

Автору.

Правильно ли я понимаю,что при подключании БК к датчику уровня топлива штатный прибор необходимо отсоединить?

Вопрос к magical.

Можно узнать подробнее о замене датчика на переменное сопротивление (марку,номинал и др.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BudikV    0

А помните, были конструкторы "Сделай сам"?

Вот я такой бы щас купил, чтоб сделать описанный вначале бортовик. Ток в него нужно расходомер добаить, и все.

Блуд, извини, скачанный архив из 54 поста не знаю чем открыть. Видать устарел я немного.

А вот в 88 году компьютер "Специалист" своими золотыми ручками смог... Дальше было проще, а этот проект для моих 15 лет был, наверное, самым сложным.

Извините, отвлекся на мемуары.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0
А помните, были конструкторы "Сделай сам"?

Вот я такой бы щас купил, чтоб сделать описанный вначале бортовик. Ток в него нужно расходомер добаить, и все.

давай, пошлю по почте ))) правда, я так и не нашёл на 75к поверхностных резисторов, блин, придётся или в параллель что-нибудь или последовательно..

Блуд, извини, скачанный архив из 54 поста не знаю чем открыть. Видать устарел я немного.

там выложен проект, сделанный в программе-эмуляторе PROTEUS. где наглядно видно, как работает девайс.

то есть, вам необходимо скачать proteus.

А вот в 88 году компьютер "Специалист" своими золотыми ручками смог... Дальше было проще, а этот проект для моих 15 лет был, наверное, самым сложным.

Извините, отвлекся на мемуары.

каждый с чего-то начинал)

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BudikV    0
там выложен проект, сделанный в программе-эмуляторе PROTEUS. где наглядно видно, как работает девайс.

то есть, вам необходимо скачать proteus.

Из того, что заметил - там 4 рязрядный светодиодный индикатор? Это другое устройство? Я имел ввиду, что в модель с двухстрочным жидкоокристаллическим индикатором добавить пару функций.

1 Мгновенный расход топлива

11 Прогноз пробега на остатке топлива в баке

Взять инфу желательно с со спецразъема на контроллере.

Возможность подключения МК только колодкой диагностики - легкая установка.

Что-то типа этого Больше всего интересует работа с Bosch M7.9.7+

Ну и предел мечтаний - наличие ЮСБ на девайсе для обновления прошивки. Подключил в машине к ноуту, прошил, и поехал с новой прошивкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0
Из того, что заметил - там 4 рязрядный светодиодный индикатор? Это другое устройство? Я имел ввиду, что в модель с двухстрочным жидкоокристаллическим индикатором добавить пару функций.

это уже к автору. другое дело, что может не хватить памяти меги8 (сравните размеры кодов), да и на индикаторе не так и много места осталось. придётся чем-то рисковать. лично по мне так проще собрать ещё один девайс, ведь на семисегментнике более наглядно, виднее, нежели на 16х2 жк, где приходится вглядываться.

1 Мгновенный расход топлива

11 Прогноз пробега на остатке топлива в баке

чтобы прогнозировать пробег, не забывайте, надо ведь тогда будет ещё к спидометру подключиться и считать импульсы с него, плюс кварц в данном лучае обязателен, для точности. да и предсказания так и так будут неточными- ведь в баке есть "резервный" запас топлива, когда стрелка кажет ноль, а машина едет.

Ну и предел мечтаний - наличие ЮСБ на девайсе для обновления прошивки. Подключил в машине к ноуту, прошил, и поехал с новой прошивкой.

а в чём проблема собрать самостоятельно? я ж схему-то приводил выше. единственное только, что это ведь затронет ещё 4 ножки (SCK, MOSI RESET, MISO), может элементарно не хватить ножек у МК (не забываем кварц- ещё две ноги). то есть 18,19 ноги придётся переносить, так как они зарезервируются программатором. то есть необходимо будет выбрать другой __lcd_port. и заново переставлять ноги, исправлять программу и главное - перепаивать рабочий проект, ведь распайка будет абсолютно другая.

смысл? имхо, лучше и проще собрать два девайса отдельно. а остаток пробега прикидывать в уме. либо он будет сильно скакать, едешь 5 км/ч -покажет совсем мало, едешь по трассе- покажет много.

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    9
ведь на семисегментнике более наглядно, виднее, нежели на 16х2 жк, где приходится вглядываться.

не забываем о фактически "нулевой" видимости светодиодных индикаторов при попадании на них солнечного света. не помогают фильтры, и т.д. Пробовал сам - от их использования отказался.

мой первый девайс : http://forum.cxem.net/index.php?showtopic=...st&p=208812

что может не хватить памяти меги8

на семисегментнике код занимает меньше памяти, чем на lcd из-за ненадобности библиотек .

Правильно ли я понимаю,что при подключании БК к датчику уровня топлива штатный прибор необходимо отсоединить?

совершенно верно!

всем: навороты (расход топлива, часы, скорость, тахометр) если и будут, то нескоро :)

Изменено пользователем Юрец

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0
не забываем о фактически "нулевой" видимости светодиодных индикаторов при попадании на них солнечного света. не помогают фильтры, и т.д. Пробовал сам - от их использования отказался.

согласен. но если вмонтировать его куда-нибудь в панель, под козырёк, то будет весьма кстати. цифры крупные, от дороги не отвлекает. у жк 16х2 просто не слишком велики углы обзора. то есть поместил где-нибудь сбоку снизу, и уже как-то и не видно с водительского-то места.

на семисегментнике код занимает меньше памяти, чем на lcd из-за ненадобности библиотек .

тем не менее, занимает. народ вообще писал библиотеки под семисегментники, дабы выводить цифры и символы через свои функции. типа удобно.

Правильно ли я понимаю,что при подключании БК к датчику уровня топлива штатный прибор необходимо отсоединить?

совершенно верно!

можно спросить. а если их включить одновременно и откалибровать, то ведь будет показывать!? пусть стрелка врёт, чёрт с ней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    9
можно спросить. а если их включить одновременно и откалибровать, то ведь будет показывать!? пусть стрелка врёт, чёрт с ней.

теоретически - возможно.

может иметь место эдс от стрелочной головки .при встряске, качании измерительной головки паразитные микротоки от неё могут вносить свой "шум"... (может это и бред, но веселый :D )...

Изменено пользователем Юрец

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0

имхо, никакой шум не должен вносить значимые изменения (итак ведь точность показаний невелика, 1 литр на цифровое деление), ибо будет ведь откалибровано с учётом прибора. хотя, могу ошибаться. надо проверять.

не подскажете, как проще всего подключиться к датчику топлива?

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    9
не подскажете, как проще всего подключиться к датчику топлива?

в каком смысле?

я подключал так: отсоединил фишку (разъем) от стрелочной головки, и подсоединялся непосредственно к этой фишке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TWIN    2

Автору:

Скажите, почему ОУ не LM124 - у него температурный рабочий диапазон гораздо более подходящий для условий эксплуатации в автомобиле - у LM324 всего от 0 до 70 градусов...

И еще пара вопросов связанных с реализацией определения уровня топлива в баке...

1. Каким образом в Вашей программе калибруется датчик? По минимальному и максимальному уровню топлива в баке, а промежуточные путем вычислений? Если да, то могу с точностью сказать, что промежуточные показания будут отличаться от истины... Причина в том, что многие резистивные датчики не имеют линейной зависимости сопротивления от положения поплавка. А также, если разобрать датчик, можно увидеть что проволока в нем намотана неравномерно... К чему это я? Просто предлагаю вариант тарирования бака (хотя, может быть Вы и так реализовали этот вариант)...

2. Как в программе Вы реализовали алгоритм снятия показания уровня? Я имею ввиду проблему с перемещением (во время движения автомобиля) топлива в баке, скачки уровня... Каким-то образом предусмотрен анализ "быстрого" изменения уровня, или просто снимаете с какой-то периодичностью показания? Выводите среднее значение за какой-то промежуток времени? Или какой-нибудь другой алгоритм? Что лучше работает не проверяли?

P.S.: Сам разрабатываю подобное устройство, интересно узнать о практически полученных результатах, обменяться мыслями и опытом так сказать ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    9
Скажите, почему ОУ не LM124 - у него температурный рабочий диапазон гораздо более подходящий для условий эксплуатации в автомобиле - у LM324 всего от 0 до 70 градусов...

LM124 трудно достать в моем городе.

1. Каким образом в Вашей программе калибруется датчик? По минимальному и максимальному уровню топлива в баке, а промежуточные путем вычислений?

нужно внимательнее читать описание ;)

калибровка производится через 1 литр, так-что неравномерная геометрическая форма бака и нелинейность резистивного датчика никак не сказываются на правильности показаний.

2. Как в программе Вы реализовали алгоритм снятия показания уровня? Я имею ввиду проблему с перемещением (во время движения автомобиля) топлива в баке, скачки уровня...

вот график: http://forum.cxem.net/index.php?act=attach...st&id=39983

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TWIN    2
нужно внимательнее читать описание ;)

Извините, но подробного описания проекта я не нашел... Возможно, описание находится в файле .docx, но у меня не чем его открыть...

Я имел ввиду алгоритм, а не график. И интересовался как он на практике работает...

Если это Ваш секрет, можете не отвечать...

По поводу LM124... Ну, хотя бы указали предпочтительную замену - устройство, как я вижу популярно, его повторяют, что будет с показаниями уровня топлива у людей в -20, я, например, не в курсе...

Изменено пользователем TWIN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0

кстати, сама мега8 на практике не обязательно, что заведётся при отрицательных температурах. насколько я знаю, лишь только промышленные образцы вроде как работают от -55. то есть зимой в любом случае возникнут трудности, если не сделать систему подогрева. чтобы при подключении питания, если камень не заработал, включался некий нагреватель, прижатый к МК и ОУ, и при достижении определённой температуры чтобы нагрев прекращался (ведь они заведутся в определённый момент подогрева).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TWIN    2
кстати, сама мега8 на практике не обязательно, что заведётся при отрицательных температурах. насколько я знаю, лишь только промышленные образцы вроде как работают от -55. то есть зимой в любом случае возникнут трудности, если не сделать систему подогрева. чтобы при подключении питания, если камень не заработал, включался некий нагреватель, прижатый к МК и ОУ, и при достижении определённой температуры чтобы нагрев прекращался (ведь они заведутся в определённый момент подогрева).

Зачем быть таким подозрительным и все усложнять? Можно просто почитать даташит на мегу ;)

-40...85

Изменено пользователем TWIN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0

ну, если смотреть даташит, то

Operating Temperature ................................. -55°C to +125°C

Storage Temperature .................................... -65°C to +150°C

не знаю, мне так преподаватель сказал) надо, наверное, действительно самому будет проверить.

а что, в данном проекте можно безболезненно LM324 заменить на LM124? а пересчитывать не придётся?

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TWIN    2
ну, если смотреть даташит, то

Operating Temperature ................................. -55°C to +125°C

Storage Temperature .................................... -65°C to +150°C

не знаю, мне так преподаватель сказал) надо, наверное, действительно самому будет проверить.

а что, в данном проекте можно безболезненно LM324 заменить на LM124? а пересчитывать не придётся?

Я смотрел вообще-то даташит на 128 мегу, под рукой просто - на ней делаю свой проект, но уверен, что и у 8-й меги не меньше рабочий температурный диапазон...

По поводу замены - не поленитесь скачайте даташит на LM324. А набрав в поисковике, к тому же найдете общий даташит LM324/LM224/LM124... ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Блуд    0

на LM324 даташит уже сто лет назад скачал.

и он только для LM324)

вот, может, кому надо)

всё же они отличаются.

LM324.zip

Изменено пользователем Блуд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    9
описание находится в файле .docx, но у меня не чем его открыть...

docx открывается microsoft office 2007. могу выложить и для 97-го офиса.

Я имел ввиду алгоритм, а не график. И интересовался как он на практике работает...

подождите немного. выложу и алгоритм.

чтото типа того:

создаем переменные:
unsigned  int result_fuel=0; //считанное значение АЦП
unsigned  long int lcd_fuel,lcd_fuel_old=0;//то, что показывается на lcd
eeprom int fuel_koef=2,counter_fuel=0;
unsigned char init=1; флаг первого вызова процедуры fuel_lcd при инициализации
eeprom long int fuel[100]={0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,
400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,8
00,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990};// записанные в еепром первоначальные значения

инициализация:
result_fuel=read_adc(0);
fuel_lcd();
init=0;

void fuel_lcd(void){
unsigned char counter_fuel_next=0;
for(counter_fuel=0;counter_fuel<99;counter_fuel++){
counter_fuel_next=counter_fuel+1;
if ((result_fuel>=fuel[counter_fuel])&(result_fuel<fuel[counter_fuel_next])){lcd_fuel=0;lcd_fuel=counter_fuel*fuel_koef;break;};
};
if(init==1){lcd_fuel_old=lcd_fuel;};
if(lcd_fuel_old<lcd_fuel)lcd_fuel_old++;
if(lcd_fuel_old>lcd_fuel)lcd_fuel_old--;
if(init==0){sprintf (buffer_dec, "%2d", lcd_fuel_old/fuel_koef);lcd_gotoxy(12, 0);lcd_puts(buffer_dec);};
} 


в теле while (1) 
{result_fuel=read_adc(0);fuel_lcd(); 
delay_ms(50);} ';

Изменено пользователем Юрец

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собираюсь повторить данный девайс, поэтому есть вопрос к автору данного девайса,

У меня старая дизельная машина, в ней нет блока с "мозгами"

и рассход расчитать сложно

по этому посетила такая мысль по поводу расхода,

что если ввести еще 2 отображаемых режима:

1- прогнозируемый остаток по городу

2- прогнозируемый остаток по трассе

при калибровке бака, вводим дополнительные данные, рассход по городу

и рассход по трассе

(я думаю что практически все автовладельцы

для своего авто могут его с ходу назвать, как он будет вводиться неважно

можно количество км/на 1 литре топлива, можно рассход на 100 км)

и врезультате получаем не точный но прогноз) - меня бы он устроил на 100%

еще можно привязаться ко времени и ввести расход топлива на час

может я неправ,но мне кажется что стоит немного дополнить программу

без дополнительной обвязки деталями и врезультате "девайс"

дополниться новыми возможностями

просто решил поделиться с автором своей мыслью,

поэтому просьба сильно ногами не пинать :unsure:

Что скажет автор по поводу данной мысли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    9
У меня старая дизельная машина, в ней нет блока с "мозгами"

и рассход расчитать сложно

неужели нет одометра? (показывает пройденный километраж).

по этому посетила такая мысль по поводу расхода,

что если ввести еще 2 отображаемых режима:

1- прогнозируемый остаток по городу

2- прогнозируемый остаток по трассе

теоретически можно.

привязать сигнал от спидометра. при скорости <=60 км/ч : расход по городу,

а при скорости >60 км/ч : расход по трассе.

по этому принципу можно ввести и прогнозируемый остаток.

проблема в другом: не хватит памяти ATMEGи 8. либо делать на более мощном (ATMEGA16, 32), либо конкретно вышлифовывать программу в целях оптимизации и уменьшения рабочего кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: Alexey104
      Всем привет!
      Возникла следующая проблема:
       
      Есть две ардуины 'Mega2560'. По несчастливому стечению обстоятельств данные платы попали в руки одному чуваку, который, вернув их, заявил, что они перестали работать после того, как он "чисто ради интереса" поковырял на обеих некоторые фьюзы. Есть у меня такой китайский usbasp v2 программатор:
      Подключив данный девайс к ICSP-пинам первой платы, удалось без проблем восстановить на ней загрузчик через стандартную Arduino-IDE, после чего работоспособность платы полностью восстановилась. Но вот при попытке сделать то же самое со второй платой, получаю это:
      Такое же сообщение получаю при попытке зашить загрузчик в неподключенную к программатору ардуину, то есть программатор вообще не видит МК. Плата прекрасно работала до того, как вышеупомянутый товарищ покрутил настройки фьюзов.
       
      Что я пытался предпринять:
      Замыкал пины JP3 программатора, отвечающие за понижение скорости, подключал к ардуине 5V от внешнего источника при прошивке загрузчика, - не помогло.
       
      Поиском пользоваться умею, аналогичную тему тут находил, но там проблема была в том, что парень неверно подключал программатор к контроллеру. В моём же случае всё подключено верно, повторюсь, что загрузчик первой платы этим же программатором был восстановлен успешно.
      Буду рад любым советам касательно того, как восстановить работоспособность платы.
       
       
       
    • Автор: KVN
      Всем привет.
      Застрял на подключении 2 датчиков HC-SR04 к Atmega8 (CVAVR 3.12).
      1 настроен на прерывание 0, работает на таймере 0. (работает нормально)
      2 настроен на прерывание 1, работает на таймере 1. (показывает ерунду если рассчитанное расстояние 1 датчика меньше чем расстояние 2 датчика). 
      Фото прилагаю, видна часть кода. Прошу направить на путь истинный.
       
       


    • Автор: Ru_s
      Здравствуйте. Подскажите пожалуйста, возможно ли на attiny13 реализовать такую штуку. Мне в процессе работы программы нужно поменять режим работы таймера/счетчика с fast PWM на обычный счёт, отсчитать длительный промежуток времени и опять вернутся в режим ШИМ. Т.е. я подаю на ногу сигнал ШИМ и когда он в максимальном значении, я его отключаю, и тупо подаю на ногу высокий лог. уровень. В это время Т/С по идее свободен, и мне надо посчитать время работы выхода на максимальном лог. уровне, при достижении какого-то значения времени нужно перевести т/с обратно в ШИМ. Возможно ли это? И как приблизительно это реализовать
    • Автор: ShimkoMax
      Здравствуйте. Требуется вывести данные температуры и влажности на экран. С LCD дисплеем разобрался, осталось разобраться с SHT21. Постоянно выводит 0 на дисплей:
      Main.c:
      #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include "globals.h" #include "LCD_lib.h" #include "twi.h" // I2C #include "sht21.h" int main(void) { I2C_Init(); _delay_ms(100); LCD_init(); char buffer[20]; roomAdrInit(); SHT21_reset(); while(1) { SHT21_reset(); LCD_sendString(itoa((int)get_temperature(), buffer, 10), 4, 0, 0); _delay_ms(1000); } } twi.c:
      #include <avr/io.h> #include "twi.h" void I2C_Init(void) { TWSR = 0; TWBR = 0x20; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); } void I2C_StartCondition(void) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while(!(TWCR & (1<<TWINT))); } void I2C_StopCondition(void) { TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN); } void I2C_SendByte(uint8_t data) { TWDR = data; TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); } unsigned char I2C_ReadByteAck(void) { TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA); while(!(TWCR & (1<<TWINT))); return TWDR; } unsigned char I2C_ReadByteNak(void) { TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); return TWDR; } sht21.c:
      #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <stdio.h> #include "twi.h" #include "sht21.h" void SHT21_reset() { unsigned char reg[1]; reg[0]=SHT21_reset_cmd; I2C_StartCondition(); I2C_SendByte(SHT21_i2c_write); I2C_SendByte(*reg); I2C_StopCondition(); _delay_ms(100); } uint16_t checksum(unsigned char data[],uint8_t byte, uint8_t check) { uint8_t crc=0; uint8_t bytectr,bit; for (bytectr=0; bytectr<byte;bytectr++) { crc^=(data[bytectr]); for (bit=8;bit>0;bit--) { if(crc&0x80) { crc=(crc<<1)^polynomial; } else { crc=crc<<1; } } } if (crc!=check) { return 0; } else { return data; } } void write_user_register() { unsigned char reg[3]; reg[0]=user_register_write; reg[1]=0x44; I2C_StartCondition(); I2C_SendByte(SHT21_i2c_write); I2C_SendByte(*reg); I2C_StopCondition(); } uint16_t read_value(uint8_t reg) { char data[4],crc; uint16_t result; data[0]=reg; I2C_StartCondition(); I2C_SendByte(SHT21_i2c_write); I2C_SendByte(reg); I2C_StartCondition(); I2C_SendByte(SHT21_i2c_read); data[1] = I2C_ReadByteAck(); data[2] = I2C_ReadByteAck(); crc=I2C_ReadByteNak(); I2C_StopCondition(); result=(data[1]<<8) | data[2]; checksum(result,4,crc); result &= 0xFFFC; return result; } float get_humidity() { //char buffer2[4]; uint16_t hum_value = read_value(humidity_hold_mode); return -6 + 125.0 / 65536.0 * hum_value; //dtostrf(rh,5,2,buffer2); _delay_ms(100); } float get_temperature() { //char buffer1[4]; uint16_t temp_value = read_value(temperature_hold_mode); return -46.85 + 175.72 / 65536.0 * temp_value; //dtostrf(tc,5,2,buffer1); _delay_ms(100); }  
    • Автор: GeloMik
       
      Я новичок в программировании AVR контроллеров, хотя знаю +/- C++.
      Проблема заключается в том, что я не могу написать прошивку к своему маленькому проекту. Используемый мною контроллер - ATTiny45. У него на борту имеется 1 АЦП с выходом на 4 ноги. Нужно, чтобы фактически одновременно брался замер с 3, 4 и 5 порта по АЦП, и при появлении 1 на одном из них МК должен подать 5В на 1 или 2 порты. Источник АЦП AREF. 
      Сюда прикреплю схему самого робота, если кого не затруднит помочь написать прошивку, буду очень благодарен