Pokrewne
menu      Co myslicie ? DS1621<->MAX232<->MAX232<->AVR
menu      Proste, krótkie pytanie - jak zapisać float do Eprom'u w avr gcc?
menu      GPS AVR ATMega128 - pomiar odleglosci pomiedzy dwoma punktami
menu      avr-gcc zajetosc ram/data - dziwne zachowanie
menu      [avr-gcc] Skanowanie klawiatury - jednak nie dziala
menu      firmware/projekt AVR JTAG+ISP naraz?
menu      float format zapisu w pamięci - avr gcc
menu      Prosty programator AVR - skad zasilanie w LPT?
menu      Karta RJ-45 na USB i AVR
menu      [avr-gcc] zmienne "ciurkiem" w ramie?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sp2wlawowo.keep.pl
  • Termometr AVR, LED, soft





    Mariusz - 26-12-2006 23:45
    Termometr AVR, LED, soft
      Poszukuję kogoś do poprawy programu termometru:

    Problem jest z wyświetlaniem temperatury po podaniu zasilania
    przez jakiś czas ustalając temperaturę pokazuje "głupoty"
    oraz pod czas komunikacji z DS1820 nie wyświetla temperatury.
    Jeżeli można to chciałbym dołożyć drugi DS1820 i jakiś przycisk wyboru.
    Procesor może być inny np: PIC (odpadanie dodatkowo kwarc) byle był tani.

    http://www.kmitl.ac.th/~kswichit%20/...avrthermo.html
    http://www.kmitl.ac.th/~kswichit%20/.../schematic.gif

    /**************************************
    thermo.c
    Digital Thermometer -55C to +125C
    AVR 90S2313 & DS1820

    Copyright 2001 by Wichit Sirichote

    **************************************/

    #include <90s2313.h>
    #include <math.h>

    // 1 Wire Bus functions
    #asm
    .equ __w1_port=0x12
    .equ __w1_bit=6
    #endasm
    #include <1wire.h>

    // DS1820 temperature sensor functions
    #include <ds1820.h>

    // Declare your global variables here

    unsigned char tick,i,digit;
    unsigned char heat[4];
    unsigned int xtimer1;
    int temp,T,X1,X2,X3,X4,X5; // signed number for negative and positve
    temperature manipulating

    char key;

    unsigned char convert[10] =
    {0x3F,0x06,0xdb,0xcf,0x66,0x6d,0x7d,0x07,0x7f,0x6f };

    #define segment PORTB
    #define LED_digit PORTD

    // converts 16-bit data in T to display buffer for both negative and
    positive reading

    void heatToBuffer()
    {
    if(T<0){
    heat[3] = 0x40; // if negative, put -
    heat[0] = 0x39; // C

    T = abs(T); // get only amplitude
    heat[1] = convert[T%10];
    heat[2] = convert[T/10];
    if (heat[2] == 0x3f)
    heat[2] = 0; // off msd
    }
    else
    {
    heat[0] = 0x39; // C

    heat[3] = convert[T/100];
    temp = T%100;
    heat[1] = convert[temp%10];
    heat[2] = convert[temp/10];
    // off msd
    if (heat[3] == 0x3f)
    {
    heat[3] = 0;
    if(heat[2] == 0x3f)
    heat[2] = 0;
    }
    }
    }

    LPF() // performs five-point moving average
    {
    X5=X4;
    X4=X3;
    X3=X2;
    X2=X1;
    X1= T;
    T = (X1+X2+X3+X4+X5)/5;
    }

    read_temp()
    {
    if(++xtimer1 >=5)
    {
    xtimer1 = 0;
    segment = 0xff;
    T = ds1820_temperature_10(0)/10; // read DS1820 every 5 sec.
    LPF(); // enter filter
    heatToBuffer(); // convert it
    }
    }

    // Timer 0 overflow interrupt service routine
    // timer interrupt every 1/15 sec provides foreground task to be run
    periodically.

    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    switch (++tick){
    case 15: tick = 0;
    read_temp(); //second_task();
    }

    }

    void scanLED() /* scan 4-digit LED and 4-key switch, if key pressed key
    = 0-3
    else key = -1 */
    // adapted from 89C2051 project if needs scan key, find one bit input
    port
    {
    char i;
    digit = 0x20;
    key = -1;
    for( i = 0; i < 4; i++) /* 4-DIGIT scanning */
    {
    LED_digit = ~digit; /* send complement[digit] */
    segment = ~heat[i]; /* send complement[segment] */
    delay_ms(1); /* delay a while */
    segment = 0xff; /* off LED */
    // if ((PORTD & 0x10) == 0) /* if key pressed P3.4 became low */
    // key = i; /* save key position to key variable */
    digit>>=1; /* next digit */
    }
    }

    void main(void)
    {

    DDRB=0xFF;
    PORTB=0x00;

    DDRD=0x7F;
    PORTD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 3.906 kHz
    // Mode: Output Compare
    // OC0 output: Disconnected
    TCCR0=0x05;
    TCNT0=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x02;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;

    // 1 Wire Bus initialization
    w1_init();

    // Global enable interrupts
    #asm("sei")

    // 1 Wire Bus initialization
    w1_init();

    T = 34;
    heatToBuffer();

    while (1)
    {
    scanLED(); // run background task forever
    }
    }





    Virus_7 - 27-12-2006 02:45

      Mariusz napisał(a):
    > Poszukuję kogoś do poprawy programu termometru:
    >
    > Problem jest z wyświetlaniem temperatury po podaniu zasilania
    > przez jakiś czas ustalając temperaturę pokazuje "głupoty"
    > oraz pod czas komunikacji z DS1820 nie wyświetla temperatury.
    > Jeżeli można to chciałbym dołożyć drugi DS1820 i jakiś przycisk wyboru.
    > Procesor może być inny np: PIC (odpadanie dodatkowo kwarc) byle był tani.
    >
    > http://www.kmitl.ac.th/~kswichit%20/...avrthermo.html

    Szczerze mówiąc nie wiem czy nie łatwiej byłoby w Twoim przypadku kupić
    gotowy termometr w sklepie. Nie sądzę, żebyś znalazł na tej grupie
    jakiegoś, za przeproszeniem, łosia, który przeanalizuje cały program,
    zbuduje prototyp i będzie szukał błędu. Ew. Znajdź inną stronę z
    realizacją podobnego projektu.

    --
    __ ___ * Pozdrawiam * ____
    \ \ / (_)_ _ _ _ ___ |__ | mailto://rot13.ivehf_7@b2.cy/
    \ V /| | '_| || (_-< ___ / / http://www.b3d.pl/
    \_/ |_|_| \_,_/__/|___|/_/ gg://2812776/




    William - 27-12-2006 08:45

     
    > Szczerze mówiąc nie wiem czy nie łatwiej byłoby w Twoim przypadku kupić
    > gotowy termometr w sklepie. Nie sądzę, żebyś znalazł na tej grupie
    > jakiegoś, za przeproszeniem, łosia, który przeanalizuje cały program,
    > zbuduje prototyp i będzie szukał błędu. Ew. Znajdź inną stronę z
    > realizacją podobnego projektu.
    >

    Nie mówiąc już tylko o tym, że pan Wichit zastrzegł sobie prawa autorski
    e do kodu i nie można go tak bez jego zgody modyfikować.




    Adam Brzostek - 27-12-2006 16:45

      to nparawde nie jest nic skomplikowanego
    nidawno zrobilem termometr na DS1820 tylko ze program napisalem w
    BASCOM'ie - nawet wnecie przykładów strasznie duzo samej obslugi termometru
    czy wyswietlania multipleksowego..
    wystarczy troche poszukac..

    pozdr.
    Adam Brzostek
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • konstruktor.keep.pl
  • Design by flankerds.com