Skip to content
Snippets Groups Projects
Commit e32e27e2 authored by Michal Rybka's avatar Michal Rybka
Browse files

Přidán článek Teploměr s ATmega8

(Autoexportován z Joomly)
parent 89826741
No related branches found
No related tags found
No related merge requests found
+++
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.
.
.
![](/upload/ok1wmr/clanky/teplomer/01.jpg)Schéma:
![schema](/upload/ok1wmr/clanky/teplomer/sch.png).
Plošný spoj:
![pcb](/upload/ok1wmr/clanky/teplomer/pcb.png).
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:`
![](/upload/ok1wmr/clanky/teplomer/02.jpg)
![](/upload/ok1wmr/clanky/teplomer/03.jpg)
![](/upload/ok1wmr/clanky/teplomer/04.jpg)
* * *
.....[http://krouzek.radioklub.cz](http://krouzek.radioklub.cz/)
........
* * *
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment