Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <msp430x14x.h>
- #include <stdio.h>
- #include "LCD.h"
- /*
- WDTCTL = WDTPW + WDTHOLD;
- BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz
- do {
- IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
- for (int i = 0xFF; i > 0; --i); // odczekanie
- }
- while ((IFG1 & OFIFG)); // dopóki OSCFault jest ciągle ustawiona
- BCSCTL2 |= SELM1+SELM0 ; // MCLK =LFXT1
- */
- #define CALADC12_15V_30C *((unsigned int *)0x1A1A) // Temperature Sensor Calibration-30 C
- //See device datasheet for TLV table memory mapping
- #define CALADC12_15V_85C *((unsigned int *)0x1A1C) // Temperature Sensor Calibration-85 C
- #define INTERVAL 50000 //okres licznika 0,5s
- #define _5s 1 //okres pomiarów
- unsigned int cntr;
- void show(int temp, char jednostka);
- int main (void)
- {
- WDTCTL = WDTPW+WDTHOLD;
- ini_display(); //inicjalizacja LCD
- ADC12CTL0=ADC12ON|REFON|SHT0_15; //w3. rdzenia, w3.gen. nap. odniesienia, wybór nap. odniesienia
- ADC12CTL1=SHP|CSTARTADD_0; //próbkowanie impulsowe, wynik sk3adany w ADC12MEM0
- ADC12MCTL0=INCH_10|SREF_1; //kana3 10, Yród3o nap. odniesienia - wew. generator (1,5V)
- for(unsigned int k=0; k<0x3600; k++); //czas na ustabilizowanie generatora nap. odniesienia
- CCR0=INTERVAL; //ustala nowy okres licznika
- TACTL=TASSEL_2|ID_3|MC_1; //Yród3o taktowania SMCLK, dzielone przez 8,tryb UP
- CCTL0=CCIE; //uaktywnienie przerwania od TACCR0 CCIFG
- _BIS_SR(GIE); //w3aczenie przerwan
- ADC12CTL0 |= ENC; //uaktywnienie konwersji
- char ile;
- int suma=0, temp=0;
- while(1)
- {
- P2OUT^=BIT1;
- ADC12CTL0 |= ADC12SC; //start konwersji
- while((ADC12CTL1&ADC12BUSY)==1); //czekanie na koniec konwersji
- suma+=10*(ADC12MEM0*1.0318-2777.464788732394); //wartooa temperatury z dok. 1-miejsce po przecinku
- ++ile;
- if(ile==3)
- {
- LCD_cmd(CLR_LCD);
- LCD_char('#');
- temp=suma/4;
- show(temp, 'C');
- LCD_char(' ');
- LCD_char(' ');
- show(temp*1.8+3200, 'F');
- ile=0;
- suma=0;
- }
- _BIS_SR(LPM0_bits); //wejocie w tryb oszczedny
- }
- }
- void show(int temp, char jednostka)
- {
- int cyfra, waga=10;
- if(temp<0)
- {
- LCD_char('-');
- temp*=-1;
- }
- if(temp<10)
- LCD_char('0');
- if (temp >= 10000)
- {
- LCD_char('?');
- return;
- }
- while (waga <= temp)
- {
- waga*=10;
- }
- while ((waga/=10)>10)
- {
- cyfra = temp / waga;
- LCD_char((int)('0'+cyfra));
- temp-=cyfra*waga;
- }
- LCD_char('.');
- LCD_char((char)('0'+(temp/10)));
- LCD_char((char)('0'+(temp%10)));
- LCD_char(jednostka);
- }
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- {
- if(++cntr==_5s)
- {
- _BIC_SR_IRQ(LPM0_bits); //wyjocie z trybu oszczednego
- cntr=0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement