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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение 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обороту

Надеюсь, что задумка не останется на уровне фантазии.
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

[Пишет начинающий, небольшой опыт в асме - энтузиазма - море]
Двигатель, надо понимать, автомобильный. Считывать тогда наверно лучше с коммутатора. Реализовывать можно так - один таймер T0 например отсчитывает секунды, другой T1 - обороты. В теле обработчика переполнения T0 считаем до 60 и выводим на индикатор значение T1. Для большей лучшести можно запускать T0 с началом работы двигателя. Ты ж обороты не будеш считать при выкл. двигател :)) . Вольт метр сделаеш на АЦП(тут где-то на форуме написано как им пользоватся). Ну а с выводом на LCD думаю вообще проблем не будет, особенно если писать всё на Си. Обычного вольт метра должно хватить. МК кста можно взять и Мегу8. Хватит с головой. И погрешности у тебя в любом случае будут маленькие. С чего начать? Собери макет - вместо коммутатора поставь какой нить моторчик с магнитом на валу, а к МК геркон подключи. Т.е. собери всю обвязку что тебе надо(там наверно для АЦП какой нить делитель надо) и LCD прикрути. А потом принимайся за программирование. сначало освой вывод циферок(значений) на LCD. И не забуть что МК должен как то узнать что двигатель включён! Сначало напиши прогу где будет выводится токак время работы двигателя, потом тахометр реализуй ну а АЦП в последнюю очередь. Так бы делал я.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

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

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

Возможно тебе пригодтится пример часов реального времени - он есть в компиляторе CVAVR в папке C:\CVAVR\examples\AVR134
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Встал на лапы
Сообщения: 119
Зарегистрирован: Вт апр 17, 2007 15:24:47
Откуда: Новосиб

Сообщение Artem333 »

На днях решил написать статью о своём тахометре. В прошивке реализован вывод на 4 разряда диодного индикатора. Написано на асме. Если будет настроение прилеплю и вольтметр. Такчто прогу можно взять как пример. Приложенный код на асме если кого-то интересует, правда пока без коментариев.
Вложения
begin2.rar
(3.19 КБ) 550 скачиваний
Всё просто как самогонный аппарат
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение gonzales06 »

Спасибо.
Буду думать.
Двигатель двухтактный от мотоцикла Сова.
Включатся процесс счета оборотов и времени работы двигла будет с помощью кнопки, если это возможно.
Померил на выводах комутатора напряжение, на зеленом с черной полоской проводе напряжение при прохождении шторки через датчик Холла напряжение изменяется от 0 до 7,5 Вольт, я пологаю это достаточный сигнал для МК.
:lol:
Вообще много не понятного, конечно проще сделать готовое устройство с прошивкой.
Попробую. :wink:
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение gonzales06 »

На форумах, информации по таймерам не нашел, зато разобралмя как можно вывести слово на LSD с помощью програмирования на Си и проги CVAR.
Осталось разобраться как написать прогу, чтобы запускать таймер от кнопки и выводить данные.
Если есть сылки на подробные объяснение как это зделать, или книги буду рад, или есть время поясните здесь заранее благодарен.
Контактная информация:
Реклама
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

У таймеров счётчиков есть вход захвата которым можно осуществлять захват значения таймера, так что полезно использовать сею функцию, причём советую просчитать не может получится ли так что произойдёт переполнение сётчика и сброс, т.е. время переполнения счётчик должно быть >> времени клика, разрядность при этом может и пострадает зато надёжность возрастёт, вообщем совету и с карандашиком и калькулятором всё посчитать тогда стонет ясен порядок(погрешность) измеряемых величин и более менее прояснится как это всё организовать
Чтоб запускать таймер от кнопки достаточно изменять соответствующий регистр TCCRxx, по поводу ЖК на форуме уже столько переговорено и на асме и на СИ, тока ленивый не найдёт
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение gonzales06 »

Да по поводу LSD. много всего нашел, а вот с таймером проблема, с захватом понятно, только как это выразить на Языке Си не очень
, буду разбираться.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

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

По работе с LCD: в си все очень просто, главное не ошибиться в самом простом... :) Там проводки перепутать, например.
Today fine night...
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

gonzales06 при работе с захватом язык не выжен, конфигурируем пин на вход устанавливаем регистры и вперёд. Главное начать :)
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

как написать прогу, чтобы запускать таймер от кнопки
Таймера в avr считают от тактового генератора начинают считать сразу после того, как в регистр настроек занесены значения пределителя или источника сигнала. Я так понял, что в задаче стоит начать считать время после запуска двигателя, который стаотует от кнопки. Значит таймер нужно настроить так, чтобы он считал, например секунды(т.е. переполнение таймера наступало каждую секунду. А в процедуре обработчика этого прерывания будем считать секунды.) Значить при нажатии кнопки надо в регистр таймера занести информаци о пределителе. А сам таймер настроить на сброс по совпадению и расчитать значение, до которого должен досчитать таймер чтобы отмерять секунду.... И по изменению уровня на линии I/O к которой подключена кнопка заносить пределитель и получится что таймер будет тикать по нажатию кнопки. Примерно так. Будут вопросы - спрашивай.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение 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.

Проавильно ли я все понял, и выстовил ригистры
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

Расчёты вроде верны. Для перевода юзай виндовый калькуль. Там есть ежим "Инженерный". Не совсем понял про переменную, поэтому напишу как делал я. при настройке таймера сначала выставляеш значения TCNT. Потом маску прерываний. Потом устанавливаеш пределитель а потом глобальное разрешение прерываний. При вызове обработчика прерывания по переполнению(когда TCNT будет равен 65536 при 16-разр. счётчике) надо заново заносить статовое значение TCNT. Кстати 55771 <-> 0xD9DB Значит тебе надо в TCNTH занести 0xD9 а в TCNTL 0xDB.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение gonzales06 »

Так с выводом на ЖК я разобрался.
Теперь я задал глобальную переменную temp
unsigned char temp;

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

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

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

{
temp++;
temp=temp*60;
};
}
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

очисти флаг прерывания - это стр 3 под "www".

можно так написать умножение temp *= 60;
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение 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

};
}
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

sei - зачем ? у тебя вроде прерывания не используются ? и формат sei смотри в "прервания в AVR" это стр. 3 под "www".

Вопросы об ошибках снабжай их описанием или текстом или картинками.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург

Сообщение gonzales06 »

Это я ошибся, у меня проблема вывести переменную на LCD, и хотелось бы целыми числами.
Контактная информация:
LDZ
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пт окт 27, 2006 22:56:22
Откуда: Daugavpils

Сообщение LDZ »

Может в этом проекте что-нибудь полезное найдешь.
http://projects.caxapa.ru/index.html?ID=69
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

насчёт sei
В Си ассемблерные команды надо писать так

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

asm("sei")
то же для cli и других команд асма
А насчёт вывода переменных.... я на си для авр до такого не дошёл, но в Borland C вроде для вывода puts надо данные в строку преобразовывать... и кажется это делается явным преобразованием. Всё очень неточно, т.к. нет возможности проверить. Может кто поправит? tych, в строковый тип надо переменную типа int преобразовывать перед выводом или float ? И как это делать при работе с АВР
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»