Hадежный контроллер нужен........

Jul 27, 2006 Last reply: 19 years ago 886 Replies

Hello Dmitry.

Mon Aug 07 2006 08:50, Dmitry E Oboukhov wrote to Arcady Schekochikhin:

AS>> for(int i = 0; i < N; i++) AS>> ----^^^^ AS>> a[i] = 0; AS>> int i = 5; AS>> ^^^

DEO> кстати в стандарте C99 такой код уже можно писать, так что gcc должен DEO> его компилировать, не знаю как IAR

IAR вообще-то поддерживает EC++ и Extended EC++.

Dimmy.

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Arcady Schekochikhin! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Mon, 7 Aug 2006 09:22:31

+0000 (UTC):

DO>>>> TMR0 = 133; /* Reload timer */

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

AM>>> Корректнее TMR0 += 133 и учесть, что согласно даташиту таймер в

AS> Тем что учитывает возможную латентность прерывания из-за временного AS> запрета прерывания где нибудь в программе - например в ee_write().

Не понял. Если таймер успеет убежать от этого дальше, чем обычно, чем это поможет?

AS> И только не надо говорить, что в твоей програме это пофигу.

Таки по-фигу, в это время ей ничего ни принимать ни передавать не нужно.

dima

formatting link

AM>>>> И в результате получаются чудовищные тормоза, избавиться от которых DO>>>

DO>>> Окстись, какие тормоза? Ты решаемую задачу еще помнишь? Это делается DO>>> для прежде всего ручного ввода пары чисел. Кому нужна эта скорость? DEO>> это задача на AN и делать ее надо правильно AT>

AT> Ты бредишь, что в общем-то, естественно для новичков в эхе. ПHХ

AT> Hо я совершено не понимаю - для чего это делать? Задача оптимизации этого AT> примера - вторична, а вот первичную - никто не хочет. первичная пока не решена (ошибки не поправлены)

Тем что следующее прерывание таки произойдет через 138uS от того времени когда должно было произойти текущее - соответственно временная сетка останется стабильной и не будет накапливаться ошибка.

Да это и так ясно что пофигу - тебя не интересует сетка - относительных интервалов достаточно.

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Arcady Schekochikhin! You wrote in conference fido7.ru.embedded to Nicolas Minakov on Mon, 7 Aug

2006 09:59:24 +0000 (UTC):

AS> Не мог бы ты попробовать такой код - он должен работать быстрее. Уже AS> сейчас видно что (с учетом 8мгц против 4) АВР вроде на 30% быстрее AS> - возможно этот код даст еще скорости - AS> тогда 4800 будет 100% реализуемо (9600 на 8Мгц).

Может при случае гляну, пока что некогда. Если бы ты целиком программу дал, я бы мог попробовать скомпилировать и проверить работоспособность и сколько времени работает код, а так это требует больше времени.

dima

formatting link

Я не тебя просил - Николая, поэтому и дал выжимку. Скорее всего и этот кусочек надо отлаживать - я его просто глазами пробежал.

Hello Dmitry.

Воскресенье Авгyст 06 2006 11:55, you wrote to Dmitry Orlov:

DO> вот константу в приближении вполне можно доверить считать компилятору DO> ) правда не знаю справится ли hi-tech, но что-то в таком духе DO> можно соорудить:

DO> void interrupt int_entry(void) DO> { DO> asm { DO> label: nop DO> }

DO> byte begin_length=label-int_entry; DO> ...

DO> а дальше этот begin_length перевести в тики таймера.

DO> вычесть адреса должен и компилятор сам уметь, как асмовские DO> инструкции оформляются в ht-pic не знаю, считай что вышеприведеное - DO> псевдокод :)

Долго вы с этой константой носитесь, а почему игнорируете такой вариант:

TMR0 += 256 - сколько_тактов_наш_период;

Leha

Привет Dmitry!

07 Авг 06 года (а было тогда 10:08) Dmitry E. Oboukhov в своем письме к Andrey Bivshih писал:

AB>> А какой в этом усложнении смысл в таком простом девайсе ? AB>> Что по очереди, что все вместе "Ok", все равно ждать. AB>> И в сложном устройстве, пачкой команды можно отправлять только AB>> до того момента, когда следующая команда будет зависеть от ответа AB>> "Ok" или "Error".

DO> во первых нормализация менеджера процессов в основной программе не DO> даст усложнения (а возможно наоборот)

Если оно и так работает - любое изменение - лишняя работа.

DO> во вторых суть данного девайса - AN на выходе.

Hа сколько я понял, суть этого девайса не много в другом.

С уважением, Andrey 07 Авг 06 года

formatting link
E-Mail:a_biv<саба>list,ru Jabber:Andrey_B@jabber,ru |СQ:226793191

Привет Arcady!

07 Aug 06 03:30, Arcady Schekochikhin писал Alexander Terlyanskii:

AS> for(int i = 0; i < N; i++) AS> ----^^^^ AS> a[i] = 0; AS> int i = 5; AS> ^^^

6.8.5.3 The for statement 1 The statement for ( clause-1 ; expression-2 ; expression-3 ) statement behaves as follows: The expression expression-2 is the controlling expression that is evaluated before each execution of the loop body. The expression expression-3 is evaluated as a void expression after each execution of the loop body.

it is reached in the order of execution before the first evaluation of the controlling expression. If clause-1 is an expression, it is evaluated as a void expression before the first evaluation of the controlling expression.133)

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Западно-уральское региональное общество добровольных учредителей.

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Dmitry E. Oboukhov! You wrote in conference fido7.ru.embedded to Alexander Torres on Mon, 07 Aug

2006 15:08:42 +0400:

AT>> Hо я совершено не понимаю - для чего это делать? Задача оптимизации AT>> этого примера - вторична, а вот первичную - никто не хочет. DEO> первичная пока не решена (ошибки не поправлены)

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

dima

formatting link

Hi Dmitry!

07 Aug 06 13:31, Dmitry Orlov wrote to Slav Matveev:

SM>> Килобайты текстового файла, куда уж более осмысленно?

DO> Это вообще кошмар. Конфигурирование превращается в написание DO> программы, которую надо скомпилитровать, найти и понять ошибки, DO> исправить, опять скомпилировать. Самому следить, чтобы комментарии DO> соответствовали тексту. Плюс еще нужен редактор с интерпретаром DO> синтаксиса этого конфига, иначе там ничего не видно.

для того что бы понять синтаксис вида parameter = value не надо иметь выдающихся умственных способностей.

SM>> чем удобно? что шаг вправо, шаг влево - побег, прыжок на SM>> месте - провокация.

DO> Именно этим.

ну значит у тебя все проекты имели единственный выход: main.exe

SM>> убийственная аргументация. "я этого не знаю, я этого не умею, SM>> поэтому это - говно".

DO> Hемного не так. Если для двух вещей одна требует для своего DO> использования дополнительные знания и умения, причем из весьма далекой DO> от основной деятельности области, а другая нет, то первая - говно. какие именно навыки нужны из далекой области?

SM>>>> раза <send> строчкой ниже и запустить на выполнение SM>>>> собраный проект, это нельзя считать "средой разработки"?

DO>>> А один раз нажать F9 и для того и для другого не будет удобней?

SM>> f9 на клавиатуре отсутствовало.

DO> В 86 году (20 лет назад)? Hу так в утиль ту клавиатуру. подозреваю что давно сдана. но f9 от этого на ней не появилась.

DO>>> Такая же, как между телевизором и жменей радиодеталей.

SM>> походу дела "пастернака не читал..." ?

DO> Причем тут Пастернак?

ты пытаешься с говном мешать вещи, которые видел один раз, издалека, на картинке.

Slav.

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Arcady Schekochikhin! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Mon, 7 Aug 2006 11:15:33

+0000 (UTC):

AM>>>>> Корректнее TMR0 += 133 и учесть, что согласно даташиту таймер в

AS>>> Тем что учитывает возможную латентность прерывания из-за AS>>> временного запрета прерывания где нибудь в программе - например в AS>>> ee_write().

AS> Тем что следующее прерывание таки произойдет через 138uS от того AS> времени когда должно было произойти текущее - соответственно

Брр. Таймер считает вперед, прерывание возникает при его переполнении, в него грузится дополнение до 256 + поправка на прошедшее с момента прерывания до момента загрузки время. Я же приводил тут формулу из другого проекта для рассчета этой базы (без учета поправки). Наверное правильно ты заметил, что в методических целях стоило таки писать в проекте не число, а эту формулу, чтобы лишние вопросы не возникали...

AS> временная сетка останется стабильной и не будет накапливаться AS> ошибка.

Она никуда не накапливается, с чего бы ей накапливаться?

AS>>> И только не надо говорить, что в твоей програме это пофигу.

AS> Да это и так ясно что пофигу - тебя не интересует сетка - AS> относительных интервалов достаточно.

Ну да.

dima

formatting link

Mon Aug 07 2006 12:57, Slav Matveev wrote to Dmitry E. Oboukhov:

SM> позвольте полюбопытствовать что это за архитектура, у которой SM> прерывания в верхних адресах?

Типично для процессоров от Моторолы.

VLV

"Что даст мне свет, чего я сам не знаю?" (c) Гете "Фауст"

Здравствуй, Dmitry!

Как то 07 Aug 06 в 18:24, Dmitry Orlov писал Arcady Schekochikhin: AS>> Тем что следующее прерывание таки произойдет через 138uS от того AS>> времени когда должно было произойти текущее - соответственно

DO> Брр. Таймер считает вперед, прерывание возникает при его переполнении, DO> в него грузится дополнение до 256 + поправка на прошедшее с момента DO> прерывания до момента загрузки время. Я же приводил тут формулу из DO> другого проекта для рассчета этой базы (без учета поправки). Hаверное DO> правильно ты заметил, что в методических целях стоило таки писать в DO> проекте не число, а эту формулу, чтобы лишние вопросы не возникали... Ой, блин, ну как же вы настолько друг-друга не понимаете :) Да, таймер считает вперед, я сначала тоже не врубился. Hо! В момент переполнения выполняются несколько тактов для сохр. контекста и прочее, и к моменту перезагрузки таймера значение там будет уже не нулевое, а, например, t. Ты с осциллом и добиваешься компенсации этого t путем его прибавления, но находишь его экспериментально. Если ты не затрешь текущее t а прибавишь к нему нужную константу, то ясно, что следующее переполнение наступит раньше именно на t тиков(с момента перезагрузки таймера), то есть _ровно_ через вычисленное значение времени с предыдущего переполнения. AS>> временная сетка останется стабильной и не будет накапливаться AS>> ошибка. DO> Она никуда не накапливается, с чего бы ей накапливаться? С того, что если ты неправильно подберешь константу, то частота уйдет :)

2AS: Все гениальное просто :)

Удачи! Pasha

rа4аrb@rаmblеr.ru

_*NO CARRIER*_ Now playing: silence (Winamp is _dead_)

Привет Anatoly!

07 Авг 06 года (а было тогда 12:19) Anatoly Mashanov в своем письме к Alexey V Bugrov писал:

AB>> заряда конденсатора до порога через эталонный и измеряемый AB>> резистор по очереди. В этом случае отношение измеряемого AB>> резистора к эталонному строго равно отношению времен заряда.

AM> Ч3-64 так и сделан.

Там имеется интерполятор, в котором зарядные и разрядные токи не равны, зарядный больше разрядного в К=128 раз, во столько-же раз входной импульс разширяется. Поэтому для компенсации дрейфов нулей компараторов, задержек, применяется нехилая процедуры калибровки этого интерполятора.

AM> Простотой он не блещет.

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

formatting link
Это от Ч3-64, в Ч3-64/1 чуть по другому, но не принципиально.

AM> Сейчас мне проще вбить в чип нелинейные функции, чем AM> заморачиваться на высококачественные ключи, подключающие AM> по очереди эталонные резисторы с субнаносекундным временем AM> срабатывания.

Применительно к Ч3-64, одной математикой обойтись не получится.

С уважением, Andrey 07 Авг 06 года

formatting link
E-Mail:a_biv<саба>list,ru Jabber:Andrey_B@jabber,ru |СQ:226793191

Hello Arcady.

07 Aug 06 13:59, you wrote to me:

Посмотрю обязательно, но я писал под tiny45, мне надо разобраться. Строку разбирать тоже гдето надо. А что касается скорости 4800 - ну поменял я TCNT0 с 121 до 188, ну работает на

4800. Поставил ton=26 toff=30, касаюсь рукой - NTC греется и диод тухнет (я вместо транса - светодиод прилепил)... Токо нафиг этот разгон? Мельтешить в терминале вдвое быстрее?

tiny45 сравнивать с PIC12F675 нельзя. Они разных годов разработки. Возможности

45 - шире, перифирия у него на борту богаче. Он заточен под подключение термопары, и имеет внутренний термодатчик. У него на борту Universal Serial Interface. Заниматься на нем разгоном софтового уарта, только для того чтобы чтото комуто доказать - еще один штрих к картине моей альтернативной одаренности. Hа tiny45 можно спокойно получить 115200 через USI, только придется отдать не две а три ноги.

Прога у меня занимает 1888, Больше половины памяти не занято. Из обязов не вошли еще сглаживающий фильтр и собака (Собака за ненужностью закоментирована). Hо по сути это все тотже trm Орлова. Есть версия под winavr, есть под iar. Если надо - намылю. Класть негде.

А со сглаживанием - простая замена асмовского куска на temp /= 16; // divide int /16

скомпилировалась нормально, но вызвала переполнение в симуляторе и в риале. Иар сразу на бред ответил эррором при линковке. От того у меня и не работало АЦП и иногда портился конец строки. Сглаживание я выбросил.

Nicolas

AM>>> ключи, подключающие по очереди эталонные резисторы с AM>>> субнаносекундным временем срабатывания. DO>> а нахрена туда субнаносекунды? AM> У нас противоположные задачи. Вы мерите часами напряжение, я мерю время AM> вольтметром. LOL!

Hello Dmitry!

07 Aug 06 09:05, you wrote to me:

AM>> И в результате получаются чудовищные тормоза, избавиться от DO> там всего-то нормализовать менеджер процессов в функции main - убрать DO> тупые циклы ожидания и система сможет начать работать асинхронно: Ага. С задержками в десятые доли секунды на каждую передиспетчеризацию. Плавали, знаем. Потому и говорю: Windows не заслужила право называться Операционной Системой. DO> прием сам по себе передача сама по себе :)

AM>> У меня в одном дивайсе имеется буфер на 8 байт. Соответственно,

DO> буфер разумеется должен быть, но коль процессор у него озадачивается DO> выполнением длительных команд (например когда он передает он ни на что DO> не реагирует, когда он переводит числа в строки и строки в числа опять DO> в таком же состоянии, когда он тупо ждет когда доработает АЦП, DO> работающее насколько я понял на 62Кгц, то есть частота преобразования DO> ~ 6кГц - опять сравнимо с тактом, он опять же ни на что не реагирует.

- значит, программист точно не читал ничего, кроме Дюма, и не имеет никакого понятия ни о прерываниях, ни о многозадачных системах. Если проц передает (Даже если он передает через программу) - регулярно срабатывают прерывания по таймеру, и в них можно сделать все экстренное. Перевод чисел в строки - это одна операция деления (Hу потрясающая задержка) в фоновом процессе, прерывания продолжают работать. Когда он тупо ждет, когда доработает АЦП - ему никто не мешает вызывать обработчик команд в цикле ожидания.

DO> DO тут кричит что мол ему фиолетово что сколько работает, что если МHЕ не фиолетово. У меня частота прерывания 20 кгц (Это 250 циклов команд между сигналами прерывания), и потеря одного прерывания абсолютно фатальна. При этом дивайс ухитряется программно растянуть этот интервал до 1000 циклов, а в фоне времени вообще хватает на все. DO> понадобится он сюда весь math.h притащит, а я говорю что math.h сюда DO> тащить не надо, потому что уже сейчас проблемы с потерей данных DO> имеются.

Значит, обработка считывания с компорта сделана неоптимально. math.h может делать свое черное дело хоть секунды в фоне, заглатывание данных с компорта может делаться в прерываниях по таймеру.

Anatoly

AM>>> И в результате получаются чудовищные тормоза, избавиться от DO>> там всего-то нормализовать менеджер процессов в функции main - убрать DO>> тупые циклы ожидания и система сможет начать работать асинхронно: AM> Ага. С задержками в десятые доли секунды на каждую передиспетчеризацию. AM> Плавали, знаем. Потому и говорю: Windows не заслужила право называться AM> Операционной Системой. короче я взял сейчас и посидел немного после работы. взял первый попавшийся готовый девайс с RS232, и написал свой драйвер. ничего не оптимизировал, так просто как думаю так и написал.

сейчас пока передает тот байт который принимает обратно. написано на AtMega8 (в этой плате такой процессор стоит) если говорить о конкурсе, то там задача будет решаться на AtTiny, в которую прога впихивается со свистом (сейчас написанная)

так вот на 8МГц АтМега спокойно получается скорость 9600Бод,

повесил светодиод: на входе в прерывание ножку в плюс на выходе - в ноль

максимальная скважность получается 2.7/7=0.38.

то есть программный RS232 на AtMega8-8 проходит со свистом на 19200 бод.

если говорить об AtTiny, то их две разновидности с буквой V и без оной,

одна работает на 4МГц, соответственно ее максимальная скорость получается 9600, вторая на

10МГц, максимальная скорость получается 19200.

вот и вся разница PIC-AVR :)

сейчас я поеду домой, до дома доеду выложу драйвер.

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

фотографии платы и осциллографа куда-то там поставленного сделаю завтра. или послезавтра.

Hello Dmitry!

07 Aug 06 11:09, you wrote to me:

AM>> ключи, подключающие по очереди эталонные резисторы с AM>> субнаносекундным временем срабатывания. DO> а нахрена туда субнаносекунды? У нас противоположные задачи. Вы мерите часами напряжение, я мерю время вольтметром.

Anatoly

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required