|
|
  |
Выбор пути ... Assembler или C ? |
|
|
|
Mar 6 2008, 08:22
|

Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 19-12-07
Из: Житоимр
Пользователь №: 33 457

|
Цитата(DimaD @ Mar 6 2008, 09:28)  по поводу точности --- готов поспорить. Я бы поспорил, но не на что  !!!! Давай лучше обсудим: под точностью измерения скорости я подразумевал точность измерения временного интервала (измеряю же частоту). Так вот, мне необходимо измерять и выводить на ЖКИ скорость с точностью 0,1 км/ч. На скорости 220 км/ч (что соответствует частоте сигнала 421,5 Гц), изменение периода сигнала приблизительно на 1,2 мкс вызывает изменение скорости на 0,1 км/ч. Но самое трудное организовать измерение с такой точностью в real-time параллельно с такими процессами: 1. Дижением стрелки прибора, используя шаговый двигатель в режиме микрошаге. 2. Организовать вывод на ЖКИ 3. Вести учёт аварийных ситуаций. 4. Вести учёт пройденого расстояния. Задаю вопрос всем, кто работал с подобными вещами, возможно ли это реализовать на С?
|
|
|
|
|
Mar 6 2008, 08:38
|
Группа: Новичок
Сообщений: 10
Регистрация: 5-03-08
Пользователь №: 35 645

|
Давайте обсудим эту тему и многое другое за  !!! А то еще поссоримся.
|
|
|
|
|
Mar 6 2008, 08:53
|

Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 19-12-07
Из: Житоимр
Пользователь №: 33 457

|
Цитата(DimaD @ Mar 6 2008, 11:38)  Давайте обсудим эту тему и многое другое за  !!! Давай обсудим эту тему здесь, а вот многое другое  , кончено, можна и за пивом  ! Цитата(DimaD @ Mar 6 2008, 11:38)  А то еще поссоримся.  !!!! -
|
|
|
|
|
Mar 6 2008, 10:05
|

Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 19-12-07
Из: Житоимр
Пользователь №: 33 457

|
Цитата(zltigo @ Mar 6 2008, 12:21)  У как все запущено  . Используется аппаратный таймер который за время интегрирования в десятки - сотни миллисекунд считает имульсы. Количество последовательных интервалов интегрирования можно менять в заисимости от скорости для достижения нужной точности. Все оставшееся время можно играть вальсы Шопена.... Насколько мне позволяют понимать мои знания, вы привели пример электроно-счётного частотомера(последовательный метод)? Диапазон скоростей, которые я измеряю, находится в интервале 3-220 км/ч. Для определения отсутствия сигнала V<3 км/ч(нулевая скорость), мне необходимо поставить ограничения на максимальный период входного сигнала 0.17 с. (прямоуголные импульсы с датчика скорости) Это означает меньше 5 импульсов в секунду, при необходимости обновлять ЖКИ минимум 2-3 раза в секунду(данные для стрелки обновлять ещё чаще), теперь вопрос а возможно ли будет таким методом отличить скорости 3 (Период следования импульсов = 0.177 с.) и 3,1 км/ч (Период следования импульсов = 0.172 с.), это как импульсы прийдётся считать?
|
|
|
|
|
Mar 6 2008, 10:53
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 12-12-07
Из: Украина
Пользователь №: 33 226

|
Цитата(zltigo @ Mar 6 2008, 13:25)  Нет. Измерение длительности периода c возможными разборками c переполнения таймера/не срабатывания таймера на низких скоростях (когда времени много) и максимальными требованиями считывания-накопления значений таймера не чаще чем за две с лишним миллисекунды на скорости 220. Вообще-то в этой теме обсуждается вопрос о применимости в тех или иных задачах Ассемблера или Си. Насколько я понял Калина уже разобрался с методами и алгоритмами измерений промежутков времени. Скорее всего его интересует возможность реализации оных на Си и сравнение с Ассемблером... И вообще я что-то не понял о чем вы толкуете, уважаемый zltigo: то вы считаете импульсы, то уже измеряете период...  Не могли бы Вы выразиться более точно, или логически связано... Тут же не все разбираются с особенностями разных жаргонов...
|
|
|
|
|
Mar 6 2008, 13:05
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Carbon @ Mar 6 2008, 14:02)  Таким образом, двух импульсов с датчика скорости достаточно чтобы с точностью до длительности клока (62,5наносек) определить период импульсов с датчика Если считывать значение из таймера в прерывании - то точность будет сильно ниже. А вот если использовать специально предназначенный для этого режим захвата (capture) таймера, то вполне реально. И на С и даже на Паскале (точно-точно, сам делал, правда, не по своей воле  ). Цитата(rv3dll(lex) @ Mar 6 2008, 11:06)  при этом на обычном 51 с кварцем 12 мегагерц для ровного счёта с выхода этого порта пойдёт 500 килогерц, что в принципе невозможно сделать на си
я даже не уверен что с той же скоростью на си в смысле будет работать
метка "инвертировать бит" джамп на метка, написанное на асме Ну это не смешно. Отряхнул от пыли Кейл uVision 1.24, датированный 97 годом: Код #include <AT892051.H> /* special function register declarations */ /* for the intended 8051 derivative */ #define Lampa P1_0
void main (void) { for(;;) Lampa = ~Lampa; } -------------------------------------------- ; FUNCTION main (BEGIN) ; SOURCE LINE # 6 ; SOURCE LINE # 7 ; SOURCE LINE # 8 0000 ?C0001: ; SOURCE LINE # 9 0000 B290 CPL P1_0 0002 80FC SJMP ?C0001 ; SOURCE LINE # 10 0004 22 RET ; FUNCTION main (END) 6 минут вместе с копированием результата в форум. Почти уверен, что можно как-то объявить функцию как noreturn и подавить ret. Ну а уж скопировать одну строчку на всю память что на С что на асме - труда столько же. Цитата(rv3dll(lex) @ Mar 6 2008, 11:06)  извините не писал для 51 больше 5 лет - не помню команды Я не писал 6 или 7, команд тоже не помню, но задачу решил не заглядывая в даташит. А вам слабО? ;)
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 6 2008, 14:36
|

Участник

Группа: Новичок
Сообщений: 17
Регистрация: 30-01-06
Пользователь №: 13 769

|
Цитата(Сергей Борщ @ Mar 6 2008, 16:05)  Если считывать значение из таймера в прерывании - то точность будет сильно ниже. А вот если использовать специально предназначенный для этого режим захвата (capture) таймера, то вполне реально. И на С и даже на Паскале (точно-точно, сам делал, правда, не по своей воле  ). А если по прерываниям таймера от переполнения считать количество этих переполнений, то можно измерять очень и очень точно длительность очень-очень длинных импульсов.
|
|
|
|
|
Mar 6 2008, 14:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(mart-13 @ Mar 6 2008, 13:53)  Калина уже разобрался с методами и алгоритмами измерений промежутков времени. С алгоритмами-то разбираться не сложно - все уже придумано до нас. А вот с реализацией, похоже, нешуточные проблемы. Цитата вообще я что-то не понял о чем вы толкуете, уважаемый zltigo: то вы считаете импульсы, то уже измеряете период... Количество импульсов таймера за период повторения входных импульсов. Даже для высоких скоростей разрешающей способности таймера хватит выше головы. Для низких скоростей надо учитывать возможное переполнение таймера. Вся напряженная работа сводится, как уже писал, сводится к считыванию и накоплению значения таймера не чаще, чем раз в две миллисекунды и разборками с накопленными значениями раз в несколько сот миллисекунд - период интеграции.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 6 2008, 17:57
|

Полное ничтожество
    
Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354

|
из своего процессорного опыта - это было по необходимости - так я рассыпушечник 133-164ла3-7 и всё такое ,,,,,,,,,,,,,,,,,CPLD потом FPGA )))) может у меня был такой неправильный подход - все процессы должны выполняться параллельно - в процессоре псевдо параллельно
а именно нарисовать схему = нарисовать эпюры сигналов а далее команды по временной оси - вопрос с чередованием не снят
любые операции можно проредить командами с периферией
сейчас выглядит глупо))) но программы аонов конца 80х начала 90х в 4к пзу возможностями не страдали сам писал по 400 кбайт на ассемблере под TMS
|
|
|
|
|
Mar 6 2008, 18:00
|

Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 19-12-07
Из: Житоимр
Пользователь №: 33 457

|
Уважаемые форумчане, большое спаисбо  за тот опыт работы с языками программирования, которым вы поделелись. Кто бы что не говорил, а знать, конечно, необходимо оба языка, иначе никогда не будет права выбора, так как выбирать будет не из чего  . Конечным принятым решением было начало освоения С. P.S. Какую литературу вы могли бы посоветать для начинающего? И ваше мнение о книге "Программирование на языке C для AVR и PIC микроконтроллеров" Шпак Ю.А.?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|