diff --git a/articles/2012/teplomer-s-atmega8.md b/articles/2012/teplomer-s-atmega8.md new file mode 100644 index 0000000000000000000000000000000000000000..be6a1972503037c1c9b9c98833ead19aee4eac7c --- /dev/null +++ b/articles/2012/teplomer-s-atmega8.md @@ -0,0 +1,47 @@ ++++ + +title = "TeplomÄ›r s ATmega8" +perex_e = "Dalšà jednoduchĂ© zapojenĂ urÄŤenĂ© pro náš krouĹľek mládeĹľe, tentokrát jednoduchĂ©ho teplomÄ›ru s ATmega8 a ÄŤidlem teploty DS18B20. Najdete zde kompletnĂ popis programu a zapojenĂ vÄŤetnÄ› plošnĂ©ho spoje. +. +. +" +tags = ["ÄŚlánek"] ++++ + +Dalšà jednoduchĂ© zapojenĂ urÄŤenĂ© pro náš krouĹľek mládeĹľe, tentokrát jednoduchĂ©ho teplomÄ›ru s ATmega8 a ÄŤidlem teploty DS18B20. Najdete zde kompletnĂ popis programu a zapojenĂ vÄŤetnÄ› plošnĂ©ho spoje. +. +. + +SchĂ©ma: +. +PlošnĂ˝ spoj: +. +PDF verze: [schĂ©ma](../upload/ok1wmr/clanky/teplomer/teplomer_sch.pdf), [plošnĂ˝ spoj 1:1](../upload/ok1wmr/clanky/teplomer/teplomer_pcb.pdf), [osazovacĂ plán](../upload/ok1wmr/clanky/teplomer/teplomer_osaz.pdf)Eagle 6.1: [SCH](../upload/ok1wmr/clanky/teplomer/teplomer.sch) a [BRD](../upload/ok1wmr/clanky/teplomer/teplomer.brd) + doporuÄŤená [Pájovo](http://paja-trb.cz/eagle/index.html) knihovna součástek [#PaJa_22.lbr](http://www.blueboard.cz/dcounter.php?hid=kf0fps2uf0jmsfkjvh7s81ubvbeu3r&down=true&url=http://paja-trb.cz/eagle/paja_lbr_506.zip).Komplet zdrojáky: [teplomer.zip](../upload/ok1-36134/doc/teplomer/teplomer.zip) +Deska byla vyrobena [metodou naĹľehlenĂm tonneru. +](index.php/technicke-lanky/425-vyroba-plonych-spoj) + +* * * + +Program:Untitled <!-- body { color: #000000; background-color: #FFFFFF; } .cpp1-assembler { } .cpp1-brackets { } .cpp1-comment { color: #008000; font-style: italic; } .cpp1-float { color: #000080; } .cpp1-hexadecimal { color: #000080; } .cpp1-character { } .cpp1-identifier { } .cpp1-illegalchar { } .cpp1-number { color: #000080; } .cpp1-octal { color: #0000FF; } .cpp1-preprocessor { } .cpp1-reservedword { font-weight: bold; } .cpp1-space { color: #008080; } .cpp1-string { color: #800000; } .cpp1-symbol { } --> + +``` +#define F_CPU   8000000      //8MHz#include #include #include "wait.c"#include "ds18b20_1.c" //definice pinu pro ÄŤidlo #define OW_PORT      PORTB#define OW_DDR      DDRB#define OW_PIN      PINB#define OW_BIT      2   #define _s_A 2#define _s_B 0#define _s_C 6#define _s_D 4#define _s_E 3 #define _s_F 1#define _s_G 7#define _s_dot 5const unsigned char segs[] = //ÄŤĂslice{_BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F),   //0_BV(_s_B) | _BV(_s_C),   //1 _BV(_s_A) | _BV(_s_B) | _BV(_s_D) | _BV(_s_E) | _BV(_s_G),   //2_BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_G), //3_BV(_s_B) | _BV(_s_C) | _BV(_s_F) | _BV(_s_G),   //4_BV(_s_A) | _BV(_s_C) | _BV(_s_D) | _BV(_s_F) | _BV(_s_G), //5 _BV(_s_A) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G), //6_BV(_s_A) | _BV(_s_B) | _BV(_s_C), //7_BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G),//8_BV(_s_A) | _BV(_s_B) | _BV(_s_C) | _BV(_s_F) | _BV(_s_G),//9 _BV(_s_G) //mĂnus   };const unsigned char err[] = //chyba{0, //mezera_BV(_s_A) | _BV(_s_D) | _BV(_s_E) | _BV(_s_F) | _BV(_s_G), //E_BV(_s_E) | _BV(_s_G), //r_BV(_s_E) | _BV(_s_G) //r};volatile int temp; //teplota  ISR(TIMER1_COMPA_vect){static int temp_1=0;static unsigned char disp=0;unsigned char dec;disp++;      if(disp>3)   disp=0;         //cyklicky 0 - 4 (sedmisegmentovka)PORTD=0xff;   //vypnout segmentyPORTC=0b00100000>>disp;   //pĹ™epnout na danou sedmisegmentovkuif (temp==0x5fff)   //pokud je chyba ÄŤidla   {   PORTD=(~err[disp]);   //vypsánĂ znaku chyby    }else //pokud nenĂ chyba ÄŤidla   {   switch(disp)      {      case 0://1.cifra - znamĂ©nko         if (temp>>15) //pokud je nejvyššà bit 1 (zápornĂ©)            {            temp_1=temp*(-1);   //pĹ™evedenĂ zápornĂ© teploty             PORTD=(~segs[10]);   //zobrazenĂ mĂnus            }         else            temp_1=temp/16;      //pĹ™evedenĂ kladnĂ© teploty         break;      case 1://2.cifra - desĂtky          dec = temp_1 / 10;                      if(dec>0)            PORTD=(~segs[dec]);//zobrazit desĂtky      break;      case 2://3.cifra - jednotky         PORTD=(~segs[temp_1 % 10]) & ~_BV(_s_dot); //zobrazit jednotky a teÄŤku       break;      case 3://4.cifra - desetiny         PORTD = (~segs[((temp % 16)*625)/1000]); //zobrazit desetiny      break;      }//switch(disp)     }//else (temp==0x5fff)}//ISR(TIMER1_COMPA_vect)int main(void){DDRD = 0xFF; //vĂ˝stupy - segmentyDDRC = 0x3F; //vĂ˝stupy - displeje   setb(TCCR1B,0);setb(TCCR1B,1);//start ÄŤĂtaÄŤ 1 s pĹ™eddÄ›liÄŤem 64setb(TCCR1B,3);//CTC modeOCR1AH=0x01;//    porovnávacĂ registry OCR1AL=0x39;// 0x0139 = 313 = 8 000 000 / 64 / (100 * 4) (=> 100 Hz)setb(TIMSK,4); //PovolenĂ pĹ™erušenĂ od ÄŤasovaÄŤe 1setb(SREG,7); //globálnĂ povolenĂ pĹ™erušenĂwhile(1)   {    temp=gettemp();//pĹ™eÄŤtenĂ teploty z ÄŤidla     //wait_ms(200);   }} + +``` + +* * * + +`Fotky:` + + + + + + + +* * * + +.....[http://krouzek.radioklub.cz](http://krouzek.radioklub.cz/) +........ + +* * * \ No newline at end of file