Четверг, 21.11.2024, 22:54
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

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

Code

#include <mega8.h>
#include <delay.h>
#asm
.equ __lcd_port=0x18
#endasm
#include <lcd.h>

typedef unsigned char byte;

byte b=0,c=0,e=0,t=0;

void pd1(byte v,byte o) { //Резисторы на 270 Ом
PORTD.2=(v>>2)&1;
PORTD.1=(v>>1)&1;
PORTD.0=v&1;
DDRD.2=(o>>2)&1;
DDRD.1=(o>>1)&1;
DDRD.0=o&1;
}

void pd2(byte v,byte o) { //Резисторы на 10 КОм
PORTD.5=(v>>2)&1;
PORTD.4=(v>>1)&1;
PORTD.3=v&1;
DDRD.5=(o>>2)&1;
DDRD.4=(o>>1)&1;
DDRD.3=o&1;
}

void pd3(byte v,byte o) { //Резисторы на 100КОм
PORTC.2=(v>>2)&1;
PORTC.1=(v>>1)&1;
PORTC.0=v&1;
DDRC.2=(o>>2)&1;
DDRC.1=(o>>1)&1;
DDRC.0=o&1;
}

void pnp_b() { //Поиск базы ПНП транзистора
byte p=0;
pd3(0,0);
pd2(0,7);
pd1(3,3);
if (PIND.2!=0) {
b=3;
p++;
}
pd1(5,5);
if (PIND.1!=0) {
b=2;
p++;
}
pd1(6,6);
if (PIND.0!=0) {
b=1;
p++;
}
if (p>1) b=0;
}

void pnp_ce() { //Поиск коллектора и эммитора ПНП транзистора
switch (b) {
case 1:
pd3(0,1);
pd1(4,4);
pd2(0,2);
if (PINC.1!=0) e=3; else c=3;
pd1(2,2);
pd2(0,4);  
if (PINC.2!=0) e=2; else c=2;  
break;
case 2:  
pd3(0,2);
pd1(4,4);
pd2(0,1);
if (PINC.0!=0) e=3; else c=3;
pd1(1,1);
pd2(0,4);  
if (PINC.2!=0) e=1; else c=1;
break;
case 3:  
pd3(0,4);
pd1(2,2);
pd2(0,1);
if (PINC.0!=0) e=2; else c=2;
pd1(1,1);
pd2(0,2);  
if (PINC.1!=0) e=1; else c=1;  
}
}

void npn_b() { //Поиск базы НПН транзистора
byte n=0;
pd3(0,0);
pd2(0,7);
pd1(3,3);
if (PIND.2==0) {
b=3;
n++;
}
pd1(5,5);
if (PIND.1==0) {
b=2;
n++;
}
pd1(6,6);
if (PIND.0==0) {
b=1;
n++;
}
if (n>1) b=0;
}

void npn_ce() { //Поиск коллектора и эммитора НПН транзистора
switch (b) {
case 1:
pd3(1,1);
pd1(0,4);
pd2(2,2);
if (PINC.1==0) e=3; else c=3;
pd1(0,2);
pd2(4,4);  
if (PINC.2==0) e=2; else c=2;  
break;
case 2:  
pd3(2,2);
pd1(0,4);
pd2(1,1);
if (PINC.0==0) e=3; else c=3;
pd1(0,1);
pd2(4,4);  
if (PINC.2==0) e=1; else c=1;
break;
case 3:  
pd3(4,4);
pd1(0,2);
pd2(1,1);
if (PINC.0==0) e=2; else c=2;
pd1(0,1);
pd2(2,2);  
if (PINC.1==0) e=1; else c=1;  
}
}

void t_test() { //Тест транзистора
byte tmp;
t=0;
b=0;
c=0;
e=0;
pnp_b(); //Ищем базу ПНП
if (b==0) { //Если не нашли базу
t=1;
npn_b(); //Ищем базу НПН
}
if (b==0) return; //Не нашли ни чего
if (t==0) pnp_ce(); else npn_ce(); //Ищем все остальное
//Производим проверку найденных выводов
tmp=c+e;
if (tmp>3) {
if (c>e) tmp=c-e; else tmp=e-c;
}
if (tmp!=b) b=0;
pd1(0,0);
pd2(0,0);
pd3(0,0);
}

void lcd_xn(byte x) {
lcd_putchar('X');
lcd_putchar(x+48);
}  

void lcd_show() {
lcd_clear();
lcd_putsf("TRANZ - ");
if (b!=0) {

if (t==0) lcd_putsf("PNP"); else lcd_putsf("NPN");
lcd_gotoxy(0,1);

lcd_putsf("E-");
lcd_xn(e);
lcd_putsf(" B-");
lcd_xn(b);
lcd_putsf(" C-");
lcd_xn(c);

}else{
lcd_putsf("ERROR");
}
}

void main(void) {

PORTB=0;
DDRB=0;
PORTC=0;
DDRC=0;
PORTD=0;
DDRD=0;

ACSR=0x80;

lcd_init(16);

while (1) {
t_test(); //Тестируем транзистор
lcd_show(); //Отображаем результат
delay_ms(200);
}

}
Категория: Учимся работать с AVR | Добавил: HiSER (13.05.2010) | Автор: Литвин Артём
Просмотров: 13712 | Комментарии: 13 | Теги: ATmega8, транзистор, тест, цоколевка | Рейтинг: 4.5/2 |
Всего комментариев: 13
13 Илья  
0
А я еще дипломную работу делаю по этой теме!))) Я думал что я один такой ЧАЙНИК!?!?!?!?

11 kitekat  
0
Есть такой немецкий товарищ Marcus - он сделал универсальный определитель элементов на AtMega8 (Transistometer). Проект открытый, поищите в сети. Меряет диоды, транзисторы биполярные и полевые, тиристоры, резисторы и конденсаторы.

12 HiSER  
0
Что значит поищите? Этот проект - пример, не более.

9 KronX  
0
Подобную бы схему, но без LCD, семи сегментной индикацией например.... было бы супер

10 HiSER  
0
В чем проблема изменить исходник?

7 alexnirt12  
0
лохи все , где определение ?

8 HiSER  
0
школота за словами следи!

4 linerx  
0
А как определить цоколевку транзисторов большой мощности, например КТ 805, 815, 817?

5 HiSER  
0
так же

6 linerx  
0
прибор работает только с транзисторами малой и средней мощности. У КТ 805, 815, 817 выводы не определяет. А номиналы резисторов 100К и 10К как расчитывались? Может стоит их уменьшить?

2 Upgrader  
0
А оно еще не проверяет за одно транзистор, на исправность? Что будет при неисправном транзисторе?

3 HiSER  
0
Если транзистор не исправен, соответственно выдаст ошибку...

1 zoompc73  
0
собрал все супер..
вот еслиб еще полевики тестил..

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Как вам материалы на сайте
Всего ответов: 864
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz