реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Выбор пути ... Assembler или C ?
Kalina
сообщение Mar 6 2008, 08:22
Сообщение #46


Частый гость
**

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



Цитата(DimaD @ Mar 6 2008, 09:28) *
по поводу точности --- готов поспорить.


Я бы поспорил, но не на что biggrin.gif !!!! Давай лучше обсудим: под точностью измерения скорости я подразумевал точность измерения временного интервала (измеряю же частоту). Так вот, мне необходимо измерять и выводить на ЖКИ скорость с точностью 0,1 км/ч. На скорости 220 км/ч (что соответствует частоте сигнала 421,5 Гц), изменение периода сигнала приблизительно на 1,2 мкс вызывает изменение скорости на 0,1 км/ч.

Но самое трудное организовать измерение с такой точностью в real-time параллельно с такими процессами:
1. Дижением стрелки прибора, используя шаговый двигатель в режиме микрошаге.
2. Организовать вывод на ЖКИ
3. Вести учёт аварийных ситуаций.
4. Вести учёт пройденого расстояния.

Задаю вопрос всем, кто работал с подобными вещами, возможно ли это реализовать на С?
Go to the top of the page
 
+Quote Post
DimaD
сообщение Mar 6 2008, 08:38
Сообщение #47





Группа: Новичок
Сообщений: 10
Регистрация: 5-03-08
Пользователь №: 35 645



Давайте обсудим эту тему и многое другое за beer.gif !!!
А то еще поссоримся.
Go to the top of the page
 
+Quote Post
Kalina
сообщение Mar 6 2008, 08:53
Сообщение #48


Частый гость
**

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



Цитата(DimaD @ Mar 6 2008, 11:38) *
Давайте обсудим эту тему и многое другое за beer.gif !!!


Давай обсудим эту тему здесь, а вот многое другое 07.gif , кончено, можна и за пивом beer.gif !

Цитата(DimaD @ Mar 6 2008, 11:38) *
А то еще поссоримся.


smile3009.gif !!!! - 01.gif
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Mar 6 2008, 09:06
Сообщение #49


Полное ничтожество
*****

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



БЛИН если на то пошло всю память 51 контроллера можно забить одинаковой командой инвертировать бит порта - один в том числе написать этот код и в векторах прерываний в смысле в месте которое для них отведено

при этом на обычном 51 с кварцем 12 мегагерц для ровного счёта с выхода этого порта пойдёт 500 килогерц, что в принципе невозможно сделать на си

я даже не уверен что с той же скоростью на си в смысле будет работать

метка "инвертировать бит"
джамп на метка, написанное на асме

извините не писал для 51 больше 5 лет - не помню команды
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 6 2008, 09:21
Сообщение #50


Гуру
******

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



Цитата(Kalina @ Mar 6 2008, 11:22) *
Но самое трудное организовать измерение с такой точностью в real-time параллельно с такими процессами

У как все запущено sad.gif. Используется аппаратный таймер который за время интегрирования в десятки - сотни миллисекунд считает имульсы. Количество последовательных интервалов интегрирования можно менять в заисимости от скорости для достижения нужной точности. Все оставшееся время можно играть вальсы Шопена.... В чем проблема? В обработке прерываний частотой не более, чем 421,5 Hz?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kalina
сообщение Mar 6 2008, 10:05
Сообщение #51


Частый гость
**

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



Цитата(zltigo @ Mar 6 2008, 12:21) *
У как все запущено sad.gif. Используется аппаратный таймер который за время интегрирования в десятки - сотни миллисекунд считает имульсы. Количество последовательных интервалов интегрирования можно менять в заисимости от скорости для достижения нужной точности. Все оставшееся время можно играть вальсы Шопена....


Насколько мне позволяют понимать мои знания, вы привели пример электроно-счётного частотомера(последовательный метод)?
Диапазон скоростей, которые я измеряю, находится в интервале 3-220 км/ч. Для определения отсутствия сигнала V<3 км/ч(нулевая скорость), мне необходимо поставить ограничения на максимальный период входного сигнала 0.17 с. (прямоуголные импульсы с датчика скорости) Это означает меньше 5 импульсов в секунду, при необходимости обновлять ЖКИ минимум 2-3 раза в секунду(данные для стрелки обновлять ещё чаще), теперь вопрос а возможно ли будет таким методом отличить скорости 3 (Период следования импульсов = 0.177 с.) и 3,1 км/ч (Период следования импульсов = 0.172 с.), это как импульсы прийдётся считать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 6 2008, 10:25
Сообщение #52


Гуру
******

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



Цитата(Kalina @ Mar 6 2008, 13:05) *
Насколько мне позволяют понимать мои знания, вы привели пример электроно-счётного частотомера(последовательный метод)?

Нет. Измерение длительности периода c возможными разборками c переполнения таймера/не срабатывания таймера на низких скоростях (когда времени много) и максимальными требованиями считывания-накопления значений таймера не чаще чем за две с лишним миллисекунды на скорости 220.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mart-13
сообщение Mar 6 2008, 10:53
Сообщение #53


Участник
*

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



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

Вообще-то в этой теме обсуждается вопрос о применимости в тех или иных задачах Ассемблера или Си. Насколько я понял Калина уже разобрался с методами и алгоритмами измерений промежутков времени. Скорее всего его интересует возможность реализации оных на Си и сравнение с Ассемблером... И вообще я что-то не понял о чем вы толкуете, уважаемый zltigo: то вы считаете импульсы, то уже измеряете период... 07.gif Не могли бы Вы выразиться более точно, или логически связано... Тут же не все разбираются с особенностями разных жаргонов...
Go to the top of the page
 
+Quote Post
Carbon
сообщение Mar 6 2008, 12:02
Сообщение #54


Участник
*

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



Можно измерять период подсчитывая импульсы аппаратным таймером. Только на вход таймера подавать клоки от внутреннего генератора (например 1 или 8 или 16МГц клок, таймер 16 бит). Сигнал от датчика скорости подавать на вход прерывания, а по прерыванию считывать значения с таймера. Таким образом, двух импульсов с датчика скорости достаточно чтобы с точностью до длительности клока (62,5наносек) определить период импульсов с датчика скорости и сразу пересчитать их в км/час. Считанный счетчик сбрасываем в 0 и ждем следующего прерывания. Вся задача укладывается в двадцать строк на Си.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 6 2008, 13:05
Сообщение #55


Гуру
******

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



Цитата(Carbon @ Mar 6 2008, 14:02) *
Таким образом, двух импульсов с датчика скорости достаточно чтобы с точностью до длительности клока (62,5наносек) определить период импульсов с датчика
Если считывать значение из таймера в прерывании - то точность будет сильно ниже. А вот если использовать специально предназначенный для этого режим захвата (capture) таймера, то вполне реально. И на С и даже на Паскале (точно-точно, сам делал, правда, не по своей воле 01.gif ).


Цитата(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)
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Mar 6 2008, 13:23
Сообщение #56


Полное ничтожество
*****

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



усложню задачу - без использования таймера сложение 4 байтовых чисел с 4 байтовыми с одновременным генерированием того же самого - инверсия бита каждые 4 машинных цикла
Go to the top of the page
 
+Quote Post
Carbon
сообщение Mar 6 2008, 14:36
Сообщение #57


Участник
*

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



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

А если по прерываниям таймера от переполнения считать количество этих переполнений, то можно измерять очень и очень точно длительность очень-очень длинных импульсов.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 6 2008, 14:41
Сообщение #58


Гуру
******

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



Цитата(mart-13 @ Mar 6 2008, 13:53) *
Калина уже разобрался с методами и алгоритмами измерений промежутков времени.

С алгоритмами-то разбираться не сложно - все уже придумано до нас. А вот с реализацией, похоже, нешуточные проблемы.
Цитата
вообще я что-то не понял о чем вы толкуете, уважаемый zltigo: то вы считаете импульсы, то уже измеряете период...

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Mar 6 2008, 17:57
Сообщение #59


Полное ничтожество
*****

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



из своего процессорного опыта - это было по необходимости - так я рассыпушечник 133-164ла3-7 и всё такое ,,,,,,,,,,,,,,,,,CPLD потом FPGA )))) может у меня был такой неправильный подход - все процессы должны выполняться параллельно - в процессоре псевдо параллельно

а именно нарисовать схему = нарисовать эпюры сигналов а далее команды по временной оси - вопрос с чередованием не снят

любые операции можно проредить командами с периферией

сейчас выглядит глупо))) но программы аонов конца 80х начала 90х в 4к пзу возможностями не страдали
сам писал по 400 кбайт на ассемблере под TMS
Go to the top of the page
 
+Quote Post
Kalina
сообщение Mar 6 2008, 18:00
Сообщение #60


Частый гость
**

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



Уважаемые форумчане, большое спаисбо a14.gif за тот опыт работы с языками программирования, которым вы поделелись. Кто бы что не говорил, а знать, конечно, необходимо оба языка, иначе никогда не будет права выбора, так как выбирать будет не из чего smile.gif. Конечным принятым решением было начало освоения С.
P.S. Какую литературу вы могли бы посоветать для начинающего? И ваше мнение о книге "Программирование на языке C для AVR и PIC микроконтроллеров" Шпак Ю.А.?
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01544 секунд с 7
ELECTRONIX ©2004-2016