• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
zemlik

Помогите С Алгоритмом!

7 сообщений в этой теме

zemlik    0

Работа устройства заключается в следующем. С выхода тактового генератора (DD1.1, DD1.2) импульсная последовательность с частотой около 2 кГц поступает на формирователь птлообразного напряжения (VT1, C3) и двоичные счетчики DD2.1 и DD2.2. На первом счетчике собран формирователь ступенчатого напряжения, возникающего на выходе цифро-аналогового преобразователя на резисторах R5 и R6. Второй счетчик управляет дешифратором DD3, выполняющим функции коммутатора команд. Такое решение позволяет разнести во времени процессы построения на экране вспомогательных элементов изображения и собственно характеристик транзистора. В течение трех первых тактов работы дешифратора единичные сигналы с его выходов, объединенных по схеме "ИЛИ", обнуляют счетчик DD2.1, что обеспечивает нулевой уровень на выходе исследуемого транзистора VTи (обведен пунктиром). Одновремен но в первом такте происходит формирование пилообразного напряжения, которое после эмиттерного повторителя VT3 поступает на вход "х" осциллографа для формирования оси абсцисс. Во втором такте сигналом с выхода 14 элемента DD3 открывается трбнзистор VT2, блокирующий развертку по оси "Х", и запускается генератор оси ординат (VT5, VT6).

В третьем такте сохраняется закрытое состояние транзистора VTи и запускается формиро-ватель падающего пилообразного напряжения (VT7...VT10), имитирующего на экране нагру-зочную прямую. Одновременно с этим происходит запуск генератора рабочей точки (DD4.1...DD4.3),положение которой на нагрузочной прямой задается потенциометром R25.

Интегрирующая цепочка R26,C__ совместно с транзистором VT__ управляет изменением положения рабочей точки под действием внешней температуры.

Питание логической части схемы осуществляется напряжением стабилитрона VD3. Диод VD2 служит для развязки цепей питания.

Для демонстрации температурного эффекта в лекционной аудитории целесообразно вначале включить прибор без транзистора VTи и перевести переключатель SA1 в положение "1". При этом на экране отобразят ся только координатные оси. Затем в разъемную панель на видном месте прибора устанавливается транзистор VTи, что сопровождается формированием на экране семейства его выходных статических характеристик

Потенциометрами R__ и R__ устанавливается, соответственно, необходимый наклон нагрузочной прямой и положение на ней рабочей точки.

После этого к корпусу транзистора приближают прогретый паяльник и наблюдают за перемещением вверх, практически за пределы экрана, всех характеристик. При этом рабочая точка также смещается вверх по нагрузочной прямой до максимально возможного для нее по-ложения - точки пересечения нагрузочной прямой с подъемным участком выходных характе-ристик. Этот пример убедительно показывает, что под действием температуры биполярный транзистор, находящийся в исходном состоянии в режиме линейного усиления (рабочая точка находится примерно в средней части нагрузочной прямой), переходит в режим одностороннего ограничения, т.е. в область больших нелинейных искажений. На вопрос к аудитории о причинах таких изменений чаще звучит очевидный, на первый взгляд, ответ, что транзистор открывается (его ток Iк растет) т.к. возрастает ток базы. Такое суждение базируется на ассоциации с внешним видом выходных характеристик, где каждому большему значению тока базы соответствует более высоко расположенная кривая. Кроме того интуитивно это вытекает из следующей функциональной зависимости:

IК = IБ + ( + 1) IКБО (1)

где  – статический коэффициент усиления транзистора по току;

IБ – ток базы;

IКБО – обратный (тепловой) ток коллекторно-базового перехода, причем Iкбо << Iб.

Чтобы оценить справедливость таких доводов переключателем SA1 исследуемый тран-зистор VTи отключают от генератора ступенчатого напряжения. При этом на экране осциллографа формируется единичная выходная характеристика, положение которой задается потенциометром R___ а соответствующее ей значение тока базы индицируется микроамперметром ____. Если теперь повторить процедуру нагрева транзистора, то, как и прежде, характеристика плавно уйдет за верхний край экрана, но показания прибора ... не изменятся ! Этот неожиданный факт опровергает наше предположение о роли тока базы и теперь из формулы (1) мы делаем совершенно другие выводы. Оказывается, в изменение свойств транзистора под действием температуры, основной вклад вносит не прямой ток базы IБ, а микроскопический, при комнат ной температуре, обратный ток коллектора IКБО. И борьбе с этим "вредным" током посвящен целый раздел электроники. Воистину лучше один раз увидеть, чем 100 раз услышать! Предложенная конструкция при небольшой доработке может показать и эффект противодействия рассмотренному явлению. Для этого нужно дополнить ее простейшим каналом измерения температуры корпуса транзистора и ввести отключаемую отрицательную обратную связь (ООС) по постоянной составляющей тока коллектора. Теперь все демонстрации можно проводить в контролируемом диапазоне изменения температур корпуса транзистора и объективно сравнивать различные физические процессы. Можно будет показать, что с введением ООС выходная характеристика транзистора почти не смещается вверх с ростом его температуры (т.е. ток коллектора IК сохраняет постоянство), а ток базы IБ при этом напротив уменьшается, выполняя важную стабилизирующую функцию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
alend    655

до конца не дочитал!без комментариев!

:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
zemlik    0

Если скину схему??

Изменено пользователем zemlik

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте уважаемые форумчане! Во общем осуществляется передача данных по uart посредством RF модулей 433MHz c меги328р на мегу8. И собственно проблема, как реализовать адресную запись данных по приему. С передатчика я передаю id=45(некий адрес идентификации что сейчас будет передаваться влажность) потом данные о влажности. и id=103 (некий адрес идентификации что сейчас будет передаваться температура) потом данные температуры на приемник, и как разделить что бы влажность в одну переменную и соответственно температура в другую записывать. Не получается по этим id записывать по своим местам, данные все равно путаются и даже само значение id попадает в "полезные" переменные.

привожу свой код передатчика на мега328р и DHT11

// ==============/////////==================////////=======================///////////////////////////////////
void otprav(char data) { // ФУНКЦИЯ передачи данных
int p;

///////////////////////////

for (p=0;p<500;p++) { // что бы на верника передалось))

putchar(data);
delay_ms(2);
};


///////////////////////////

};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define DHT_DDR DDRC.3
#define DHT_OUT PORTC.3
#define DHT_IN PINC.3
unsigned char data[5];


char GetHumidity() // считывание данных с датчика DHT11
{
unsigned char n, k, idx;
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
DHT_OUT = 0;
delay_ms(18);
DHT_OUT = 1;
DHT_DDR = 0;
delay_us(50);
if(DHT_IN != 0)
{
 return 1;
}
while(DHT_IN == 0)
{
 //может зависнуть - добавить код
}
while(DHT_IN != 0)
{
 //может зависнуть - добавить код
}
for(n = 0; n < 5; n++)
{
 idx = 0x80;
 for(k = 0; k < 8; k++)
 {
	 while(DHT_IN == 0)
	 {
//может зависнуть - добавить код
	 }
	 delay_us(33);
	 if(DHT_IN != 0) data[n] |= idx;
	 idx >>= 1;
	 while(DHT_IN != 0)
	 {
//может зависнуть - добавить код
	 }
 }
}
return 0;
}
void main(void)
{

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTB=0x00;
DDRB=0b00100000;
PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x48;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;
// Global enable interrupts
#asm("sei")
while (1)
 {



 DHT_DDR = 1;
 DHT_OUT = 1;
 delay_ms(25);

 GetHumidity();

	 otprav(45);// id начала приема данных влажности
	 otprav(data[0]); //% данные влажности otprav(data[0]);

 /////////////////////////////////////////////////////////////////////////////////////////
	 delay_ms(25);

				 otprav(103);// id начала приема данных t*C
	 otprav(data[2]); // t*C

 }
}

И приемная часть:

собственно функция фильтра от помех и выделения полезных данных

void priem(void) { // функция для выделения данных из пришедшого и полезных -
// данных мусора по рф модулям с приемника

		 if(bufer [1] == bufer [2]) { //если данные ровняются пришедшим данным 150 раз, -
		 // то мы их принимаем и сщитаем ПОЛЕЗНЫМ

					 i++; //инкремент количество ИСТИНЫ, тоесть совпадений

				 bufer [2] = getchar(); // каждое новое пришедшое данное сравнивается -
				 //самим с соболй 150 раз
					 }

		 else { // если данные были 100 раз не ровняющимися(ошибкой) -
		 bufer [2] = getchar(); // то записуем еще раз новое пришедшое данное для сравнения

			 of++;	 // инкремент количества ошибок
		 };
if(of>=10) bufer [1]=getchar(), of=0; // если буфер ошибок переполняется ,-
//то записуем новое данное в буфер -
// сравнения и обнуляем буфер ошибок

if(i>=15) {


t=bufer [1];

bufer [1]=getchar(), i=0; // если буфер ИСТИНЫ переполняется, -
//то это полезное данное -
// и мы его записуем в переменную " t "пришедших данных, и снова записуем новое значение в буфер -
// сравнения и обнуляем буфер ИСТИНЫ
};

if(bufer [1]==45) { // сам id
g++;
if(g>2) g=0;


};
if(g==2) vlaga=getchar(), g=0; // запись и вывод влаги(код работает с глюками)


};

Данные фильтруются четко, а вот с адресацией не получается.

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

Изменено пользователем Павел Царь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    524
// что бы на верника передалось))
500 раз ? :crazy:

Ещё бы у Вас ничего не путалось. Вы передаёте 500 раз id, а затем 500 раз данные. Как приёмник будет их отличать ?

Да и зачем вообще id тут нужен ? Передавайте просто 2 байта подряд - влажность и температуру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
RGB-V    10

Передайте число старт байт (пусть id) один раз, если получится то, чтоб число старт байта не лежало в пределах чисел данных. Или сделать его не 1 байт, а 2. После него последовательно передавайте температуру и влажность. В примнике первую посылку сохраняем и принимаем ещё раз, если совпали отправляем данные в работу. Если старт байт не принят делайте сброс в приёмной части, так приёмник найдёт начало посылки.

Изменено пользователем RGB-V

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас