Jump to content

Recommended Posts

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

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

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

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

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

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

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

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

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

main.zip

post-84922-1240923208_thumb.jpg

Edited by Блуд

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

по поводу программатора. если совсем лень, и под рукой есть 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

Edited by Блуд

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

Автору.

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

Вопрос к magical.

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites
                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

Выбор подходящего элемента питания, способного обеспечивать требуемый уровень напряжения и выдавать необходимый ток на протяжении всего периода эксплуатации беспроводной пожарно-охранной системы является одной из первостепенных задач. Наиболее подходящим для этих целей элементом являются литий-тионилхлоридные элементы питания, а одним из наиболее конкурентоспособных производителей – компания Fanso, предлагающая своим клиентам продукты как универсальные, так и разработанные специально для решения конкретных задач.

Подробнее...

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

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

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

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

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

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

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

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

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

Edited by Блуд

Share this post


Link to post
Share on other sites
там выложен проект, сделанный в программе-эмуляторе PROTEUS. где наглядно видно, как работает девайс.

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

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

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

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

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

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

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

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

Share this post


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

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

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

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

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

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

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

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

Edited by Блуд

Share this post


Link to post
Share on other sites
ведь на семисегментнике более наглядно, виднее, нежели на 16х2 жк, где приходится вглядываться.

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

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

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

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

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

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

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

Edited by Юрец

Share this post


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

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

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

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

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

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

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

Share this post


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

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

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

Edited by Юрец

Share this post


Link to post
Share on other sites

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

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

Edited by Блуд

Share this post


Link to post
Share on other sites
не подскажете, как проще всего подключиться к датчику топлива?

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

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

Share this post


Link to post
Share on other sites

Автору:

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

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

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

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

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

Share this post


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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
нужно внимательнее читать описание ;)

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

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

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

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

Edited by TWIN

Share this post


Link to post
Share on other sites

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

Share this post


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

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

-40...85

Edited by TWIN

Share this post


Link to post
Share on other sites

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

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

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

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

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

Edited by Блуд

Share this post


Link to post
Share on other sites
ну, если смотреть даташит, то

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

LM324.zip

Edited by Блуд

Share this post


Link to post
Share on other sites
описание находится в файле .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);} ';

Edited by Юрец

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
У меня старая дизельная машина, в ней нет блока с "мозгами"

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

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

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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Вячеслав_НС
      помогите разобраться с кодом .(послать значение по шине TWI на ЦАП PCF8591) не работает в протеусе ...
      #define F_CPU 8000000UL 
      #include <stdlib.h>
      #include <avr/io.h>
      #include <util/delay.h>
      //*** ИНИЦИАЛИЗАЦИЯ ШИНЫ TWI ***/
      void TWI_Init(void)
      {
          // Установка тактовой частоты F_scl  = 100 кГц
          TWBR =32;
          TWSR &= (~((1<<TWPS1)|(1<<TWPS0)));
          TWCR |= (1 << TWEN);            // Разрешение работы TWI-модуля
      }

      /*** ЗАПУСК TWI ***/
      void TWI_Start(void)
      {
          TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
          while(!(TWCR & (1<<TWINT)));
          TWDR = 1001000; // передача адреса модуля PCF8591 в шину TWI
          TWCR=(1<<TWINT)|(1<<TWEN);
          while(!(TWCR & (1<<TWINT)));
      }
      /*** ОСТАНОВКА TWI ***/
      void TWI_Stop(void)
      {
          TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
          while(TWCR & (1<<TWSTO));        // Ожидание завершения передачи условия СТОП
      }
      /***ПЕРЕДАЧА ДАННЫХ В TWI***/
      void TWI_WriteByte(uint8_t data)
      {
          TWDR = data;                    // Загрузка данных в TWDR
          TWCR=(1<<TWINT)|(1<<TWEN);
          while(!(TWCR & (1 << TWINT)));    // Ожидание завершения передачи данных
      }
      /*** ПЕРЕДАТЬ ЗНАЧЕНИЕ В PCF8591 ***/
      void PCF8591_get(void)
      {
          TWI_Start();                // Запуск TWI
          TWI_WriteByte(0x40);        //включаем цап
          TWI_WriteByte(100);            // запись в ЦАП значения 100
          TWI_Stop();                    // Остановить TWI
      }            
          int main(void)
      {
          TWI_Init();    
          while (1)
      {
              PCF8591_get;
             _delay_ms(50);
        }
      }
    • By Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • By Adinetsrock
      Помогите опознать транзистор. Выпаял из бортового компьютера Surf.  Маркировка E144A    K38X

    • By BosveL
      Есть оптическая мышь. Её считывающий элемент устроен так, что когда мышка в покое, на светодиод (который подсвечивает этот элемент) подается напряжение 1.35 V и 4 mA. Но когда мышку двигаешь, светодиод загорается сильнее и напряжение на нём составляет уже 1.8 V и 24 mA. Необходимо сделать так, чтобы на ардуино приходила логическая единица, означающая, что мышку двигают. Я думаю это сделать с помощью мосфета, только не могу никак подобрать его. Он должен открываться при указанном напряжении (когда мышь двигается) и посылать через повышающий преобразователь 3.3 вольта (т.е. лог. единицу). Если это можно сделать не с помощью мосфета, подскажите пожалуйста свои мысли и идеи.
      ___
      Это будет маска для сна, которая замечает движение глаз в быстрой фазе сна и зажигает светодиоды (на самой маске). Ставил PIR датчик движения, он не хочет работать так близко, срабатывает в 1 из 5 случаев. А вот мышка подходит идеально. Заменил её светодиод на инфракрасный, теперь она работает в невидимом для человеческого глаза диапазоне. Кстати говоря этот ИК светодиод питается отдельно от мышки (с ней он работать не хочет). и теперь контакты, где был родной светодиод (красный) поступает указанные выше значения. Вот с этих контактов хочу взять логическую единицу.  Весь проект написан на ардуино, наработки скетча имеются. Я новичок, поэтому не могу подобрать мосфет. Искал в инете, понял как это работает, но не могу разобраться как его подобрать. Заранее спасибо за помощь.
×
×
  • Create New...