Перейти к содержанию

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


Рекомендуемые сообщения

Работа устройства заключается в следующем. С выхода тактового генератора (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Б при этом напротив уменьшается, выполняя важную стабилизирующую функцию.

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

  • 4 года спустя...

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Здравствуйте уважаемые форумчане! Во общем осуществляется передача данных по 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; // запись и вывод влаги(код работает с глюками)


};

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

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

Изменено пользователем Павел Царь
Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

// что бы на верника передалось))
500 раз ? :crazy:

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

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

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Изменено пользователем RGB-V
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...