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

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

AB>> Только лучше немного делать не так. Лучше сравнивать время заряда AB>> конденсатора до порога через эталонный и измеряемый резистор по AB>> очереди. В этом случае отношение измеряемого резистора к эталонному AB>> строго равно отношению времен заряда. Hапряжение питания, емкость AB>> конденсатора значения не имеют (в первом приближении), главное, чтобы AB>> они оставались неизменными за время циклов пары измерения.Частота AB>> тактирования счетчика времени тоже должна оставаться неизменной, хотя AB>> абсолютное ее значение малосущественно. Математика так же будет проще AB>> - не надо считать нелинейные функции, только умножение и деление. AM>

AM> Ч3-64 так и сделан. Простотой он не блещет. Сейчас мне проще вбить в чип AM> нелинейные функции, чем заморачиваться на высококачественные ключи, AM> подключающие по очереди эталонные резисторы с субнаносекундным временем AM> срабатывания. а нахрена туда субнаносекунды? ставим побольше кондер и превращаем субнаносекунды в нормальные микросекунды, а ставим побольше резисторы (1Ком это уже до фига) и влияние полевиков (единицы ом в открытом состоянии) можно считать нулевым.

остается только порог срабатывания КМОП-входа, но я его сейчас поэкспериментирую :)

О! Это я его уже (keil) изматерил всеми известными словами. У меня включаются не только заголовки, но и целиком исходники. Искать ошибку в keil бывает очень утомительно, мягко выражаясь.

Ещё можно изматерить его библиотеку для x51, в которой то scanf не работает как положено, то ещё что-то. :-(

У GCC, надо сказать, с поддержкой стандартов как в самом GCC, так и в прилагаемой libc -- сильно лучше чем во многих других местах. Особенно в плане C99 (вон у M$ нечисла через её msvcrt не проталкиваются ни в какую). С другой стороны -- если говорить про libc, это касается только PC версии.

uVision? Потыкался в кнопочки и выкинул. Взял "IDE" раздаваемую cygnal'ом. От неё как от "DE" толку никакого, зато умеет в байтах ковыряться (отвратительно, но умеет), отлаживать по исходнику (тоже отвратительно, особенно с поддержкой переменных дело совсем плохо), и прошивку заливать. Поэтому я её использую для заливки и ковыряния в байтах, в ситуациях когда 2+2=5.

Меня на самом деле мучает другой вопрос. Как в большинстве этих сред притащить исходник на другую машину, или просто хотя бы checkout другую версию в более другой каталог -- потом файл проекта ручками же править, для избавления от абсолютных путей, и так каждый раз. :-( По-моему это очень актуальная проблема и мне даже удивительно, что никого этот факт, вроде бы, не беспокоит. :-/

Hello Dmitry!

06 Aug 06 10:36, you wrote to me:

DO> Тем не менее, по пожеланиям трудящихся, опасающихся джиттера Tx, вот DO> код (изменения), который в принципе лишен джиттера Tx (проверено, DO> работает). DO> TMR0 = 133; /* Reload timer */ Вообще-то, это означает всего лишь то, что в зависимости от латентности прерываний TMR0 может содержать значение, отличающееся на пару единиц, и эта пара единиц напрямую влезет в шкалу. Корректнее TMR0 += 133 и учесть, что согласно даташиту таймер в момент записи может отличаться от таймера в момент считывания на 2 единицы. Ты в своем балластном применении можешь себе позволить этим пренебречь, я в измерении времени и частоты - нет.

Anatoly

На это имеется отдельный PDF. Хотя согласен. скудный он. :-(



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

2006 09:06:53 +0400:

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

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

DEO> это задача на AN и делать ее надо правильно

Делай, кто мешает?

AM>>> можно с помощью нормальной реализации управления потоком, вывалив AM>>> на устройство все команды сразу и отсчитав на приеме нужное к-во AM>>> ОК.

DO>> И что делать, когда потеряется или исказится символ где-то в начале DO>> этой бессмысленной операции?

DEO> сбросили кучу данных, потом запросили статус :)

Охрененно удобный диалог получится...

dima

formatting link

Hello Alexey!

06 Aug 06 10:45, you wrote to Michael Tulupov:

AB> Только лучше немного делать не так. Лучше сравнивать время заряда AB> конденсатора до порога через эталонный и измеряемый резистор по AB> очереди. В этом случае отношение измеряемого резистора к эталонному AB> строго равно отношению времен заряда. Hапряжение питания, емкость AB> конденсатора значения не имеют (в первом приближении), главное, чтобы AB> они оставались неизменными за время циклов пары измерения.Частота AB> тактирования счетчика времени тоже должна оставаться неизменной, хотя AB> абсолютное ее значение малосущественно. Математика так же будет проще AB> - не надо считать нелинейные функции, только умножение и деление.

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

Anatoly

Имеются и более специфические -fxxx опции. Для тонкой настройки.

Hello, Dmitry! You wrote to Dmitry Orlov on Mon, 07 Aug 2006 09:06:53 +0400:

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

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

Ты бредишь, что в общем-то, естественно для новичков в эхе. AN - это был вопрос даже не вторичный и ...надцатеричный. На первом месте - стояло сравнение реализации такой задачи на разных процессорах сравнимой стоимости и разными средствами (Си, Асм, для особых извращенцев - Форт и т.п.).

Пока я вижу пустую болтовню про "AN", про то что константу непосредственно в теле прорамы определили, или выискивание неоптимального куска.

Но я совершено не понимаю - для чего это делать? Задача оптимизации этого примера - вторична, а вот первичную - никто не хочет. Что и понятно - молоть языками в эхе значительно проще чем что-то делать руками...

With best regards, Alexander Torres. E-mail: snipped-for-privacy@yahoo.com [ Жамству бой !]

Hi Dmitry!

07 Aug 06 09:57, Dmitry E. Oboukhov wrote to Dimmy Timchenko:

DO> когда я учился программировать (~86 год), у процессоров прерывания DO> располагались в конце адресного пространства, DO> на рисунке это выглядело так

DO> +------------+ FFFF адрес DO> | | DO> | | DO> | прерывания | DO> | | DO> +------------+ DO> | | DO> | | DO> +------------+ 0000 адрес

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

Slav.



Hello, Anatoly Mashanov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Mon, 07 Aug

2006 11:14:20 +0400:

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

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

Ни фига не понял. Что именно "это". В какую шкалу что влазит?

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

Чем это корректней?

AM> момент записи может отличаться от таймера в момент считывания на 2 AM> единицы. Ты в своем балластном применении можешь себе позволить этим AM> пренебречь, я в измерении времени и частоты - нет.

В измерениях времени и частоты так конечно делать не получится.

dima

formatting link

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

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

2006 08:57:50 +0400:

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

DEO> терминология со временем просто меняется. DEO> когда я учился программировать (~86 год), у процессоров прерывания DEO> располагались в конце адресного пространства, на рисунке это DEO> выглядело так

У каких именно процессоров? У 8080 вектора как раз в начале, а сами обработчики - где угодно. У 8051 - тоже самое.

DEO> и потому в литературе говорилось "прерывания расположены в верхней DEO> области, основная программа в нижней" или упрощенно "вверху и DEO> внизу".

В какой именно литературе? Даже "верх" и "низ" адресного пространства в разных книжках рисовался по-разному.

DEO> вот с тех пор и не могу отвыкнуть. DEO> PS: из за того что прерывания располагались в верхней области, у DEO> тогдашних устройств RAM делался с нулевых адресов, а ROM DEO> располагался в конце. иногда все пространство не заполнялось DEO> никакой памятью :)

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

dima

formatting link

Hello Arcady

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

Hе обломился, набpал в билдеpе. Hикаких ошибок. А чтобы не было таких мыслей: если пеpеменная объявлена внутpи цикла, то по окончании цикла она пеpестаёт существовать и можно объявить новую с тем же именем.

Bye

Тем что учитывает возможную латентность прерывания из-за временного запрета прерывания где нибудь в программе - например в ee_write(). И только не надо говорить, что в твоей програме это пофигу.

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

Hello, Slav Matveev! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Mon, 07 Aug

2006 10:03:36 +0400:

SM>>> а что ты называешь "средой" ? возможность менять параметры SM>>> компиляции-линковки путем выбора опций ветвистого меню?

DO>> Менять параметры всего проекта и составных частей IDE согласовано, DO>> интерактивно и с по-возможности осмысленными подсказками.

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

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

SM>>> А если эти параметры будут внутри текстового файла с SM>>> комметариями, это сразу перестанет быть "средой"?

DO>> Да, мало ли куда денутся или перепутаются комментарии из текстового DO>> файла. Удобно, когда такой файл генерируется из гуевой программы DO>> автоматически.

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

Именно этим.

SM>>> лет 20 назад в редакторе микромир, который ты наверняка "знать SM>>> не знаю и знать не желаю",

DO>> Hе знаю и не жалаю знать

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

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

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

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

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

В 86 году (20 лет назад)? Ну так в утиль ту клавиатуру.

SM>>> какая принципиальная разница между "монолитным" IDE, и той же SM>>> функциональность, только набранной отдельными утилитами?

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

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

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

dima

formatting link

Если первая и неудачная (еще не известно по какой причине, может не таам искали ;-) ) попытка для вас фатальная, то менять что-либо может и не имеет смысла...

_______ Сергей.

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

------------------------ // interrupt service routine variables volatile byte tx_smpl_cntr = 0; // transmitter sample counter volatile byte tx_state = 0; // transmitter state (bit number) volatile byte txd = 0; // transmitted data volatile bit tx_run = 0; // transmit in progress var volatile bit tx_b = 1; // transmit bit

volatile byte rx_smpl_cntr = 0; // recevier sample counter volatile byte rx_state = 0; // receiver state (bit number) volatile byte rx_1 = 0; // Rx Ones counter volatile byte rrx = 0; // receveing data

------------------------- void sys_int(void) { if (T0IF) { TMR0 += timerTick-5; //!!! Reload timer - ISR PROLOGUE must be accounted! T0IF = 0; // Clear interrupt flag // Timebase calculation if (++_138us == (1000/138+1)) { ms = 1; _138us = 0; } if (mOut) Out = 1; // generate pulse

// send prepared TX bit here to avoid jitter if (tx_b) TTx = 1; else TTx = 0;

// in the IDLE state detect the falling edge of the START (zero) bit if (rx_state == 0) { // IDLE // restart receiving every time // (to avoid the race for back-to-back receives) rrx = 0; rx_1 = 0; rx_smpl_cntr = 0; if (!TRx) // use input pin - polarity! rx_state = 1; // START edge seen } // detect Rx pin state if (TRx) { // ONE - polarity! rx_1 += 1; // One counter if (rx_state == 1) // START bit edge seen and any ONE rx_state = 0; // restart receiving }

if (rx_state != 0) { // !IDLE rx_smpl_cntr += 1; if (rx_smpl_cntr == 3) { // 3 consecutive samples rx_smpl_cntr = 0; // if state==1 then rx_1==0 also! // No need to check and/or clear! if (rx_state == 1) // START bit edge seen rx_state = 2; // START detected else { // data and STOP bits receiving if (rx_state < 10) {// state 2..9 - bits 0..7 rrx >>= 1; if (rx_1 > 1) // 2 of 3 samples are ONEs rrx |= 0x80; rx_state += 1; rx_1 = 0; } else { // STOP if (rx_1 > 1) { // 2 of 3 samples are ONEs // got char in the rrx } // else drop the char - frame error! // restart receiving process rx_state = 0; } } } }

// are we transmitting the byte? if (tx_run) { if (tx_smpl_cntr == 0) { if (tx_state == 0) TTx = 0; // Start bit else if (tx_state < 9) { // data bits if (txd & 1) TTx = 0; else TTx = 1; txd = txd >> 1; } else // first/second stop bit TTx = 1; } // next sample step tx_smpl_cntr += 1; if (tx_smpl_cntr == 3) { tx_smpl_cntr = 0; // next state: START, 0...7, STOP, STOP tx_state += 1; if (tx_state == 11) tx_run = 0; // done with the byte } } // recheck condition here - could be changed above. if (!tx_run) { // keep Tx high after transmition tx_state = 0; tx_smpl_cntr = 0; TTx = 1; } Out = 0; // generate pulse edge } }

Ну чего за чухня? У "процессоров" - если мы употребим множественное число, прерывания (вектора) располагались в начале адресного пространста - кроме мотороллеров разных.

В какой нафиг литературе говорилась такая бредятина?

Что же это были за загадочные устройства - в 86-м то году?

Пpивет, Anatoly!

*** 07 Aug 06 12:14, Anatoly Mashanov wrote to Dmitry Orlov:

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

В случае операции непосредственно с TMR0 ? Т.е. тактируем TMR0 от системного клока без прескалера, и после манипуляции с TMR0 атомарной операцией (addwf, addwf) результат может отличаться (а может и не отличаться ???) от расчетного ? Жуть какая-то... Ссылку на конкретное место в даташите, pls ? Или у меня склероз, или у тебя - глюки...

с уважением Владислав

DO>> когда я учился программировать (~86 год), у процессоров прерывания DO>> располагались в конце адресного пространства, DO>> на рисунке это выглядело так SM>

DO>> +------------+ FFFF адрес DO>> | | DO>> | | DO>> | прерывания | DO>> | | DO>> +------------+ DO>> | | DO>> | | DO>> +------------+ 0000 адрес SM>

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

0FFFF0080h

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

DO>> +------------+ FFFF адрес DO>> | | DO>> | | DO>> | прерывания | DO>> | | DO>> +------------+ DO>> | | DO>> | | DO>> +------------+ 0000 адрес

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

6808, 6812, например. RTFM.

"Resistance is futile"

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required