Commit e32e27e2 authored by Michal Rybka's avatar Michal Rybka

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

(Autoexportován z Joomly)
parent 89826741
+++
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment