Список разработок админа: генераторы сигналов, счетчики частоты, осциллограф, любые модификации термометров, инкубатор, дозатор сырья, блок обработки и передачи информации на компьютер, станок для заточки пил, кожемер, универсальный дешифратор для токарного станка, кодовый замок, 1 проводная клавиатура, мультиметр и информационный блок для автомобиля. Все это вы можете заказать у нас или выслать нам свою идею для реализации. _____________________________________________________________
Термометр на atmega8 со множеством датчиков, два дисплея выводят температуру датчиков и их порядковый номер
Chip type : ATmega8 Program type : Application Clock frequency : 4,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/
#include #asm .equ __w1_port=0x12 ;PORTD .equ __w1_bit=6 #endasm #include <1wire.h> //бібліотека для роботи з 1wire #include //бібліотека для роботи з ds18b20 #include //бібліотека пауз #define digit1 PORTD.4 //живлення 1 індикатора #define digit2 PORTD.5 //живлення 2 індикатора #define digit3 PORTD.7 //живлення 3 індикатора #define digit4 PORTD.0 #define digit5 PORTD.1 #define MAX_DS18b20 12
Chip type : ATmega8 Program type : Application Clock frequency : 4,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/
signed int temperature; //переменная для температуры
signed int big_ctr; // большой счетчик
unsigned char k=90; //аварийная температура unsigned char j; // переменная для циклов, число датчиков unsigned char devices; unsigned char rom_code[MAX_DS18b20][9];
// Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { switch (cur_dig) { case 0:{digit9=0;digit1=1;break;}; case 1:{digit1=0;digit2=1;break;}; case 2:{digit2=0;digit3=1;break;}; case 3:{digit3=0;digit4=1;break;}; case 4:{digit4=0;digit5=1;break;}; case 5:{digit5=0;digit6=1;break;}; case 6:{digit6=0;digit7=1;break;}; case 7:{digit7=0;digit8=1;break;}; case 8:{digit8=0;digit9=1;break;}; } PORTB=digits[digit_out[cur_dig]]; cur_dig++; if (cur_dig==9) cur_dig=0; }
if (temperature<1000) { temp=temperature; i=0; while (temp>=100){ temp=temp-100; i++; }; if(temperature<100)i=11; digit_out[0]=i; i=0; while (temp>=10){ temp=temp-10; i++; }; if(temperature<10)i=11; digit_out[1]=i; digit_out[2]=temp; } else { temp=-temperature/1; i=0; while (temp>=10){ temp=temp-10; i++; }; if(-temperature/1<10)i=11; digit_out[1]=i; digit_out[2]=temp; digit_out[0]=10; } }; //второй индикатор if (j==1){ if (temperature>=k){ PORTD.1=1; } else PORTD.1=0; if (temperature<1000) { temp=temperature; i=0; while (temp>=100){ temp=temp-100; i++; }; if(temperature<100)i=11; digit_out[3]=i; i=0; while (temp>=10){ temp=temp-10; i++; }; if(temperature<10)i=11; digit_out[4]=i; digit_out[5]=temp; } else { temp=-temperature/1; i=0; while (temp>=10){ temp=temp-10; i++; }; if(-temperature/1<10)i=11; digit_out[4]=i; digit_out[5]=temp; digit_out[3]=10; } }; //третий индикатор if (j==2){ if (temperature>=k){ PORTD.4=1; } else PORTD.4=0; if (temperature<1000) { temp=temperature; i=0; while (temp>=100){ temp=temp-100; i++; }; if(temperature<100)i=11; digit_out[6]=i; i=0; while (temp>=10){ temp=temp-10; i++; }; if(temperature<10)i=11; digit_out[7]=i; digit_out[8]=temp; } else { temp=-temperature/1; i=0; while (temp>=10){ temp=temp-10; i++; }; if(-temperature/1<10)i=11; digit_out[7]=i; digit_out[8]=temp; digit_out[6]=10; } }; }
Инкубатор на ATMEGA16 со стабилизацией установленной, усредненной по трем датчикам температурой, выставляемые диапазоны, проверка резервного источника питания, сигнализация и охлаждение по требованию, и авто переворот яиц.
float temperature,jj; //переменная для температуры char pp; // переменная переключения подпрограмм int w=300,w1,w2,rr,k=6,t11,p,t,e,e1; char i,y; int temp,ff1,ff2,ff3,mm;
// Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { e=e+1; e1=e1+1; if (e1==70){e1=0;pp=0;} // время работы меню до сброса if (e==15){e=0;} // секунда if (e==14){t11=t11-1;} // отсчет установленных минут
if (p==1){ if((t11<40)&&(t11>3)){ PORTB.3=1;} if(t11<=2){ t11=t; p=0; PORTB.3=0; } }
}
char digit_out[4],cur_dig;
int big_ctr; // большой счетчик unsigned int Vin,W,yy; // переменная для значения АЦП unsigned char j; // переменная для циклов, число датчиков unsigned char devices; unsigned char rom_code[MAX_DS18b20][9]; // прерывание по переполнению таймера // для вывода значений на индикаторы interrupt [TIM0_OVF] void timer0_ovf_isr(void) { switch (cur_dig) { case 0:{digit4=0;digit1=1;break;}; //включаем цифру 4 case 1:{digit1=0;digit2=1;break;}; //включаем цифру 3 case 2:{digit2=0;digit3=1;break;}; //включаем цифру 2 case 3:{digit3=0;digit4=1;break;}; //включаем цифру 1 } PORTC=digits[digit_out[cur_dig]]; cur_dig++; if (cur_dig==4) cur_dig=0; if ((pp==1)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==3)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==0)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==5)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==6)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==7)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==8)&&(cur_dig==2)){PORTC^=0b01000000;} if ((pp==9)&&(cur_dig==2)){PORTC^=0b01000000;} }
//ищем все подключенные датчики devices=w1_search(0xf0,rom_code);
#asm("sei") //разрешаем прерывания
while (1) { //============================================ while(pp==1){ //цикл опроса кнопок установки // и вывода значения регулируемой температуры if((PIND.0==0)&&(w<400)){ delay_ms(500); w=w+1; e1=0;
//-------------------------------- вывод датчик 3 if (ff3<1000) { rr=ff3; i=0; while (rr>=100){ rr=rr-100; i++; }; if(ff3<100)i=11; digit_out[0]=i; i=0; while (rr>=10){ rr=rr-10; i++; }; if(ff3<10)i=11; digit_out[1]=i; digit_out[2]=rr; digit_out[3]=3; } //-------------------------------------------- }
//===========================================
w1=w-2; //диапазон регулировки установленной температуры w2=w+2; //===================== заносим в переменную значение АЦП Vin =((read_adc(0)*5/102)*5.3);
//----------------------- сигнал по напряжению и температуре if (Vin else if (Vin>c2){PORTA.3=1;} else if (jj>=400){PORTA.3=1;} else if (jj<=350){PORTA.3=1;} else PORTA.3=0; //----------------------- //================================ цикл опроса датчиков big_ctr++;
if (mm<=w1){ //включение нагревателя при достижении //минимума уст. температуры PORTB.4=1; PORTD.6=0; } if (mm>w2){ //выключение нагревателя при достижении //максимума уст. температуры PORTB.4=0; PORTD.6=1; }
jj=temperature;
if (j==0){ff1=temperature;} if (j==1){ff2=temperature;} if (j==2){ff3=temperature;}
mm=((ff1+ff2+ff3)/devices);
if (mm<1000) { temp=mm; i=0; while (temp>=100){ temp=temp-100; i++; }; if(mm<100)i=11; digit_out[0]=i; i=0; while (temp>=10){ temp=temp-10; i++; }; if(mm<10)i=11; digit_out[1]=i; digit_out[2]=temp; digit_out[3]=11; } }