logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C]Pomiar temperatury na avr, wyswietlacz graficzny

man21ius 05 Sty 2010 18:02 2146 3
REKLAMA
  • #1 7489591
    man21ius
    Poziom 2  
    Witam!
    Mam za zadanie zrobić program do wyswietlania temeratury na wyswietlaczu graficznym ze sterownikiem ks0108, z zastosowaniem termometru TC77. Zmieniam wartość w C na kelwiny i farenheit.
    Problem w tym, że wyświetla mi tylko jedną wartość.

    Poniżej umieszczam kod programu
    
    #ifndef F_CPU  
      #define F_CPU   16000000    // 16 MHz - turn on external resonator (fuse bits)
    #endif
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdlib.h>
    #include "SPI.h"
    #include "ks0108.h"
    #include "arial_bold_14.h"
    #include "SC.h"
    #include "Bitmap.h"
    //-------------------------------------
    // main program
    //-------------------------------------
    int main(void)
    {
    char A1,A2;
    char buf[8];
    char buf1[8];
    char buf2[8];
    char a=273;
    char pomiar, pomiarK, pomiarF;
    SPI_Init();
    ks0108Init(0);
    ks0108ClearScreen();
    
    ks0108SelectFont(Arial_Bold_14, ks0108ReadFontData, BLACK);
    ks0108SetInverted(0);
    for(;;)
    {
    
    	ks0108ClearScreen1();
      PORTB &= ~(1 << PB5); // Enable CS
      A1 = SPI_Transmit(1); // read byte
      A2 = SPI_Transmit(1); // read byte
      PORTB |= (1 << PB5);  // Disable CS
      pomiar=(A1*32+A2/8);
      pomiar=pomiar*0.625;
      //pomiar=pomiar*0.0625;
      pomiarK=(pomiar+a);
      pomiarF=((9/5)*(pomiar))+32;
      dtostrf(pomiar,2,2,buf);
      dtostrf(pomiarK,2,2,buf1);
      dtostrf(pomiarF,2,2,buf2);
      ks0108GotoXY(10,10);//USART_PutString("TC77 output (hex): ");
      ks0108Puts("Pomiar:");
      _delay_ms(10);
      ks0108GotoXY(65,10);
      ks0108Puts(buf);
       ks0108GotoXY(65,30);
      ks0108Puts(buf1);
       ks0108GotoXY(65,45);
      ks0108Puts(buf2);
      
      ks0108ClearScreen();
       	
    	
    }
    return 0;
    }

    Kod umieszczamy w znacznikach [code] - poprawiłem.
    [zumek]
  • REKLAMA
  • #2 7489898
    michalko12
    Specjalista - Mikrokontrolery
    Skoro masz takie zadanie to musisz je rozwiązać sam :cunning:

    Podpowiedź...

    Zastanów się nad tymi linijkami kodu:


    char a=273;
    
    char pomiar, pomiarK, pomiarF;
    
      pomiar=(A1*32+A2/8);
      pomiar=pomiar*0.625;
      //pomiar=pomiar*0.0625;
      pomiarK=(pomiar+a);
      pomiarF=((9/5)*(pomiar))+32;
      dtostrf(pomiar,2,2,buf);
      dtostrf(pomiarK,2,2,buf1);
      dtostrf(pomiarF,2,2,buf2);
  • REKLAMA
  • #3 7490183
    man21ius
    Poziom 2  
    Tylko, ze na wyświetlaczu alfanumerycznym ten program chodził a na graficznym nie chce i nie wiem co może być tego powodem.
  • #4 7490882
    tmf
    VIP Zasłużony dla elektroda
    Jestes pewien, ze *TEN* kod dzialal? Pomijajac samo wyswietlanie to zmienne pomiar masz zadeklarowane jako char, prowadzisz na nich obliczenia typu float (niektore stale np. 9/5 wcale automatycznie nie ulegaja konwersji do float) i na koncu do zmiennej char uzywasz funkcji dtostrf, ktora jako pierwszy argument wymaga double (float na AVR)?
REKLAMA