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

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

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

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

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

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

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

 
Опции темы
Непрочитано 18.04.2007, 18:05  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Сообщение от andrey-u
TMR0 даст большую погрешность так как при кварце 20МГц и предделителе 256--получим погрешность до 2мсек
а это уже много
а что мешает поставить меньший пределитель...
я бы прерывания сделал так -
Код:
void interrupt tmr_pb7(void)
{
if(T0IE && T0IF)
	{
	T0IE=0;// запрещаем прерывания
	T0IF=0;
	TMR0=235;
	st++;// увеличиваем значение счетчика
	T0IE=1;
	}// отпускаем прерывание

if(RBIE && RBIF)// произошло прерывание по  пб7
	{
	if (in_bit == 1)// произошло срабатывание по фронту
		{
			GIE=0;// запрещаем прерывания
			T0IF=0;
			st=0; // обнуляем счетчик
			 T0IE=1;// запускаем таймер0
			TMR0=235;// устанавливаем 100 микросекунд
			INTEDG=0;//разрешаем прерывания по спаду импульса
			RBIF=0;// чистим флаг
			GIE=1;// общее разрешение прерывания
		}
if (in_bit == 0)// произошло срабатывание по спаду
		{			
					T0IE=0;
					RBIE=0;
					GIE=0;// запрещаем прерывания
					// в счетчике st - нужное значение
		}
	}
}
эти значения для 4 - мегагерц.
Реклама:
urry вне форума  
Непрочитано 18.04.2007, 18:08  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Сообщение от CERGEI1982
знаю только ассамблер,есть желание перейти на более высокий язык програмирования.
hттp://www.remexpert.com/forum/dload.php?action=file&file_id=324
urry вне форума  
Непрочитано 18.04.2007, 18:14  
andrey-u
Частый гость
 
Регистрация: 27.11.2006
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
andrey-u на пути к лучшему
По умолчанию

Пишу компилятором MicroCode Studio Plus.
Он делает несколько файлов--один из них asm,и hex.
В протеусе выбираешь микроконтроллер потом тыкаешь на него и указываешь частоту кварца и путь к hex файлу.
Есть другие компиляторы простенький CH Basic - Flash Edition V3.7.0--сразу генерит и показывает как это будет в asemblere --тока hex файл негенерит сволочь, а еще есть mikroBasic--сначало мне очень понравился позволяет отлаживать пошагово и показывает сколько при этом проходит времени--но очень непонравился преобразование числа в строку для вывода на экран, зато очень много примеров и хороший help
Могу выложить если заинтересует.

Кстати может ты подскажешь:
если нужно делать прерывание каждые 0,1 мсек через таймер TMR1 используя кварц на 20МГц--в счетчик прописываю начальное значение 65036--правильно???
т.е. получается 65536-65036=500
20МГц /4=5МГц
5МГц /500=10000 -- т.е. 0,1мсек получается
andrey-u вне форума  
Непрочитано 18.04.2007, 18:37  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от urry
Сообщение от CERGEI1982
знаю только ассамблер,есть желание перейти на более высокий язык програмирования.
hттp://www.remexpert.com/forum/dload.php?action=file&file_id=324
еще бы объяснение что это?

MicroCode Studio Plus у меня есть,посидеть поразбиратся надо потихоньку.Буду спрашивать если что не получится
CERGEI1982 вне форума  
Непрочитано 18.04.2007, 18:41  
andrey-u
Частый гость
 
Регистрация: 27.11.2006
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
andrey-u на пути к лучшему
По умолчанию

Цитата:
andrey-u писал(а):

TMR0 даст большую погрешность так как при кварце 20МГц и предделителе 256--получим погрешность до 2мсек
а это уже много


а что мешает поставить меньший пределитель...
я бы прерывания сделал так -
Код:

void interrupt tmr_pb7(void)
{
if(T0IE && T0IF)
{
T0IE=0;// запрещаем прерывания
T0IF=0;
TMR0=235;
st++;// увеличиваем значение счетчика
T0IE=1;
}// отпускаем прерывание

if(RBIE && RBIF)// произошло прерывание по пб7
{
if (in_bit == 1)// произошло срабатывание по фронту
{
GIE=0;// запрещаем прерывания
T0IF=0;
st=0; // обнуляем счетчик
T0IE=1;// запускаем таймер0
TMR0=235;// устанавливаем 100 микросекунд
INTEDG=0;//разрешаем прерывания по спаду импульса
RBIF=0;// чистим флаг
GIE=1;// общее разрешение прерывания
}
if (in_bit == 0)// произошло срабатывание по спаду
{
T0IE=0;
RBIE=0;
GIE=0;// запрещаем прерывания
// в счетчике st - нужное значение
}
}
}



эти значения для 4 - мегагерц.
Это при каком предделителе??
по моим расчете получается предделитель =5--а такого быть неможет
считаем
прерывание каждые 100мксек=0,1мсек
тоесть за одну секунду 10000 прерываний
так как в TMR0 пишешь 235 то получается что на TMR0 приходят импульсы с частотой 10000*20=200КГц
20=255-235
так как на предделитель приходит сигнал с частотой кварца/4 то при обратном пересчете получаем частоту кварца 200КГц*4=800КГц
Так как автор указал частоту кварца 4Мгц--то значит был установлен предделитель
считаем коэффициент предделителя
4МГц/800КГц=5
Насколько я знаю тако предделитель нельзя установить ---значит либо ошибся автор либо ошибаюсь Я--прошу указать мою ошибку
andrey-u вне форума  
Непрочитано 18.04.2007, 18:50  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

65536-65036=500 циклов,при частоте 20 мгц один цикл равен 20/4=5мгц и время одного цикла равно тогда 1/5=200нсек.умножаем на 500*0.2=100мкс=0.1 мс до переполнения таймера и уход в прерывание.
А зачем тебе? если измерять длительность импульса то можно сделать на компараторах.когда будет прерывание от компаратора при фронте включаеш таймер и отсчитываеш(если большое время ,то инкременируеш регистр или два,смотря какая длительность сигнала и предделитель),как только произошел спад компаратор снова выдает прерывание считываеш и преобразуеш в десятично двоичный код и выдаеш на жки.
CERGEI1982 вне форума  
Непрочитано 18.04.2007, 18:58  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от andrey-u
В протеусе выбираешь микроконтроллер потом тыкаешь на него и указываешь частоту кварца и путь к hex файлу.
PROTEUS настоятельно рекомендует чтоб файлы были в папке проекта - proteus123.narod.ru/01.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 18.04.2007, 19:00  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
Сообщение от andrey-u
В протеусе выбираешь микроконтроллер потом тыкаешь на него и указываешь частоту кварца и путь к hex файлу.
PROTEUS настоятельно рекомендует чтоб файлы были в папке проекта - proteus123.narod.ru/01.htm
это само собой
CERGEI1982 вне форума  
Непрочитано 18.04.2007, 19:11  
andrey-u
Частый гость
 
Регистрация: 27.11.2006
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
andrey-u на пути к лучшему
По умолчанию

Цитата:
CERGEI1982 Добавлено: Ср Апр 18, 2007 5:50 pm Заголовок сообщения:

--------------------------------------------------------------------------------

65536-65036=500 циклов,при частоте 20 мгц один цикл равен 20/4=5мгц и время одного цикла равно тогда 1/5=200нсек.умножаем на 500*0.2=100мкс=0.1 мс до переполнения таймера и уход в прерывание.
А зачем тебе? если измерять длительность импульса то можно сделать на компараторах.когда будет прерывание от компаратора при фронте включаеш таймер и отсчитываеш(если большое время ,то инкременируеш регистр или два,смотря какая длительность сигнала и предделитель),как только произошел спад компаратор снова выдает прерывание считываеш и преобразуеш в десятично двоичный код и выдаеш на жки.
Я с тобой полностью согласен и делаю вроде так же--но невыходит при длительности 0,5сек у меня выдает 150 прерываний тоесть 15мсек

И согласись здесь неполучается так
Цитата:
Код:

void interrupt tmr_pb7(void)
{
if(T0IE && T0IF)
{
T0IE=0;// запрещаем прерывания
T0IF=0;
TMR0=235;
st++;// увеличиваем значение счетчика
T0IE=1;
}// отпускаем прерывание

if(RBIE && RBIF)// произошло прерывание по пб7
{
if (in_bit == 1)// произошло срабатывание по фронту
{
GIE=0;// запрещаем прерывания
T0IF=0;
st=0; // обнуляем счетчик
T0IE=1;// запускаем таймер0
TMR0=235;// устанавливаем 100 микросекунд
INTEDG=0;//разрешаем прерывания по спаду импульса
RBIF=0;// чистим флаг
GIE=1;// общее разрешение прерывания
}
if (in_bit == 0)// произошло срабатывание по спаду
{
T0IE=0;
RBIE=0;
GIE=0;// запрещаем прерывания
// в счетчике st - нужное значение
}
}
}



эти значения для 4 - мегагерц.
автор наверно забыл про то что на TMR0 подается Fкварца /4
andrey-u вне форума  
Непрочитано 18.04.2007, 19:52  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Да неужели ?
Забыл сказать, что option =1
Кстати, для 20 мегагерц при этом же пределителе таймер должен быть -134...

-- Прилагается рисунок: --

urry вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC BASIC PRO Compiler 2.47 dosikus Proteus, KiCAD и другие ECAD 27 05.12.2009 05:48
Basic для PIC maxupp Микроконтроллеры, АЦП, память и т.д 2 25.01.2008 20:58
По поводу Basic для PIC maxupp Proteus, KiCAD и другие ECAD 7 24.09.2007 12:06
Помогите s Pic basic Pro 2_47 install BRANCA Proteus, KiCAD и другие ECAD 1 19.03.2007 13:35


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


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