Измерение скорости (HELP)

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Измерение скорости (HELP)

Сообщение Aptem » 13 окт 2009, 11:54

Всем привет! Нужна помощь. Хочу сделать спидометр на AVR по типу велокомпьютеров (возможность вводить длину окружности).
Сталкнулся с проблемой, что длина окружности не целое число а дробь. Может кто подобное делал? Если можно раскажите как вы обрабатывали информацию.
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: Измерение скорости (HELP)

Сообщение avr123.nm.ru » 13 окт 2009, 12:03

Скорость маленькая и поэтому можно все во float считать как на калькуляторе. Вот типы переменных в CVAVR подробно рассмотрены - Язык Си для микороконтроллеров - http://avr123.nm.ru/05.htm

Любителям АСМ посложней чуток.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Измерение скорости (HELP)

Сообщение Aptem » 13 окт 2009, 14:26

avr123.nm.ru, Спасибо что откликнулись, но к сожалению я незнаю СИ. После посещения вашего курса я понял что мне нужно, но к сожалению я несмог найти подробной информации и примеров работы с числами с плавающей точкой. Если не трудно ткините носом туда где это можно посмотреть.
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: Измерение скорости (HELP)

Сообщение =DeaD= » 13 окт 2009, 14:29

Так вы Си собираетесь изучать или нет? :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Измерение скорости (HELP)

Сообщение galex1981 » 13 окт 2009, 14:34

Можешь в принципе изучить Бейсик для МК, быстрее изучишь чем С ;)
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Измерение скорости (HELP)

Сообщение executer » 13 окт 2009, 14:40

а еще можеш длинну окружности в мм вводить, целым числом
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Измерение скорости (HELP)

Сообщение Master » 13 окт 2009, 15:34

А в чем проблема с дробными числами?

Добавлено спустя 1 минуту 58 секунд:
Да и вообще какое это имеет значение?
Ставим геркон или щелевую оптопару на колесо, и измеряем время между сигналами прохождения это точки. Время (t) знаем, длину окружности (S) колеса знаем, V=S/t.
Все.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Измерение скорости (HELP)

Сообщение Aptem » 19 окт 2009, 16:48

Всем спасибо за варианты решения задачи. К счастью разобрался, но возникла другая проблема: Преобразование кода для 7 сегментного индикатора. Понял что делается таблица преобразование, а дальше не ясно. Может кто обьяснит? (заранние благодарен)
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: Измерение скорости (HELP)

Сообщение executer » 19 окт 2009, 16:57

ну если у тебя тройку надо показать, смотриш в массиве в ячейке номер 3 что записано. читаеш и отправляеш на порт к которому сегмент подключен.
а в ячейке третьей должна быть комбинация 0 и 1 записана при записи в порт которой появится не краказябла а красивая тройка на индикаторе.
(это образно, располагать массив в памяти программ обычно предлагают. чтоб озу константами не засирать)
Аватара пользователя
executer
 
Сообщения: 784
Зарегистрирован: 30 янв 2009, 01:24
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел

Re: Измерение скорости (HELP)

Сообщение Aptem » 20 окт 2009, 08:55

Я не могу понять алгоритм преобразования. У меня получается например значение 0xС6 тобишь 198(км/ч), что дольше делать немогу понять. Обьясните пожалуйста.
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: Измерение скорости (HELP)

Сообщение Виталий » 20 окт 2009, 09:02

Неслабо ты разогнался на велике =)
X = 198;
п.1 Берем остаток от деления на 10:
X % 10 = 198 % 10 = 8;
п.2 Записываем число в крайний правый индикатор.
X := X / 10 = 198 / 10 = 19;

потом выполняем п.1. для числа 19...
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Re: Измерение скорости (HELP)

Сообщение Aptem » 20 окт 2009, 10:54

Честно говоря это не на велик, а на мотоцикл и 199км/ч это максимальное эначение. Вы уж меня простите но я немогу понять нашел пример, сделал в итоге пишет фигню.
Посмотрите пожалуйста что я делаю не так?
.equ a = 0
.equ b = 1
.equ c = 2
.equ d = 3
.equ e = 4
.equ f = 5
.equ g = 6

code_3:
mov r16,ZH
rcall get_7
sts D0,r0

mov r16,ZL
andi r16,$f0
swap r16
rcall get_7
sts D1,r0

mov r16,ZL
andi r16,$0f
rcall get_7
sts D2,r0
ret


get_7:
ldi XL,Low(Segm<<1)
ldi XH,High(Segm<<1)
clr r17
add XL,r16
add XH,r17
lpm
ret

Segm:
Z0_1: .db 1<<a|1<<b|1<<c|1<<d|1<<e|1<<f, 1<<b|1<<c
Z2_3: .db 1<<a|1<<b|1<<d|1<<e|1<<g, 1<<a|1<<b|1<<c|1<<d|1<<g
Z4_5: .db 1<<b|1<<c|1<<f|1<<g, 1<<a|1<<c|1<<d|1<<f|1<<g
Z6_7: .db 1<<a|1<<c|1<<d|1<<e|1<<f|1<<g, 1<<a|1<<b|1<<c
Z8_9: .db 1<<a|1<<b|1<<c|1<<d|1<<e|1<<f|1<<g, 1<<a|1<<b|1<<c|1<<d|1<<f|1<<g

.dseg

D0: .byte 1
D1: .byte 1
D2: .byte 1
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: Измерение скорости (HELP)

Сообщение Master » 20 окт 2009, 12:34

что я делаю не так?

Пишешь на асме, шутка :)

Если на С то я делал так
1. Объявляем массив значений порта которые нужно выдать чтобы вывести соответствующее число.
Код: Выделить всё
static char digits[] = {
   0b00111111, //0
   0b00000110, //1
   0b01011011, //2
   0b01001111, //3
   0b01100110, //4
   0b01101101, //5
   0b01111101, //6
   0b00000111, //7
   0b01111111, //8
   0b01101111, //9   
};


2. Процедура вывода на дисплей
Код: Выделить всё
void Displey(void)
{
   data=123; //число которое выводим;

   //Выводим индикатор единиц
   ind_ed;  //Процедура включения соответствующего индикатора
   PORTD=digits[data%10];  //123%10=3, следовательно digits[3], что по массиву означает 0b01001111, //3
   pause; //Процедура паузы, устраняем мерцание порядка 5 мс
   data=data/10;  //123/10=12

   //Выводим индикатор десятков
   ind_des; //Процедура включения соответствующего индикатора
   PORTD = digits[data%10];  //12%10=2
   pause;
   data=data/10;  //12/10=1

   //Выводим индикатор сотен
   ind_sot; //Процедура включения соответствующего индикатора
   PORTD = digits[data];
   pause;
}
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Измерение скорости (HELP)

Сообщение Aptem » 20 окт 2009, 13:53

Master, ОГРОМНОЕ ВАМ СПАСИБО! Блоголаря вашему примеру я разобрался, теперь работает правильно! :Yahoo!:
Aptem
 
Сообщения: 33
Зарегистрирован: 17 фев 2009, 13:18
Откуда: Шахты

Re: Измерение скорости (HELP)

Сообщение Master » 20 окт 2009, 13:59

Заходите еще.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13