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

 
 
18 страниц V  « < 11 12 13 14 15 > »   
Reply to this topicStart new topic
> Хочу попробовать ARM, подскажите, что для этого нужно?, Какой проц выбрать, отлад. платку и какой софт?
boez
сообщение Jan 30 2007, 16:13
Сообщение #181


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

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Цитата(sonycman @ Jan 30 2007, 13:32) *
По IrDA понял, спасибо smile.gif
Жаль, что не совместимы sad.gif


А не все так плохо и ужасьно. На самом деле IrDA и Remote Control пересекаются по крайней мере в двух случаях.
Первый - некоторые люди заметили что 115200 = 38400*3, а 38400 Гц очень похоже на 38 кГц, которые используются в дистанционках. И написали проги, которые передают по протоколу IrDA (те самые 3/16 импульсы) некие байты - специально подобранные битовые маски типа 00100100, из которых полосовой фильтр на 38 кГц в ИК приемнике управляемого аппарата выделяет модулированную посылку, аналогичную той что передает родной передатчик. В программе LIRC точно есть такой модуль.
Второй - CIR (Consumer IR). Это просто условно говоря светодиод, подвешенный на ножку порта, а фотоприемник (без демодулятора) на другую ножку. Обычно это один из режимов ирда-интерфейса. И можно передавать и принимать что угодно. Хошь ирду, хошь код rc5 для дистанционок. Это уже должно быть в железе, но говорят что реально встречается на материнках и КПК. Сам не видел.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jan 30 2007, 16:17
Сообщение #182


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(sonycman @ Jan 30 2007, 15:54) *
А какие есть альтернативные решения этой проблемы?

Использовать compare. Перед/после определенного события загружать регистр сравнения на определенную величину и ждать срабатывания.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 30 2007, 16:24
Сообщение #183


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(boez @ Jan 30 2007, 17:13) *
А не все так плохо и ужасьно.

Пока не знакомился с проектами, использующими RC5 (так, вроде, называется протокол ИК пультов бытовой техники?).
Интересует только приём комманд с пульта.
Значит, модулятор для передачи можно, таки? smile.gif
А демодулятор для приёма?
Цитата(SpiritDance @ Jan 30 2007, 17:17) *
Использовать compare. Перед/после определенного события загружать регистр сравнения на определенную величину и ждать срабатывания.

Уже думал над этим. Но может потребоваться одновременное использование нескольких таймеров. Аппаратных таймеров не хватит.

Сообщение отредактировал sonycman - Jan 30 2007, 16:30
Go to the top of the page
 
+Quote Post
boez
сообщение Jan 30 2007, 16:39
Сообщение #184


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

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Цитата(sonycman @ Jan 30 2007, 15:24) *
Пока не знакомился с проектами, использующими RC5 (так, вроде, называется протокол ИК пультов бытовой техники?).
Интересует только приём комманд с пульта.
Значит, модулятор для передачи можно, таки? smile.gif
А демодулятор для приёма?


А демодулятор наверное нельзя (первым методом) - потому как простая посылка 38 кГц ну никак не похожа на IrDA-сигнал с его стартовыми-стоповыми битами и строго определенной формой.
RC5 это для примера, главное 38 кГц заполнение.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 30 2007, 16:48
Сообщение #185


Гуру
******

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



Цитата(sonycman @ Jan 30 2007, 14:54) *
Допустим, задаче требуется n-ное количество независимых таймеров для задания больших (десятки/сотни миллисекунд) задержек перед/после определённых событий.
Для этого я использовал n-ное кол-во переменных tmr, куда заносил значения задержек.
Один аппаратный периодический таймер обрабатывал на прерывании все эти переменные - в сторону уменьшения до нуля.
Программа опрашивала их, и при обнулении считалось, что пауза выдержана.
А какие есть альтернативные решения этой проблемы?
Одно из решений, применяемое в "больших" ОСях - создается сортированный список таймеров. При этом каждый следующий таймер инициализируется разницей требуемого времени и времени предыдущего. Таким образом в прерывании декрементируется только один таймер. Когда он досчитывает до нуля - генерится сигнал, элемент из списка удаляется. В следующем прерывании будет декрементироваться следующий таймер, отсчитывая оставшееся время. Метод дает выигрыш для большого количества таймеров. Но требует накладных расходов - использование динамической памяти, прцедуры поиска по списку и вставки в середину списка.

Больше вариантов не знаю. Тоже интересно узнать про другие реализации.


--------------------
На любой вопрос даю любой ответ
"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
sonycman
сообщение Jan 30 2007, 16:50
Сообщение #186


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(boez @ Jan 30 2007, 17:39) *
А демодулятор наверное нельзя (первым методом) - потому как простая посылка 38 кГц ну никак не похожа на IrDA-сигнал с его стартовыми-стоповыми битами и строго определенной формой.
RC5 это для примера, главное 38 кГц заполнение.

Понятно.
А пульты бывают, в основном, именно с модуляцией 38 кГц?
Тогда демодулятор надо делать внешний, или софтовый, может?

Цитата(Сергей Борщ @ Jan 30 2007, 17:48) *
Одно из решений, применяемое в "больших" ОСях - создается сортированный список таймеров.

Хм, интересное решение. Спасибо. Буду знать smile.gif

Сообщение отредактировал sonycman - Jan 30 2007, 16:53
Go to the top of the page
 
+Quote Post
boez
сообщение Jan 30 2007, 17:03
Сообщение #187


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

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Цитата(sonycman @ Jan 30 2007, 15:50) *
Понятно.
А пульты бывают, в основном, именно с модуляцией 38 кГц?
Тогда демодулятор надо делать внешний, или софтовый, может?


Очень часто. Бывают и другие - но тоже около 40, далеко они намного реже забираются. Есть готовые ИК ДУ - приемники, деталька на трех ножках с глазком черным. Земля, питание и выход ТТЛ-уровня. Внутри приемник, усилитель, полосовой фильтр и демодулятор. Сразу на нужную частоту - при покупке нужно узнавать какой на какую. Маркировку конечно не помню, мож кто подскажет.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 30 2007, 17:09
Сообщение #188


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(boez @ Jan 30 2007, 18:03) *
Очень часто. Бывают и другие - но тоже около 40, далеко они намного реже забираются. Есть готовые ИК ДУ - приемники, деталька на трех ножках с глазком черным. Земля, питание и выход ТТЛ-уровня. Внутри приемник, усилитель, полосовой фильтр и демодулятор. Сразу на нужную частоту - при покупке нужно узнавать какой на какую. Маркировку конечно не помню, мож кто подскажет.

Замечательно!
Значит - тут всё просто!
Дело только за софтом.
Спасибо. smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 30 2007, 17:45
Сообщение #189


Гуру
******

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



Цитата(boez @ Jan 30 2007, 18:03) *
Есть готовые ИК ДУ - приемники, деталька на трех ножках с глазком черным. Земля, питание и выход ТТЛ-уровня.
Они хороши против примитивного решения еще и тем, что содержат схему АРУ, позволяющую исключить влияние внешней засветки.
Цитата(sonycman @ Jan 30 2007, 16:09) *
Замечательно!
Значит - тут всё просто!
Дело только за софтом.
Для полноты картины глянь проект Леонида Ивановича: Применение кода RC-5


--------------------
На любой вопрос даю любой ответ
"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
Alex_inventor
сообщение Jan 30 2007, 17:52
Сообщение #190


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



Hello All. smile.gif
Я опять на форуме. Нужда вынудила. Ирония типа: “Возвращение блудного сына” или “Явление Христа народу” попрошу оставить при себе. Настоятельно прошу! angry.gif
Прежде всего, хочу сказать, что я писал только правду. Кого-то обманывать? Зачем? Какая выгода? Если б, хотел обмануть, то я вам такую сказку тут наплёл бы… Поверти, красноречия у мне хватает (думаю заметили уже). Выкладывание отсканированных дипломов? А что это решит? 100 проектов вас смущает? Я же не говорил, что я OS пишу (хотя было желание как-то написать GSM модем, но хорошие люди отговорили). Большинство моих проектов 4-8 кБ (AVR). Ну, например, приходит друг, говорит надо такую “Приблуду” для телефона. Пожалуйста – час придумывания схемы, час делание платы, час писание пороги, 3 часа отладки и девай-с готов. Вот вам и проект за день. И таких проектов была целая куча.
Погорячились и хватит. smile.gif Просто не надо поливать помоями чужие старания. Кто та над ними сидел, корпел, вымучивал. Надо быть дипломатичнее. Я пытался обсудить, как использовать ARM (например, периферию как задействовать), а не стили писания. Я долгое время работал чисто на asm. По этому и стиль этот применяю в С.
По поводу обсуждения bin, я для себя решил так, никто не был на 100% прав, истина находилась как всегда по середине. Например, регистры GPIO я однозначно буду инициализировать в виде bin(x,x,x,x), ну а UART там можно и (1<<x).
Замечания по поводу, правописания, скажу, я не на экзамене по русскому языку, и вообще я не в России живу и язык у меня родной другой. Хотя я почти всегда, посты свои в WORD на ошибки проверял.
Теперь по существу. Выкладываю проект заготовку. Не могу понять одну вещь. Почему в Startup в блоке “Configure and Enable PLL” вдруг в регистре VICRavIntr появляется число 0x1000. А потом порога неожиданно срывается в SWI. Все места на которые нужно обратить внимание я пометил brickpoint и написал краткий комментарий.
Прикрепленные файлы
Прикрепленный файл  1.rar ( 28.87 килобайт ) Кол-во скачиваний: 36
 
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jan 30 2007, 18:07
Сообщение #191


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(Сергей Борщ @ Jan 30 2007, 18:48) *
Цитата(sonycman @ Jan 30 2007, 14:54) *

Допустим, задаче требуется n-ное количество независимых таймеров для задания больших (десятки/сотни миллисекунд) задержек перед/после определённых событий.
Для этого я использовал n-ное кол-во переменных tmr, куда заносил значения задержек.
Один аппаратный периодический таймер обрабатывал на прерывании все эти переменные - в сторону уменьшения до нуля.
Программа опрашивала их, и при обнулении считалось, что пауза выдержана.
А какие есть альтернативные решения этой проблемы?
Одно из решений, применяемое в "больших" ОСях - создается сортированный список таймеров. При этом каждый следующий таймер инициализируется разницей требуемого времени и времени предыдущего. Таким образом в прерывании декрементируется только один таймер. Когда он досчитывает до нуля - генерится сигнал, элемент из списка удаляется. В следующем прерывании будет декрементироваться следующий таймер, отсчитывая оставшееся время. Метод дает выигрыш для большого количества таймеров. Но требует накладных расходов - использование динамической памяти, прцедуры поиска по списку и вставки в середину списка.

Больше вариантов не знаю. Тоже интересно узнать про другие реализации.


Если у Вас максимальное количество "таймеров" заранее известно то не обязательно использование динамической памяти.
Тут тоже путей несколько:
1. использование глобальных структурок которые при "засовывании в таймер" включаются в сортированный список
2. Использование массива в модуле таймера, в котором тоже сортируются "записи".

Помимо декремента можно использовать просто "таймерную инкрементируемую переменную" с достаточным коэффициентом пересчёта.
Например в обработчике прерывания каждую мс инкрементируется переменная nTime с некоей разрядностью которой достаточно для максимально-возможного таймаута.
Допустим когда nTime==12345 ктото захотел запустить таймер на 234мс., тогда в всё тотже список засовывается значение 12345+234=12579, т.е. то значение которое должно быть по истечении таймера. Минусы - небольшой контроль переполнения.
Плюсы - перезапуск таймера в любой момент без привязки к текущему времени.


Ну а если надо не события из обработчика таймера генерить (с запуском задач или вызовом калбэков), а основные части проги опрашивают "таймауты" сами, то всё гораздо проще:
Код
static uint uiTimer0Count;
static void timer0ISR()
{
    ...
    uiTimer0Count++;
    ...
}

uint getTimer()
{
    return uiTimer0Count;
}

#define VerifyTimer(s,t)  ((t) <= (getTimer()-(s)))

....
    // Старт таймера
    uint nStartTimerVal = getTimer();
....
    // Проверка  таймаута в 1234мс
    if(VerifyTimer(nStartTimerVal, 1234))
    {
        ...
    }
....

Тут переменных типа nStartTimerVal м.б. сколько угодно, и проверять одну засечку времени можно на несколько значений таймаута (иногда я и такое пользую smile.gif ).
Разрядность таймерной переменной можно понятно любую, но в timer0ISR() и getTimer() необходимо обеспечить атомарность модификации и чтения переменной.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 30 2007, 18:18
Сообщение #192


Гуру
******

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



Цитата(Alex_inventor @ Jan 30 2007, 16:52) *
Замечания по поводу, правописания, скажу, я не на экзамене по русскому языку, и вообще я не в России живу и язык у меня родной другой.

Привет братскому Белорусскому городу Брест!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 30 2007, 18:30
Сообщение #193


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Alex03 @ Jan 30 2007, 19:07) *
Тут переменных типа nStartTimerVal м.б. сколько угодно, и проверять одну засечку времени можно на несколько значений таймаута (иногда я и такое пользую smile.gif ).
Разрядность таймерной переменной можно понятно любую, но в timer0ISR() и getTimer() необходимо обеспечить атомарность модификации и чтения переменной.

Здесь смущает только ситуация, когда uiTimer0Count переполнится: 0xffffffff -> 0x0.
При этом вычисления для текущих таймеров будут неверными.
Как этого избежать?
И, извиняюсь, я не знаю, что значит "обеспечить атомарность"... sad.gif
А - вспомнил - одновременное действие?

2Alex_inventor
Привет!
А ты действительно из Бреста?

Сообщение отредактировал sonycman - Jan 30 2007, 18:35
Go to the top of the page
 
+Quote Post
Alex_inventor
сообщение Jan 30 2007, 18:36
Сообщение #194


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 25-01-07
Пользователь №: 24 744



2 zltigo
Немного offtopic:
А как насчёт белорусов в Латвии? Их тоже не любят, как и русских?
По теме: Так как насчёт проекта. Для меня ответ на поверхности не лежит.
Например: регистр VICRaw сигнализирует что, есть “необработанное прерывание”. Как он может это делать, если VicIntSelect и VicIntEnabled равны 0. И почему происходит прерывание? И что произойдет, если находится в режиме User и использовать BX. Вроде ничего не должно, но в проекте идёт срыв в SWI.


2sonycman
Ну да. А ты что тоже?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 30 2007, 18:42
Сообщение #195


Гуру
******

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



Цитата(sonycman @ Jan 30 2007, 17:30) *
Здесь смущает только ситуация, когда uiTimer0Count переполнится: 0xffffffff -> 0x0.
При этом вычисления для текущих таймеров будут неверными.
Как этого избежать?

Элементарно, на самом организуются две очереди - одна до переполнения, другая после.
При переполнении счетчика меняется указатель на очередь.
При ограничении диапазона половиной счетчика можно навернуь и логику обработки переполнения на старшем бите.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

18 страниц V  « < 11 12 13 14 15 > » 
Reply to this topicStart new topic
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0

 


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


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