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

 
 
> Частотомер на Atmega8 (CVAVR)
ps1x
сообщение Jun 9 2010, 17:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Делаю (пытаюсь сделать) частотомер по методу предложеному =GM= тут: http://electronix.ru/forum/index.php?showtopic=29796. Но вот что то не получается. Верней получается но не совсем. Во первых если я меняю задержку между началом и концом измерения то получаю существенно разные варианты. Но в то же время, если задержка ровно 1 сек (delay_ms(1000)wink.gif то результат выводится либо равный расчетному либо чуть больше. Причем как будто бы не хватает одного переполнения таймера 1 т.е. Perepol_Timer1++; и число N1 получается на 65536 меньше. Из за чего результат чуть больше. Но куда оно может пропасть?

код вообще то взят в основном отсюда http://pro-radio.ru/controllers/5978/(с комментариями) но там не работает регистрация поэтому спрашиваю тут.

Код
char gate;
static float Fx;
unsigned long int N, N0, M, M0, N1, M1;
unsigned int Perepol_Timer0=0, Perepol_Timer1=0, count_T1, count_T0,Perepol_Timer1_real;

//Прерывание по переполнению Timer/Counter 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void){
Perepol_Timer0++;//Увеличение переменной на 1
}

//Прерывание по переполнению Timer/Counter 1
interrupt [TIM1_OVF] void timer1_ovf_isr(void){
if (gate){
        Perepol_Timer1++;//Увеличение переменной на 1
}
}

//Прерывание по захвату Timer/Counter 1
interrupt [TIM1_CAPT] void timer1_capt_isr(void){                  
count_T1=ICR1;//Значение регистра ICR1 переписывается в переменную
count_T0=TCNT0;//Значение регистра TCNT0 переписывается в переменную
TIMSK&=0xDF;//Запрет прерывания по захвату                          
if (TIFR&0b00000100==1){
Perepol_Timer1++;
TIFR&=0b00000100;
}
}


while (1){//Бесконечный цикл
#asm("cli")  
gate=0;
Perepol_Timer1=0;//Обнуление переменной
Perepol_Timer0=0;//Обнуление переменной
#asm("sei")//Разрешения прерываний
TIMSK|=0x20;//Разрешили захват
gate=1;
while ((TIFR&0x20)==0x20){}//Ожидание прерывания по захвату
Perepol_Timer1_real = Perepol_Timer1;
N0=(((unsigned long int)(Perepol_Timer1_real))<<16)+count_T1; //Расчет общего количества тиков системной частоты
M0=(((unsigned long int)(Perepol_Timer0))<<8)+count_T0;//Расчет общего количества тиков входной частоты
//sprintf(lcd_buffer, "PT1=%u;CT1=%u;PT0=%u;CT0=%u;\r", Perepol_Timer1_real, count_T1, Perepol_Timer0, count_T0);
//puts(lcd_buffer);
delay_ms(1000);//Задержка на 1 с
TIMSK|=0x20;//Разрешили захват
gate=0;
while ((TIFR&0x20)==0x20){}//Ожидание прерывания по захвату  
Perepol_Timer1_real = Perepol_Timer1;
N1=(((unsigned long int)(Perepol_Timer1_real))<<16)+count_T1; //Расчет общего количества тиков системной частоты
M1=(((unsigned long int)(Perepol_Timer0))<<8)+count_T0;//Расчет общего количества тиков входной частоты
sprintf(lcd_buffer, "PT1=%u;CT1=%u;PT0=%u;CT0=%u;\r", Perepol_Timer1_real, count_T1, Perepol_Timer0, count_T0);
puts(lcd_buffer);
N=(N1-N0);//Расчет количества тиков системной частоты за время измерения
M=(M1-M0);//Расчет количества тиков входной частоты за время измерения

Fx=12000000.0*(float)M/(float)N;//Вычисление частоты входного сигнала
putchar('c');
sprintf(lcd_buffer, "F=%0.6fHz", Fx);
lcd_clear();
lcd_puts(lcd_buffer);
puts(lcd_buffer);
putchar(13);
} }
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ps1x
сообщение Jun 15 2010, 20:21
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Автогенератор в институте, и схемы от него нет, даже боюсь его развинчивать, но постараюсь что нибудь добыть когда там буду.

Может быть запретить прерывания перед считыванием ICR1? smile.gif

up: выбросы бывают и в меньшую сторону, около 1013 Гц.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 16 2010, 10:10
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(ps1x @ Jun 15 2010, 19:21) *
Может быть запретить прерывания перед считыванием ICR1? smile.gif

Всё равно между захватом и запретом можем пропустить переполнение tov1 или tov0, хотя и реже.
Расскажу, как работает код
Код
1  TIFR=(1<<ICF1);               //сбросим флаг захвата
2  while((TIFR&0x20)==0x20);     //ждём начала измерения
3  ntick1=ICR1;                  //запомним ICR1 и TCNT0
4  mtick1=TCNT0;                 //в начале измерения
5  ntick2=nover;
6  mtick2=mover&0x00FF;

1. Сбросили флаг захвата, это понятно, чтобы будущее содержимое ICR1 и TCNT0 было синхронизировано.
2. Ждём захвата, чтобы текущее содержимое системного времени в TCNT1 защёлкнулось в ICR1 и чтобы содержимое TCNT0 соответствовало защёлкнутому времени.
3-4. Сохраняем содержимое ICR1 и TCNT0 в памяти для дальнейшего использования.
5. Сохраняем старшую часть 32-битного счётчика nover в памяти для дальнейшего использования. Заметьте, я специально оттянул время запоминания nover подальше от захвата п.2, чтобы дать время сработать возможному прерыванию и скорректировать nover.
6. Сохраняем старшую часть 32-битного счётчика mover в памяти для дальнейшего использования. Тут статика, никаких особенностей.

Тут можно посмотреть варианты решения http://electronix.ru/forum/index.php?showtopic=16900


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ps1x
сообщение Jun 16 2010, 13:31
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(=GM= @ Jun 16 2010, 14:10) *
4) Проверить наличие переноса из таймера1. При наличии переноса добавить единицу к Т6.

5) Проверить наличие второго захвата, если нет захвата перейти к п.4.

Вот так видимо? smile.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 16 2010, 14:33
Сообщение #5


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Не понял, по-подробнее можно?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ps1x
сообщение Jun 16 2010, 14:51
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Ваш пост из того топика.

Сообщение отредактировал rezident - Jun 16 2010, 20:48
Причина редактирования: Нарушение п.3.4 Правил форума.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 21 2010, 15:31
Сообщение #7


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Ну что, ps1x, есть подвижки? В принципе, я нашёл решение для си, надо проверить...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ps1x
сообщение Jun 23 2010, 18:37
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(=GM= @ Jun 21 2010, 19:31) *
Ну что, ps1x, есть подвижки? В принципе, я нашёл решение для си, надо проверить...

Да, вместо использования компаратора я сделал усилитель на 2 транзисторах. Изготовил плату и спаял smile.gif А вот по программе пока не продвигался smile.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 24 2010, 21:56
Сообщение #9


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Попробуйте следующий код, для ваших целей должен подойти
Код
ISR (TIMER0_OVF_vect)                 //переполнение входных тиков
{
mover++;                             //учтём в mover
}

ISR (TIMER1_OVF_vect)                 //переполнение таймера1
{
nover++;                             //учтём в nover
}

int main(void)
{
TIMSK=(1<<TOIE1)|(1<<TOIE0);         //разрешим TOV1 и TOV0
asm volatile("sei\n\t"::);           //разрешим прерывания
while(1)                             //непрерывное измерение частоты
{
  TIMSK &=~_BV(TOIE1);                //запретим прерывания TOV1
  do
  {
   if(TIFR &_BV(TOV1))                //при появлении
   {                                  //переполнения поправим
    nover++;                          //старшее слово
    TIFR =_BV(TOV1);                  //и сбросим TOV1
   }
  }
  while((TIFR&_BV(TOV1))==0);         //ждём начала измерения
  ntick1=ICR1;                        //запомним ICR1
  ntick2=nover;                       //и старшую часть
  if(TIFR &_BV(TOV1))
  {
   nover++;
   TIFR =_BV(TOV1);                   //сбросим TOV1
   if(ntick1<0x8000) ntick2=nover;
  }
  TIFR=(1<<ICF1);                     //сбросим флаг захвата
  TIMSK |=_BV(TOIE1);                 //разрешим прерывания TOV1
  mtick1=TCNT0;                       //запомним TCNT0
  mtick2=mover&0x00FF;                //и старшую часть
  N1=((uint32_t)(ntick2)<<16)+(uint32_t) ntick1; //системные тики
  M1=((uint32_t)(mtick2)<<8) +(uint32_t) mtick1; //входные тики
  delay_ms(1000);                     //задержка на 1 с
  TIMSK &=~_BV(TOIE1);                //запретим прерывания TOV1
  do
  {
   if(TIFR &_BV(TOV1))                //при появлении
   {                                  //переполнения поправим
    nover++;                          //старшее слово
    TIFR =_BV(TOV1);                  //и сбросим TOV1
   }
  }
  while((TIFR&_BV(TOV1))==0);         //ждём конечного захвата
  ntick1=ICR1;                        //запомним ICR1
  ntick2=nover;                       //и старшую часть
  if(TIFR &_BV(TOV1))
  {
   nover++;
   TIFR =_BV(TOV1);                   //сбросим TOV1
   if(ntick1<0x8000) ntick2=nover;
  }
  TIFR=(1<<ICF1);                     //сбросим флаг захвата
  TIMSK |=_BV(TOIE1);                 //разрешим прерывания TOV1
  mtick1=TCNT0;                       //запомним TCNT0
  mtick2=mover&0x00FF;                //и старшую часть
  N2=((uint32_t)(ntick2)<<16)+(uint32_t) ntick1; //системные тики
  M2=((uint32_t)(mtick2)<<8) +(uint32_t) mtick1; //входные тики
  N=N2-N1;                            //системные тики за время измерения
  M=M2-M1;                            //входные тики за время измерения
  Fx=12000000.0*(float)M/(float)N;    //вычисление частоты сигнала

// <<код вывода на индикатор>>

}
}



--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ps1x
сообщение Jun 25 2010, 10:27
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Работает прекрасно smile.gif +/- 0.0001 мкС
Большущее спасибо!
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 25 2010, 11:19
Сообщение #11


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



На здоровье.

Но 0,0001 мкс - это 0,1 нс, вы не ошиблись?

Меня ваш проект заинтересовал постольку, поскольку он написан на си (который я местами недолюбливаю :-), а на форуме было много вопросов, как реализовать мой алгоритм именно на си, но что-то все кодеры пропадали, не дойдя до конечного результата. Теперь одна из реализаций налицо, буду на неё ссылаться при случае :-).

Ещё, интересно было бы выяснить, какую максимальную частоту вы сможете измерить без переделки программы? С небольшими изменениями вы можете мерить до половины тактовой, в вашем случае до 6 МГц.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 25 2010, 12:00
Сообщение #12


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(=GM= @ Jun 25 2010, 15:19) *
На здоровье.
Простите, что вклиниваюсь, но возникает у меня вопросик.
А что будет с прибором, когда частота очень низкая или её нет вовсе?
Может я что не понял, но в коде есть "бесконечные" циклы, ожидающие события от периферии...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 25 2010, 13:06
Сообщение #13


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(demiurg_spb @ Jun 25 2010, 11:00) *
Простите, что вклиниваюсь, но возникает у меня вопросик.
А что будет с прибором, когда частота очень низкая или её нет вовсе? Может я что не понял, но в коде есть "бесконечные" циклы, ожидающие события от периферии...

Я уж испугался, что будет вопросик про Балеру или, того хуже, про прачечную :-). Это у вас с переездом связано, что ли?

1) У автора стоит автогенератор, вырабатывающий частоты в диапазоне 2-10 кГц, так что частота должна быть.
2) С другой стороны, если нет частоты, то вроде бы нечего отображать.
3) Однако, вы абсолютно правы в том, что данная программа имеет некоторые ограничения (как и всё в этом мире, впрочем). В программе нет модуля оценки входной частоты, просто в данном топике задача была не представить полностью коммерческий продукт, а немного другая, именно - написать программу на си для измерения частоты с минимальной погрешностью. Код программы открыт, так что, кому надо могут модифицировать его под себя.

Задача в основном достигнута, 1000 Гц измеряются с СЕМЬЮ верными цифрами. Кстати, методом ворот можно достичь только ТРИ значащие цифры.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 27 2010, 19:19
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(=GM= @ Jun 25 2010, 17:06) *
Я уж испугался, что будет вопросик про Балеру или, того хуже, про прачечную :-). Это у вас с переездом связано, что ли?
Да нет:-) Разработчики пока на старом месте останутся.

Цитата
1) У автора стоит автогенератор, вырабатывающий частоты в диапазоне 2-10 кГц, так что частота должна быть.
2) С другой стороны, если нет частоты, то вроде бы нечего отображать.
3) Однако, вы абсолютно правы в том, что данная программа имеет некоторые ограничения (как и всё в этом мире, впрочем). В программе нет модуля оценки входной частоты, просто в данном топике задача была не представить полностью коммерческий продукт, а немного другая, именно - написать программу на си для измерения частоты с минимальной погрешностью. Код программы открыт, так что, кому надо могут модифицировать его под себя.

Задача в основном достигнута, 1000 Гц измеряются с СЕМЬЮ верными цифрами. Кстати, методом ворот можно достичь только ТРИ значащие цифры.
Понятно. Но я вижу лёгкое неудобство в том что надо детектировать наличие частоты. Я в своём тахометре работаю по двум алгоритмам и когда надо перехожу с одного на другой. Но как всегда есть одно но. Хочется повысить быстродействие измерительного канала и при этом не потерять в точности, вот я и приглядываюсь к Вашему методу. Пока лишь смотрю, т.к. сразу не вижу простого и красивого способа его применить.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 28 2010, 11:34
Сообщение #15


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



1) В чём конкретно вы видите лёгкое неудобство от детектирования?

2) Так всё таинственно, ну расскажите, что за алгоритмы...

3) Не знаю, что вы понимаете под красиво и легко, но посмотрел вполглаза на паспорт вашего тахометра, и увидел, что ваша "детская" погрешность в 1 Гц для 1000 Гц моим методом может быть легко превышена за время измерения 0,001 с (с погрешностью не более +-0,1 Гц).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 28 2010, 17:34
Сообщение #16


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(=GM= @ Jun 28 2010, 15:34) *
1) В чём конкретно вы видите лёгкое неудобство от детектирования?

Теряется единообразие для быстрых и медленных частот (у меня же от 0,001Гц индикация работает).
Да и со свободными таймерами могут быть напряги. Надо попробовать т.к это лишь предположения:-)
Цитата
2) Так всё таинственно, ну расскажите, что за алгоритмы...

Считаю либо кол-во импульсов за секунду, либо интервалы между импульсами, а переключаюсь по условию наименьшей погрешности измерения.
Цитата
3) Не знаю, что вы понимаете под красиво и легко, но посмотрел вполглаза на паспорт вашего тахометра, и увидел, что ваша "детская" погрешность в 1 Гц для 1000 Гц моим методом может быть легко превышена за время измерения 0,001 с (с погрешностью не более +-0,1 Гц).
При этом имеем динамическую индикацию и клавиатуру, modbus до 921.6КБод, DAC, счётчик импульсов и счётчик времени наработки, внешние логические входы-выходы и ещё всякого разного функционала немало наберётся, да и бутлоадер отъедает часть флеша.

Я не спорю, что можно лучше, я даже уверен в этом. Но ресурсов контроллера уже особо не хватает на сильный импрувмент:-(
Приборчик то старенький уже, сейчас бы на кортексе делал а не на 16 (162)-ой меге.
Вот я и примеряюсь, обдумываю неспешно, т.к. текущий проект много сил требует...

Как вспомню, сколько нервов истратил на его сертификацию в Морском регистре, уууу.... то дисплей им с регулировкой яркости подавай, то корпус горючий, то питание =24В с нехилым гистерезисом и все эти требования постепенно выдают ведь собаки такие:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 28 2010, 21:56
Сообщение #17


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(demiurg_spb @ Jun 28 2010, 16:34) *
Теряется единообразие для быстрых и медленных частот (у меня же от 0,001Гц индикация работает)

Ну, это вы ещё не прочувствовали мой алгоритм, в этом плане он универсальный. Можно или задаться числом периодов M=1, когда измеряете период длинного импульса, близкого к интервалу наблюдения, или целое число периодов М>1, также близкого к интервалу наблюдения, когда измеряете более короткие импульсы. Вся прелесть метода в том, что погрешность измерения минимальна всегда, невзирая на номинал входной частоты, поэтому не надо переключаться с одного алгоритма на другой, полное "единообразие" по-вашему.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ps1x   Частотомер на Atmega8 (CVAVR)   Jun 9 2010, 17:23
- - Сергей Борщ   Вы учитываете остаток в регистре таймера на момент...   Jun 10 2010, 06:02
|- - ps1x   Цитата(Сергей Борщ @ Jun 10 2010, 10:02) ...   Jun 10 2010, 09:01
- - =GM=   У вас ошибка: второе прерывание TOV1 никогда не да...   Jun 10 2010, 21:36
|- - ps1x   Цитата(=GM= @ Jun 11 2010, 01:36) У вас о...   Jun 11 2010, 08:54
|- - =GM=   Структура вашей программы в некотором смысле эклек...   Jun 11 2010, 21:28
|- - ps1x   Цитата(=GM= @ Jun 12 2010, 01:28) Структу...   Jun 12 2010, 11:43
|- - =GM=   Для вашего случая погрешность измерения приблизите...   Jun 12 2010, 12:51
|- - ps1x   Цитата(=GM= @ Jun 12 2010, 16:51) Как вы ...   Jun 12 2010, 21:51
|- - =GM=   Цитата(ps1x @ Jun 12 2010, 20:51) можно л...   Jun 13 2010, 22:22
|- - ps1x   Цитата(=GM= @ Jun 14 2010, 02:22) В принц...   Jun 14 2010, 18:46
|- - =GM=   1) Оффсет влияет на начало фронта, многое зависит ...   Jun 15 2010, 09:11
- - ps1x   CODE#include <mega8.h> //Подключение #incl...   Jun 15 2010, 09:38
|- - =GM=   1) Для начала неплохо. Каков был номинал входной ч...   Jun 15 2010, 10:34
|- - ps1x   Входная частота 1019.02173 Гц. Расчетная. По осцил...   Jun 15 2010, 11:36
|- - =GM=   Разница М2-М1 всё время где-то 1033-1034, это прие...   Jun 15 2010, 12:03
- - ps1x   Кодreset aN1=65536 M1=98 ntick1=0 ntick2=1 N2=125...   Jun 15 2010, 12:50
|- - =GM=   Теперь мне не нравится, что ntick1 всё время равен...   Jun 15 2010, 14:05
|- - ps1x   Цитата(=GM= @ Jun 15 2010, 18:05) Признав...   Jun 15 2010, 14:58
|- - =GM=   Цитата(ps1x @ Jun 15 2010, 13:58) Входной...   Jun 15 2010, 15:35
- - ps1x   А DDR соответствующих ножек влияет? Подтяжка? Сейч...   Jun 15 2010, 16:02
|- - =GM=   Да, надо соединить Т0 и ICP с генератором меандра....   Jun 15 2010, 16:23
- - ps1x   Появилась стабильность Значения 1018.8184 - 1018....   Jun 15 2010, 19:22
|- - =GM=   Ну, я рад за вас. Выбросы происходят из-за того са...   Jun 15 2010, 19:36
|- - ps1x   Цитата(=GM= @ Jun 25 2010, 15:19) Но 0,00...   Jun 26 2010, 09:13
- - ps1x   Пожалуй, подниму тему из глубин форума. Встала зад...   Nov 3 2010, 11:50
- - akl   В mega8 есть аналоговый компаратор, имеющий доступ...   Nov 3 2010, 16:19
|- - ps1x   Цитата(akl @ Nov 3 2010, 20:19) В mega8 е...   Nov 3 2010, 18:15
- - akl   Цитата(ps1x @ Nov 3 2010, 15:50) Судя по ...   Nov 3 2010, 18:39
|- - =GM=   Если измерять частоты надо одновременно, то вот ва...   Nov 3 2010, 20:40
- - ps1x   Но ведь вроде T0 и T1 асинхронные, и считают незав...   Nov 3 2010, 20:50
|- - =GM=   Ну, вот вам ещё вариант: берёте МК с тремя таймера...   Nov 3 2010, 22:55
- - horoc   =GM= Заинтересовался Вашим способом, давно хотел с...   Nov 7 2010, 13:54
|- - =GM=   Ну, трудно обьяснить, попробую. Цикл do ... whil...   Nov 7 2010, 18:52
- - horoc   Я поэкспериментировал немного, сделал вот так. К...   Nov 7 2010, 19:16
- - horoc   Вот еще на танцевал с бубном =GM= благодарю...   Nov 7 2010, 21:06
- - Pikt   Приветствую. Я плохо разбираюсь пока что в микроко...   Jun 19 2011, 11:32
- - =GM=   Пойдёт. Выходной сигнал - двоичное число в операт...   Jun 20 2011, 13:05


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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