Страница 1 из 3

Помогите с разработкой устройства тахометр+вольтметр+таймер

Добавлено: Вс сен 30, 2007 22:53:44
gonzales06
В одном форуме мне ответили, что коты должны думать сами, а готовые схемы в Гогле, а така как я ему не доверяю, то решил.

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

Устройство следующие:
-Тахометр, который считывает обороты (с датчика Холла\или с коммутора), погрешность 10-30, оборотов в минуту
+Вольтметр, погрешность 0,1 Вольт
+Счетчик времени работы двигателя, с погрешностью не опредилися.

Хотелось, использовать LSD -дисплей, можно и индикатор 4-х разрядный .

Нуждаюсь в помощи, буду складывать свои нароботки.
Вопросы:
1. С чего лучше начать- разработка программы, или железной части.
2. Правильно ли я понял, что для этих целей подойдет ATMega8 или 16
3 На каком языке проще осуществить данный замысел на Си или ассамблере, пока вник в ассамблер поигрался огоньками.
4. Можно такую идею осуществить, имея из приборов китайский мультиметр.

Примерное предстовление об устройстве следующее (по блокам):
-Стабилизатор напряжения (КРЕН)
-МК
-7-сег индикатор
-ОУ на который пойдет сигнал от датчика Холла
- Блок вольтметра под ?(не разобрался)

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

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

Устройство следующие:
-Тахометр, который считывает обороты от 0 до 12-13 тыс.(с датчика Холла\или с коммутора один сигнал равен одному обороту), погрешность 10-30, оборотов в минуту
+Вольтметр, погрешность 0,1 Вольт
+Счетчик времени работы двигателя, с погрешностью не опредилися.

Хотелось, использовать 7-сег 4-х/или 3-х разрядный индикатор.

Нуждаюсь в помощи, можно я открою в этом форуме тему и буду складывать свои нароботки в течение большого времини

Вопросы:
1. С чего лучше начать- разработка программы, или железной части.
2. Правильно ли я понял, что для этих целей подойдет ATMega8 или 16
3 На каком языке проще осуществить данный замысел на Си или ассамблере, пока вник в ассамблер поигрался огоньками.
4. Можно такую идею осуществить, имея из приборов китайский мультиметр.

Примерное предстовление об устройстве следующее (по блокам):
-Стабилизатор напряжения (КРЕН)
-МК
-7-сег индикатор
-ОУ на который пойдет сигнал от датчика Холла
- Блок вольтметра под ?(не разобрался)


Вот подобное устройство http://telesys.ru/electronics/projects.php?do=p104 Только на ВАЗ предел 6000 и 2а искрообразование за один оборот, а мне для 2-х тактного двигптеля 1искра=1обороту

Надеюсь, что задумка не останется на уровне фантазии.

Добавлено: Пн окт 01, 2007 00:52:34
Negor
[Пишет начинающий, небольшой опыт в асме - энтузиазма - море]
Двигатель, надо понимать, автомобильный. Считывать тогда наверно лучше с коммутатора. Реализовывать можно так - один таймер T0 например отсчитывает секунды, другой T1 - обороты. В теле обработчика переполнения T0 считаем до 60 и выводим на индикатор значение T1. Для большей лучшести можно запускать T0 с началом работы двигателя. Ты ж обороты не будеш считать при выкл. двигател :)) . Вольт метр сделаеш на АЦП(тут где-то на форуме написано как им пользоватся). Ну а с выводом на LCD думаю вообще проблем не будет, особенно если писать всё на Си. Обычного вольт метра должно хватить. МК кста можно взять и Мегу8. Хватит с головой. И погрешности у тебя в любом случае будут маленькие. С чего начать? Собери макет - вместо коммутатора поставь какой нить моторчик с магнитом на валу, а к МК геркон подключи. Т.е. собери всю обвязку что тебе надо(там наверно для АЦП какой нить делитель надо) и LCD прикрути. А потом принимайся за программирование. сначало освой вывод циферок(значений) на LCD. И не забуть что МК должен как то узнать что двигатель включён! Сначало напиши прогу где будет выводится токак время работы двигателя, потом тахометр реализуй ну а АЦП в последнюю очередь. Так бы делал я.

Re: Помогите с разработкой устройства тахометр+вольтметр+тай

Добавлено: Пн окт 01, 2007 06:07:07
tych
gonzales06 писал(а):С чего лучше начать- разработка программы, или железной части.
Конечно с "железа" - оно должно быть способно реализовать ваше тех задание - ТЗ. Возможно вам пригодится краткий курс по Мк - он под кнопкой "www" лежит.

Советую использовать симуляторы для отладки устройства и получения навыков работы с ними - например PROTEUS.

Возможно тебе пригодтится пример часов реального времени - он есть в компиляторе CVAVR в папке C:\CVAVR\examples\AVR134

Добавлено: Пн окт 01, 2007 06:53:21
Artem333
На днях решил написать статью о своём тахометре. В прошивке реализован вывод на 4 разряда диодного индикатора. Написано на асме. Если будет настроение прилеплю и вольтметр. Такчто прогу можно взять как пример. Приложенный код на асме если кого-то интересует, правда пока без коментариев.

Добавлено: Пн окт 01, 2007 17:09:40
gonzales06
Спасибо.
Буду думать.
Двигатель двухтактный от мотоцикла Сова.
Включатся процесс счета оборотов и времени работы двигла будет с помощью кнопки, если это возможно.
Померил на выводах комутатора напряжение, на зеленом с черной полоской проводе напряжение при прохождении шторки через датчик Холла напряжение изменяется от 0 до 7,5 Вольт, я пологаю это достаточный сигнал для МК.
:lol:
Вообще много не понятного, конечно проще сделать готовое устройство с прошивкой.
Попробую. :wink:

Добавлено: Вт окт 02, 2007 16:36:12
gonzales06
На форумах, информации по таймерам не нашел, зато разобралмя как можно вывести слово на LSD с помощью програмирования на Си и проги CVAR.
Осталось разобраться как написать прогу, чтобы запускать таймер от кнопки и выводить данные.
Если есть сылки на подробные объяснение как это зделать, или книги буду рад, или есть время поясните здесь заранее благодарен.

Добавлено: Вт окт 02, 2007 17:09:48
moLCHec
У таймеров счётчиков есть вход захвата которым можно осуществлять захват значения таймера, так что полезно использовать сею функцию, причём советую просчитать не может получится ли так что произойдёт переполнение сётчика и сброс, т.е. время переполнения счётчик должно быть >> времени клика, разрядность при этом может и пострадает зато надёжность возрастёт, вообщем совету и с карандашиком и калькулятором всё посчитать тогда стонет ясен порядок(погрешность) измеряемых величин и более менее прояснится как это всё организовать
Чтоб запускать таймер от кнопки достаточно изменять соответствующий регистр TCCRxx, по поводу ЖК на форуме уже столько переговорено и на асме и на СИ, тока ленивый не найдёт

Добавлено: Вт окт 02, 2007 21:19:43
gonzales06
Да по поводу LSD. много всего нашел, а вот с таймером проблема, с захватом понятно, только как это выразить на Языке Си не очень
, буду разбираться.

Добавлено: Ср окт 03, 2007 02:42:02
Mamonth
У себя на сайте я выложил статью по работе с вольтметром, код на асме. http:\\mth.h18.ru

По работе с LCD: в си все очень просто, главное не ошибиться в самом простом... :) Там проводки перепутать, например.

Добавлено: Ср окт 03, 2007 15:49:12
moLCHec
gonzales06 при работе с захватом язык не выжен, конфигурируем пин на вход устанавливаем регистры и вперёд. Главное начать :)

Добавлено: Ср окт 03, 2007 19:23:45
Negor
как написать прогу, чтобы запускать таймер от кнопки
Таймера в avr считают от тактового генератора начинают считать сразу после того, как в регистр настроек занесены значения пределителя или источника сигнала. Я так понял, что в задаче стоит начать считать время после запуска двигателя, который стаотует от кнопки. Значит таймер нужно настроить так, чтобы он считал, например секунды(т.е. переполнение таймера наступало каждую секунду. А в процедуре обработчика этого прерывания будем считать секунды.) Значить при нажатии кнопки надо в регистр таймера занести информаци о пределителе. А сам таймер настроить на сброс по совпадению и расчитать значение, до которого должен досчитать таймер чтобы отмерять секунду.... И по изменению уровня на линии I/O к которой подключена кнопка заносить пределитель и получится что таймер будет тикать по нажатию кнопки. Примерно так. Будут вопросы - спрашивай.

Добавлено: Чт окт 04, 2007 21:06:05
gonzales06
Получается, следующее:
- Преддилитель равен 1024, значит при частоте в 10000000 Гц значение счетного регистра буде увеличиваться каждые 1024/10000000) 0,0001024 секунды, значит одна секунда равна (1/0,0001024) 9765 импульсам.
- При 16-разрядном счетчике стартовое значение должно быть (65536-9765) равное 55771, TCNT0= ? на могу понять как перевести в 16-иричную систему.

Значит регистры согласвно ДШ надо установить следующие
-TIMSK =0b00000001 (прерывания по переполнению таймера 0)
-TCCR0=0b00000101 (предделитель 1024)
-TCNT0=?

То есть, надо задать переменную, например у, и условие при прирывании y+1
затем значение y выводить на LCD.

Проавильно ли я все понял, и выстовил ригистры

Добавлено: Пт окт 05, 2007 21:59:09
Negor
Расчёты вроде верны. Для перевода юзай виндовый калькуль. Там есть ежим "Инженерный". Не совсем понял про переменную, поэтому напишу как делал я. при настройке таймера сначала выставляеш значения TCNT. Потом маску прерываний. Потом устанавливаеш пределитель а потом глобальное разрешение прерываний. При вызове обработчика прерывания по переполнению(когда TCNT будет равен 65536 при 16-разр. счётчике) надо заново заносить статовое значение TCNT. Кстати 55771 <-> 0xD9DB Значит тебе надо в TCNTH занести 0xD9 а в TCNTL 0xDB.

Добавлено: Вс окт 07, 2007 18:42:23
gonzales06
Так с выводом на ЖК я разобрался.
Теперь я задал глобальную переменную temp
unsigned char temp;

Осталось написать условие когда tcnt=0
temp++. bчтобы считал минуты *60

И вторая задача выводить значение temp, на ЖК

Я так это предстовляю
while (TIFR=0b10000000);

{
temp++;
temp=temp*60;
};
}

Добавлено: Вс окт 07, 2007 19:10:57
tych
очисти флаг прерывания - это стр 3 под "www".

можно так написать умножение temp *= 60;

Добавлено: Вс окт 07, 2007 19:50:04
gonzales06
почему ошибка
while (TIFR==0b10000000);

{

lcd_buffer[33]++;
lcd_buffer[33]/60;
lcd_init(12);
lcd_clear();
sprintf(lcd_buffer,0);
lcd_puts(lcd_buffer[33]);
delay_ms(200);
sei

};
}

Добавлено: Вс окт 07, 2007 20:02:10
tych
sei - зачем ? у тебя вроде прерывания не используются ? и формат sei смотри в "прервания в AVR" это стр. 3 под "www".

Вопросы об ошибках снабжай их описанием или текстом или картинками.

Добавлено: Вс окт 07, 2007 20:04:07
gonzales06
Это я ошибся, у меня проблема вывести переменную на LCD, и хотелось бы целыми числами.

Добавлено: Вс окт 07, 2007 20:33:16
LDZ
Может в этом проекте что-нибудь полезное найдешь.
http://projects.caxapa.ru/index.html?ID=69

Добавлено: Вс окт 07, 2007 22:12:32
Negor
насчёт sei
В Си ассемблерные команды надо писать так

Код: Выделить всё

asm("sei")
то же для cli и других команд асма
А насчёт вывода переменных.... я на си для авр до такого не дошёл, но в Borland C вроде для вывода puts надо данные в строку преобразовывать... и кажется это делается явным преобразованием. Всё очень неточно, т.к. нет возможности проверить. Может кто поправит? tych, в строковый тип надо переменную типа int преобразовывать перед выводом или float ? И как это делать при работе с АВР