Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 12.05.2008, 20:58  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от double_dash
Да уж...
Узнать бы точно чему равен частотный потолок TIMER1
Измерить опытным путём у ДАНОГО ЭКЗЕМПЛЯРА или посмотреть в даташите на ВСЕ экземпляры даной серии.
Кстати... в даташитах на AVR таких данных не видел,а у PIC ЕСТЬ! ИМХО, MCHIP всегда даёт более полную инфу на изделия.

Сообщение от double_dash
Как то nml сказал что одно из достойств PIC'ов
- то что таймер может работать на частотах,
превышающих тактовую частоту Но если 16 МГц - это максимум,то преимущество, прямо скажем, сомнительное
ЧИТАЕМ в даташитах!!
в даташите PIC16F84 указано
Tt0H= минимум 30 НАНОСЕКУНД (верхняя полочка сигнала)
Tt0L= минимум 20 НАНОСЕКУНД (нижняя полочка сигнала)
итого период 50 НАНОСЕКУНД частота 20 МГЦ

в даташите PIC16F628A указано
Tt0H= минимум 10 НАНОСЕКУНД
Tt0L= минимум 10 НАНОСЕКУНД
итого период 20 НАНОСЕКУНД частота 50 МГЦ таймер0

Tt1H= минимум 15 НАНОСЕКУНД
Tt1L= минимум 15 НАНОСЕКУНД
итого период 30 НАНОСЕКУНД частота 33 МГЦ таймер1

УЧИТЕ МАТЧАСТЬ!

А реально у многих экзепляров PIC16F84(A) провереных мною (около 30 шт) частотомер работал до 80-100 МЕГАГЕРЦ, отдельные экземпляры работали до 120-130 МЕГАГЕРЦ (без ИМС делителя частоты на входе).
Реклама:
picavr вне форума  
Непрочитано 13.05.2008, 10:24  
UncleSam
Частый гость
 
Регистрация: 25.08.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
UncleSam на пути к лучшему
По умолчанию

Сообщение от picavr
Кстати... в даташитах на AVR таких данных не видел,а у PIC ЕСТЬ! ИМХО, MCHIP всегда даёт более полную инфу на изделия.
У АВРок внешний вход таймера стробируемый, поэтому входной сигнал должен быть ниже рабочей частоты АВР в 2,5 - 3 раза, и на максимальных частотах - меандр.
Так что для частотомеров однозначно - ПИК.
UncleSam вне форума  
Непрочитано 13.05.2008, 11:30  
genial
Вид на жительство
 
Регистрация: 02.02.2006
Сообщений: 472
Сказал спасибо: 2
Сказали Спасибо 12 раз(а) в 10 сообщении(ях)
genial на пути к лучшему
По умолчанию

Перед TMR0 в PICах можно включить предделитель,который и может считать с частотой больше тактовой.Для 675,629 максимальная частота 50 мГц по datasheetу.Реально больше.Для включения прямо на вход счетчика нужна синхронизация внешнего сигнала и тактового,которая происходит за два такта.Поэтому входные импульсы должны иметь длительность высокого и низкого уровня не менее 2Тosc плюс 20нс задержки во внутренних RC цепях.Отсюда максимальная входная частота по полному такту 4Тosc+40нс.Для работы с предделителем (4Тosc+40нс)/K ,где К коэффициент деления предделителя.
genial вне форума  
Непрочитано 14.05.2008, 01:23  
double_dash
Прописка
 
Аватар для double_dash
 
Регистрация: 15.10.2006
Сообщений: 130
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
double_dash на пути к лучшему
По умолчанию

может у кого есть время
взгЯните на мою программу?
А то собрал -
вообще погоду кажет
Нет, определенная пропорциональность
конечно есть,
но ошибка уж ОЧЕНЬ большая.

Главным образом
хотелось бы узнать -
возможен ли вообще такой алгоритм?
А заключается он вот в чем:
включаем TMR1,
и с этого времени засекаем 10 мс (предполагается
деление входной частоты на 10),
за это время считаем сколько раз переполнится
16-битный TMR1H:TMR1L,
как только время закончится -
сразу же вырубаем счетчик:
количество импульсов поступивших за это время получаем как
(количество переполнений)*0x10000 + (остатки в TMR1H:TMR1L)
Вот такая вот штука.

Код:
///// PIC16F877A ///////////
////// кварц 10 МГц ////////


#include ‹pic.h›
#include ‹conio.h›

#include "lcd.h"
#include "delay.h"


static  unsigned char Overflow; 

static  unsigned char Tmp; 	
static  unsigned char Tmp2; 
static  unsigned char Tmp3; 

static unsigned long FreqRes; 

static unsigned int Buf;

unsigned char FreqBCD[6];

unsigned char i;	 
unsigned char j;


//---------------------------
__CONFIG(XT & WDTDIS & PWRTEN &  BORDIS & LVPDIS & DUNPROT & DEBUGDIS & UNPROTECT);

void _24BinToBCD(void) ;
void BCDtoStr(unsigned char *bcd); 
void output_str(unsigned char *bcd);
void init_ports(void); 
void counter(void);

void counter(void)
  {  
   FreqBCD[0]= 0;
   FreqBCD[1]= 0;
   FreqBCD[2]= 0;
   FreqBCD[3]= 0;
   FreqBCD[4]= 0;
   FreqBCD[5]= 0;
  
  TMR1CS = 1;	// стробирование по внешнему сигналу
  				// входной сигнал и есть строб!
  				// подключен к T1OSO
  
  FreqRes = 0; 
  Overflow = 0;
  Buf = 0;
  
  TMR1L = 0;
  TMR1H = 0;
  
  Tmp = 0;
  Tmp2 = 0;
  
 
  	#asm
   	PIR1	equ	0x0C
 	T1CON	equ	0x10
 	TMR1L	equ	0x0E
	TMR1H	equ	0x0F
	
	bsf T1CON,0		// TMR1ON = 1
					// включили таймер


tmr1_loop:		 	// основной цикл (9982 мкс)
  					//     
   	nop				// 0.4
   	nop				// 0.4
   	nop				// 0.4
   	movlw 50		// 0.4
  	movwf _Tmp  	// 0.4
loop1:  			// } 1.2 + 3.6*(55)

	nop				// 0.4
	nop				// 0.4
   	movlw 55		// 0.4
  	movwf _Tmp2		// 0.4

loop2:				// }3.6
	btfss PIR1,0	// 0.8		// if(TMR1IF==1)
	goto label1
	incf _Overflow	// 0.4
	bcf PIR1,0		// 0.4
	goto label2		// 0.8
label1:
	nop
	nop
	nop
label2: 
	decfsz _Tmp2, f	// 0.8
	goto loop2	
	nop				// 0.4
		
  	decfsz _Tmp, f	// 0.8
	goto loop1	 	
  	nop				// 0.4
  	
  					//  дополнительная задержка 14 мкс
    nop				// 0.4
   	nop				// 0.4
   	nop				// 0.4
   	movlw 55		// 0.4
  	movwf _Tmp		// 0.4	
loop3:  
  	decfsz _Tmp, f	// 0.8
	goto loop3	 	
  	nop				// 0.4
  					
  					// } и еще 4 мкс
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	bcf T1CON,0		// 0.4 (т.к. запись в регистр - в последнем такте)
  					// TMR1ON = 0	 
  					// выключили TMR1		
  	#endasm
  	

	///это все вроде работает/////
  					
  					// подсчет 
  					// FreqRes = Overflow*0x10000 + TMR1H:TMR1L
    Buf = TMR1H;
    Buf = Buf ‹‹ 8;
 	Buf = Buf | TMR1L;
   	FreqRes = Overflow;  
   	FreqRes = FreqRes ‹‹ 16;  //FreqRes = Overflow*0x10000; 
	FreqRes = FreqRes + Buf;

  	_24BinToBCD(); 	// преобразование в BCD
 
 	 BCDtoStr(FreqBCD); // преобразование в строку
  	 output_str(FreqBCD); // вывод на ЖКИ
  
  	DelayMs(50);
  }

main()
 {

  init_ports();    
  lcd_init();

  for(;;)
   {
    counter();
    }
 
  }
double_dash вне форума  
Непрочитано 14.05.2008, 10:49  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Мне абсолютно непонятны Ваши телодвижения в плане
// FreqRes = Overflow*0x10000 + TMR1H:TMR1L
Переполнение наступает при поступлении 65536 импульсов на 1 таймер, причем здесь 10000?
Вы уверены, что простого сдвига на 16 разрядов достаточно, чтобы правильно записать в лонг ?
По-моему, там совсем другой формат. Или нет ?
Код:
typedef union
{
unsigned int Buf; // 	
struct {
       unsigned char lo; //младший байт 
       unsigned char hi; // старший байт 
    }Bufb;
}Buf_;
Buf_ Buf;
//------------------------------------------
 /*   Buf = TMR1H;
    Buf = Buf ‹‹ 8;
   Buf = Buf | TMR1L;
      FreqRes = Overflow; 
      FreqRes = FreqRes ‹‹ 16;  //FreqRes = Overflow*0x10000;
   FreqRes = FreqRes + Buf; */
Buf.Bufb.lo=TMR1L;
Buf.Bufb.hi=TMR1H;
FreqRes=Overflow*65536+Buf.Buf;
И зачем эти ассемблерные вставки ... Прекрасно можно обойтись и без них.
urry вне форума  
Непрочитано 14.05.2008, 11:00  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от UncleSam
Сообщение от picavr
Кстати... в даташитах на AVR таких данных не видел,а у PIC ЕСТЬ! ИМХО, MCHIP всегда даёт более полную инфу на изделия.
У АВРок внешний вход таймера стробируемый, поэтому входной сигнал должен быть ниже рабочей частоты АВР в 2,5 - 3 раза, и на максимальных частотах - меандр.
Так что для частотомеров однозначно - ПИК.
А об этом где то сказано? что в 2,5-3 раза меньше? от фонаря что ли указали... или есть точные цифры?
picavr вне форума  
Непрочитано 14.05.2008, 11:03  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от urry
Мне абсолютно непонятны Ваши телодвижения в плане
// FreqRes = Overflow*0x10000 + TMR1H:TMR1L
Переполнение наступает при поступлении 65536 импульсов на 1 таймер, причем здесь 10000?
.
Юра, 0x10000 (шестнадчатиричное) = 65536( десятичное) !!!
picavr вне форума  
Непрочитано 14.05.2008, 11:09  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

urry вне форума  
Непрочитано 14.05.2008, 11:10  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от double_dash
Код:
  					// } и еще 4 мкс
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	nop				// 0.4
  	bcf T1CON,0		// 0.4 (т.к. запись в регистр - в последнем такте)		// TMR1ON = 0 
  					// выключили TMR1		
  	#endasm
ИМХО. после выключения проверь ещё раз флаг переполнения таймера и инкремент счётчика, а вдруг за последние 4 МКС он ещё раз переполнился?

И ещё, проверял? что бы проходы по всем веткам занимают ОДИНАКОВОЕ ВРЕМЯ? при отсчёте времени 10 мсек?
picavr вне форума  
Непрочитано 14.05.2008, 11:15  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от urry
И зачем эти ассемблерные вставки ... Прекрасно можно обойтись и без них.
А моно вопрос? так как время измерения в данной програме отсчитывается прохождением циклов проверки переполнения и отсчётом счётчика или пустых проходов. А как в этом плане на Си, время проходов по веткам1 ветка -ест переполнение инкрементируем счётчик, 2 ветка -нет переполнения пропускаем) будут одинаковы?
picavr вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно сделать сварочный инвертор самому? suvuyEL Источники питания и свет 20 15.01.2012 00:19
Импульсный сварочник как изготовить самому? DSerge Источники питания и свет 3 20.10.2008 14:18
[Решено] А можно ли самому сделать свой радиолюбительский сотовый? Don_Ambrosio Отвлекитесь, эмбеддеры! 189 20.05.2008 17:54
[Решено] Выгодно ли сделать Ик-порт самому Роман Козак Делимся опытом 10 24.11.2005 14:03
[Решено] мне бы схемку.... Андрей Автоматика и аппаратура связи 2 21.12.2003 21:00


Часовой пояс GMT +4, время: 11:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot