温度測定器の開発

オブジェクト。マイクロコントローラーATmega16。





もの。温度測定





ゴール。接触法による温度測定。





タスク。マイクロコントローラを使用して測定信号を処理し、温度値を7セグメントディスプレイに出力する、接触方式による温度測定。





ソフトウェア:





1.MKAtmelAVR®(Atmel)用のプログラムを開発するためのソフトウェア開発環境AVRStudioまたはAtmelStudio。





2.標準のWindowsアプリケーション-電卓(Microsoft)。





3.電子回路のコンピューター支援設計用のソフトウェアパッケージ-ProteusDesignSuite CADソフトウェア(Labcenterelectronics)。





作業の進捗状況には、このプロジェクトで項目ごとにさらに説明されている推奨事項とアクションの順次実装が含まれます。









コンテンツ





1.はじめに





2.プロジェクトのハードウェア実装





2.1マイクロコントローラーATmega16





2.2温度センサーDS18B20





2.34桁7セグメントディスプレイ





2.4プロジェクトの電子回路のシミュレーション





3.プロジェクトのプログラム実施





3.1AtmelStudio開発環境





3.2プログラム開発





結論





1.はじめに

温度は、原子や分子の熱運動の強さの尺度である物理量です。





温度を測定するための接触方法は、測定対象と測定機器の敏感な要素との間の熱接触で温度を測定する方法です。





- - , , . , . , , , , , .





AVRATmega16.





AVR - Atmel.





AVR , RISC. AVR 32 8- . - 20 , .





Proteus DesignSuite CAD Software (Labcenterelectronics).





2.

AVR ATmega16.





AVR - , Atmel, Microchip.





AVR ( ) , RISC. AVR 32 8- , . «» RISC, .





AVR 90 133 .   1 (16 ). 1 .





. DS18B20. , , , . ; , , . . , - .





4- 7- .





2.1 ATmega16





 ATmega16 - 8- AVR





.





マイクロコントローラーATmega16
ATmega16





:









AVRATmega









AVR









8-і









16





/





32









16 (8k*16)









Flash





EEPROM





512*8





SRAM





1k*8





/





8*10b









I2C, SPI, UART









Brown-outdetect/reset, POR, PWM, WDT









4.5…5.5









-40…+85 ºC





:





RISC





  • 130 ,





  • 32 8-









  • 16 MIPS ( 16 )





  • 2-









  • 1000 / Flash 100000 / EEPROM













  • / (Read-While-Write)





  • ,





    JTAG ( IEEE 1149.1)





  • , JTAG









  • JTAG : Flash, EEPROM ,









  • 16- /









  • PWM ()





  • 8- 10- -





  • 8- / ,





  • 8





  • 7 ( TQFP)





2 1, 10 200 ( TQFP)





  • - 2-





  • USART





  • SPI ( / )





















  • RC-









  • : Idle, Power-save, Power-down, Standby, ExtendedStandby ADC





I / O





  • 32 /





  • 40- PDIP 44- TQFP





マイクロコントローラのピンの説明

VCC -.





GND - .





Port A (PA7..PA0) A / D.





Port A 8- / , A / D .





Port B (PB7..PB0) 8- /   ( ).





Port B ATmega16.





Port C (PC7..PC0) 8- / ( ).





 Port C JTAG ATmega16.





Port D (PD7..PD0) 8- / ( ).





Port D ATmega16.





RESET - . .





XTAL1 - .





XTAL2 - .





AVCC - A A / D . VCC, . , VCC .





AREF- A / D-.





2.2 DS18B20





DS18B20 - , . , DS18B20 - , , ( ), , . , , , .





:





DS18B20センサー
DS18B20

VDD – .





GND – .





DO– .





, , - . , VDD . DS18B20 ATmega16 .





:









3,0…5,5









1,5 ( )





1 ( )









-55…+125 ºC









9…12 і









±0.5 ºC ( -10 +85 ºC)





±2ºC ( -55 +125 ºC)





12-





~750









1-Wire





:





DS18B20
DS18B20

2 3 (VDD DO) 4,7 .





:





  • 1-Wire®





  • 64- ,













  • 9 12





  • .





2.3  





4- 7- LED .





7セグメントインジケータ

- . , . .





, , (), . , . .





A G; - (decimalpoint, DP), .





4- :





4- 7- 12 . A-G , , decimal - , D1-D4 .





:









1,8









20









4









-35…+85 ºC









2.4





ProteusDesignSuiteCADSoftware (Labcenterelectronics).





ProteusDesign - () . LabcenterElectronics ().





, , PSpice. ProteusDesign : , , DSP . Proteus , - «» . . PROTEUS VSM . Proteus , : ISIS - ARES - . .





VSM Studio, , , .





. , .





, ARES 3D- , .





(SPICE) (PICOLO, ARM-, AVR ..).





USBCONN COMPIM, USB- COM- .





ProteusDesignSuiteCADSoftware. Proteus.





. File → NewProject. , , DEFAULT, , Proteus AVR, ATmega16; AVRASM (Proteus) .





, Library → Pickpartsfromlibraries. PickDevices. DEVICES. , .





, , .





. ATMEGA, - ATMEGA16. , , , DEVICES.





DEVICES .





:





· ATMEGA16 – ATmega16





· DS18B20 –





· 7SEG-MPX4-CA –





· RES –





· OSCILLOSCOPE –





.





TerminalsMode, TERMINALS, POWER () GROUND (), .





, , . .





SelectionMode - :





プロジェクトの電子スキーム

Proteus.









3.





  AVR . :





  • WinAVR- Windows, , , .





  • AlgorithmBuilder- AVR.





  • Code :: Blocks – .





  • Avrdude- .





  • AVR-Eclipse- Eclipse, / ++ , , (WinAVR, Atmel AVR Toolchain)





  • AtmelStudio- IDE Atmel





  • ArduinoIDE - Arduino AVR.





AVRStudio AtmelStudio, AtmelAVR® (Atmel).





AtmelStudio :





  • AVR Assembler





  • C / C ++





AVRAssembler.





 





3.1 AtmelStudio





AtmelStudio ( AVRStudio) - VisualStudio (IDE) 8- 32- AVR 32- ARM Atmel, Windows NT / 2000 / XP / Vista / 7/8/10. AtmelStudio GNU C / C ++ , .





AVR Studio, 6.0, 2012 , ​​ ARM, Atmel, AtmelStudio. (AtmelStudio 7) AVR, AVR32 ARM, Atmel.





AtmelStudio , , , C / C ++.





AVRStudio:





  • C / C ++;





  • ;





  • GCC WinAVR;





  • Atmel, 8- AVR , AVR ONE !, JTAGICE mkI, JTAGICE mkII, AVR Dragon, AVRISP, AVR ISPmkII, AVR Butterfly, STK500 STK600;





  • AVR RTOS;





  • AT90PWM1 ATtiny40;





  • TPI.





3.2  





, AtmelStudio AtmelAVR.





AtmelStudio. :





  • , Atmel AVR Assembler (AVR Assembler Project)













  • , AVRSimulator





  • , ATmega16





  • Finish





, * .ASM Project.





:





.include "m16def.inc" //   
.deftemp = r16 //    
.defrazr1 = r17
.defrazr2 = r18
.defrazr3 = r19
.defsys = r20
.deftry = r21
.defcount = r22

.equch0 = 0x03 // 0  
.equFREQ = 8000000 //  
.equW1_DDR = DDRA //   
.equW1_PORT = PORTA //   
.equW1_PIN = PINA //   
.equW1_BIT = 0 //     

.dseg // 
Trm: // 2   
.byte2
Visible: // 4     
.byte4
Otobr: // 4    
.byte4

.cseg //  
.org0 //   Reset
jmpReset //   Reset
.org $ 012 //     0
jmpTIM0_OVF //  

Reset: // 
lditemp, 128
outMCUCSR, temp //  JTAG,  JTD  MCUCSR = 1
lditemp, high (RAMEND) //   
out sph, temp
lditemp, low (RAMEND)
out spl, temp
lditemp, 0xFF //  DC ,   
out DDRD, temp
out DDRC, temp
lditemp, 128
outMCUCSR, temp //  JTAG,  JTD = 1
lditemp, 0b00000010
outTCCR0, temp //   ,  CS
lditemp, 1
outTIFR, temp //   , TOV0 = 1
outTIMSK, temp
ldisys, 0b10000000 //  sys    
Proga_Pred:
rcallW1_Sbros //       
cpir17 0 //  ,   r17  1
breqProga_Pred //   ,    
rcallW1_Init_12bit //     9   
sei //  

Proga:
cli //       
rcallW1_Sbros //      
cpir17 0 //  ,     r17  1
breqProga //   ,    
rcallW1_ConvTemp //    
sei //    
rcallDelay //   ,    

Proga 0:
cli //       
rcallW1_Sbros //      
cpir17 0
breqProga0 //   ,    
rcallW1_ReadMem //     
sei //      

lditemp, 0x00 //  ,   
stsOtobr + 1, temp
stsOtobr + 2, temp
stsOtobr + 3, temp
ldstemp, Trm //    
sbrstemp, 7 //     
rjmpProga_Plusovay //  7     ,    -
lditemp, 0b11111101 //   Otobr   G,   "-"
stsOtobr, temp //   1 
ldstemp, Trm //   temp   
anditemp, 0b00001111 //     ,  4  
ldirazr1, 0x0F //   0x0F  razr1
subrazr1, temp //   0x0F     
ldstemp, Trm + 1 //   temp   
anditemp, 0b11110000 //     ,  4  
ldirazr2, 0xF0 //   0xF0  razr2
subrazr2, temp //   0xF0     
swaprazr2 //     
incrazr2 //   1
swaprazr2 //      

rcallRasch_Decimal //        
rcallRasch_Otobr //      
rcallOtobr_Visible//    
rjmpProga //   Proga

Proga_Plusovay: // ,   +
lditemp, 0b11111111 //   Otobr  "",   "+"
stsOtobr, temp
ldsrazr1, Trm //    
ldsrazr2, Trm + 1 //    
andirazr2, 0b11110000 //    ,  4  
//          

rcallRasch_Decimal //       
rcallRasch_Otobr //      
rcallOtobr_Visible //    
rjmpProga //   Proga

Rasch_Decimal: //     
swaprazr1 //    razr1 ( )
swaprazr2 //    razr2 ()
addrazr1, razr2 //  ,     razr1
cpirazr1 0 // ,  0 
breqNULL_Temp //  0 

Rasch_Decimal0:
ldiXH, High (Otobr + 3) //   Otobr + 3     X
ldiXL, Low (Otobr + 3)
ldtemp, X //   Otobr + 3 
inctemp //   1
stX, temp //    Otobr + 3
cpitemp, 10 //   10
brneRasch_Decimal1 //      
lditemp 0 //   = 10,   Otobr + 3
stX, temp
ldtemp, -X //     Otobr + 2     
inctemp
stX, temp
cpitemp, 10
brneRasch_Decimal1
lditemp 0
stX, temp
ldtemp, -X
inctemp
stX, temp
Rasch_Decimal1:
decrazr1 //  1 razr1
brneRasch_Decimal0 //   = 0  
ret //       

Rasch_Otobr: //    
ldstemp, Otobr + 3 //   temp   Otobr + 3
rcallRasch_Otobr_Podp //   
stsOtobr + 3, razr1 //     Otobr + 3,   
ldstemp, Otobr + 2
rcallRasch_Otobr_Podp
stsOtobr + 2, razr1
ldstemp, Otobr + 1
rcallRasch_Otobr_Podp
stsOtobr + 1, razr1ret

Rasch_Otobr_Podp: //     
ldiZH, High (CH * 2) //   Z      
ldiZL, Low (CH * 2)
inctemp //  temp  1
Rasch_Otobr_Podp0:
lpmrazr1, Z + //       razr1
dectemp //  temp
brneRasch_Otobr_Podp0 //  temp  = 0 
ret //   = 0,      razr1    

NULL_Temp: // .. Otobr    0,    
ret
Otobr_Visible: //     Otobr  Visible
cli //  
ldstemp, Otobr
stsVisible, temp
ldstemp, Otobr + 1
stsVisible + 1, temp
ldstemp, Otobr + 2
stsVisible + 2, temp
ldstemp, Otobr + 3
stsVisible + 3, temp
sei //  
ret

TIM0_OVF: //  
cli //  
pushtemp //  temp  
intemp, SREG //   SREG  temp
pushtemp //    
lsrsys //   
cpisys, 0b00001000 //      
brneTIM0_OVF_Vix //      
ldiYH, High (Visible) //     ,    Y
ldiYL, Low (Visible)
ldisys, 0b10000000 //  7   sys,     .
TIM0_OVF_Vix:
ldtemp, Y + //   Y    
outPORTD, sys //    
outPORTC, temp //      
poptemp //     SREG
outSREG, temp //    SREG
poptemp //   temp
sei //  
reti //   


////////////////////////////   1-Wire
W1_Sbros: //       
ldsr16, W1_BIT //   r16   
sbiW1_DDR, W1_BIT //   
cbiW1_PORT, W1_BIT //    
rcallW1_DelayH //  480 ,  
cbiW1_DDR, W1_BIT //   
rcallW1_DelayI //    70 
sbisW1_PIN, W1_BIT //    ,     1
ldir17, 1 //      1
sbicW1_PIN, W1_BIT //   ,     0
ldir17 0 //      0
rcallW1_DelayJ //    410 
ret //    ,  r17     1,    0

W1_ReadMem: //     
ldir16, 0xCC //   0xCC,     
rcallds_byte_wr //        
ldir16, 0xBE //  ,    
rcallds_byte_wr //  
rcallds_byte_rd //     ,   ()
stsTrm + 1, r16 //     ,   Trm + 1
rcallds_byte_rd //   ()
stsTrm, r16 //     ,   Trm
ret

W1_ConvTemp: //   
ldir16, 0xCC //    
rcallds_byte_wr
ldir16, 0x44 //     ,    750 
rcallds_byte_wr
ret

W1_Init_12bit: //    12  
ldir16, 0xCC //    
rcallds_byte_wr //   
ldir16, 0x4E //       RAM  
rcallds_byte_wr //   
ldir16, 0xFF // 0xFF    2 ,   ,    
rcallds_byte_wr //      
ldir16, 0xFF // 0xFF   
rcallds_byte_wr //   
ldir16, 0x1F //   12  - 7F,  1F - 9, 3F - 10 , 5F - 11 
rcallds_byte_wr //   
ret

ds_byte_rd: //      r16  1 Wire
ldir17, 8 //   r17 - 8, ..   8   
clrr16 // r16,    
ds_byte_rd_0:
sbiW1_DDR, W1_BIT //   
cbiW1_PORT, W1_BIT //    
rcallW1_DelayA //  6 
cbiW1_DDR, W1_BIT //   
rcallW1_DelayE //  9 
sbisW1_PIN, W1_BIT
clc //   C = 0
sbicW1_PIN, W1_BIT
sec //   C = 1
rorr16 //      
rcallW1_DelayF //  55 
decr17 //   1  r17
brneds_byte_rd_0 //    0   
ret

ds_byte_wr: //     r16  
ldir17, 8 //   r17 - 8, ..   8   
ds_byte_wr0: 
sbiW1_DDR, W1_BIT //   
cbiW1_PORT, W1_BIT //    
sbrcr16 0 // ,  r16  0   
rjmpds_byte_write_1 //      
rjmpds_byte_write_0 //      
ds_byte_wr1:
lsrr16 //   
decr17 // r17  1
brneds_byte_wr0 //    0,   
ret //   

ds_byte_write_0: //  0
rcallW1_DelayC //  60 
cbiW1_DDR, W1_BIT //   
rcallW1_DelayD //  10 
rjmpds_byte_wr1

ds_byte_write_1: //  1
rcallW1_DelayA //  6 
cbiW1_DDR, W1_BIT //   
rcallW1_DelayB //  64 
rjmpds_byte_wr1

W1_DelayA: //  6 mcs
ldiXH, high (FREQ / 1000000)
ldiXL, low (FREQ / 1000000)
rcallW1_Delay
ret
W1_DelayB: //  64 mcs
ldiXH, high (FREQ / 65000)
ldiXL, low (FREQ / 65000)
rcallW1_Delay
ret
W1_DelayC: //  60 mcs
ldiXH, high (FREQ / 68000)
ldiXL, low (FREQ / 68000)
rcallW1_Delay
ret
W1_DelayD: //  10 mcs
ldiXH, high (FREQ / 500000)
ldiXL, low (FREQ / 500000)
rcallW1_Delay
ret
W1_DelayE: //  9 mcs
ldiXH, high (FREQ / 600000)
ldiXL, low (FREQ / 600000)
rcallW1_Delay
ret
W1_DelayF: //  55 mcs
ldiXH, high (FREQ / 75000)
ldiXL, low (FREQ / 75000)
rcallW1_Delay
ret
W1_DelayH: //  480 mcs
ldiXH, high (FREQ / 8332)
ldiXL, low (FREQ / 8332)
rcallW1_Delay
ret
W1_DelayI: //  70 mcs
ldiXH, high (FREQ / 58000)
ldiXL, low (FREQ / 58000)
rcallW1_Delay
ret
W1_DelayJ: //  410 mcs
ldiXH, high (FREQ / 9756)
ldiXL, low (FREQ / 9756)
rcallW1_Delay
ret
W1_Delay: //  
sbiwXH: XL, 1 //     
brneW1_Delay //    0   
ret //   
////////////////////////////   1-Wire

Delay: //  
ldirazr1, 255
ldirazr2, 255
ldirazr3, 10
Pdelay:
decrazr1
brnePdelay
decrazr2
brnePdelay
decrazr3
brnePdelay
ret

CH: //     0  9
.db0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09
      
      







* .hex-.









4.

ProteusDesignSuiteCADSoftware.





Proteus .





ATmega16 . , ProgramFile * .hex- .





Runtimesimulation.





プロジェクトのシミュレーション

, -10 +85 ºC ≤ 0,5 ºC, .





DS18B20 ATmega16, , .





ProteusDesignSuiteCADSoftware, .





AtmelStudio, AVR. AVRAssembler, , C / C ++.





, , . , - .








All Articles