Witam serdecznie.
Borykam się z problemem, którego nie mogę przeskoczyć a mianowicie.
W funkcji main mam następujący kod:
do odczytu temperatury służy funkcja:
funkcja służaca do wyświetlania znaków wygląda następująco:
Problem jest taki, iż wyświetlacz wyświetla ładnie napis: Rozpoczynam temp.
nt. potem, kiedy wywołuję funkcję do załadowania do przekazanej mu tablicy znaków (void TERMOMETR_ODCZYTAJ_TEMPERATURE(char * buffer)), a potem jeszcze testowo wpisałem do tablicy 3 litery M.
Niestety na wyświetlaczu nie pokazuje się ani temperatura, ani napis z tablicy tzn. MMM.
Nie wiem Panowie jak to można poprawić, aby działało jak należy i wyświetlało poprawnie.
Pozdrawiam i miłego dnia życzę.
Mam nadzieję, że ktoś z Panów wie co jest nie tak, i mógłby mi poradzić?
Borykam się z problemem, którego nie mogę przeskoczyć a mianowicie.
W funkcji main mam następujący kod:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdlib.h>
#include <util/delay.h>
#include "hd44870.h"
#include "ds18b20.h"
//#include "MyDelay.h"
int main(void)
{
volatile char tablica[20]="MMM";
LCD_Clear();
LCD_Home();
LCD_Initalize();
LCD_WriteText("Rozpoczynam temp");
_delay_ms(1000);
TERMOMETR_RESET();
for (;;)
{
TERMOMETR_ODCZYTAJ_TEMPERATURE(tablica);
LCD_Clear();
LCD_GoTo(0,0);
_delay_ms(200);
LCD_GoTo(0,0);
LCD_WriteText("czekam na temp");
tablica[20]="MMM";
LCD_WriteText(tablica);
}
}
do odczytu temperatury służy funkcja:
void TERMOMETR_ODCZYTAJ_TEMPERATURE(char * buffer)
{
//buffer length must be at least 12bytes long ["+xxx.xxxx C"]
uint8_t temperature[2];
int8_t digit;
uint16_t decimal;
//reset, skip rom and start temperature conversation
TERMOMETR_RESET();
TERMOMETR_ZAPISZ_BAJT("0xCC");
TERMOMETR_ZAPISZ_BAJT("0x44");
//wait until conversation is complete
while(!TERMOMETR_ODCZYTAJ_BIT);
TERMOMETR_RESET();
TERMOMETR_ZAPISZ_BAJT("0xCC");
TERMOMETR_ZAPISZ_BAJT("0xBE");
//read scratchpad (only 2 first bytes)
temperature[0]=TERMOMETR_ODCZYTAJ_BAJT();
temperature[1]=TERMOMETR_ODCZYTAJ_BAJT();
//store temperature integer digits and decimal digits
digit=temperature[0]>>4;
digit|=(temperature[1]&0x7)<<4;
decimal =temperature[0]&0xF;
decimal*=TERMOMETR_12BIT;
//format temperature into a string[+XXX.XXXX C]
sprintf(buffer,"%+d.%04u C",digit,decimal);
} funkcja służaca do wyświetlania znaków wygląda następująco:
void LCD_WriteText(char * text)
{
while(*text)
LCD_WriteData(*text++);
}Problem jest taki, iż wyświetlacz wyświetla ładnie napis: Rozpoczynam temp.
nt. potem, kiedy wywołuję funkcję do załadowania do przekazanej mu tablicy znaków (void TERMOMETR_ODCZYTAJ_TEMPERATURE(char * buffer)), a potem jeszcze testowo wpisałem do tablicy 3 litery M.
Niestety na wyświetlaczu nie pokazuje się ani temperatura, ani napis z tablicy tzn. MMM.
Nie wiem Panowie jak to można poprawić, aby działało jak należy i wyświetlało poprawnie.
Pozdrawiam i miłego dnia życzę.
Mam nadzieję, że ktoś z Panów wie co jest nie tak, i mógłby mi poradzić?