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

[Atmega8][C]Pytanie o DS18B20 / rklibavr

vectra96 18 Paź 2009 19:34 2214 4
  • #1 7145011
    vectra96
    Poziom 12  
    Witam, mam problem z gotowym programem z biblioteki "rklibavr", a mianowicie chodzi o obsługę DS18B20. Poniżej załączam kod programu. Gdy na pinie PC5 podłączam 1 DS, na wyświetlaczu LCD pojawia się poprawna temperatura. Gdy do tej linii podłączę drugi DS pojawia mi się na LCD "-6552,5". Czy może mi ktoś pomóc w rozwiązaniu problemu?

    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/eeprom.h>
    #include <string.h>
    
    #include "delay.h"
    #include "uart.h"
    #include "lcd.h"
    #include "ds18x20.h"
    
    uint8_t gSensorIDs[OW_ROMCODE_SIZE];
    
    int main( void )
    {
    	uint16_t decicelsius;
    	uint8_t diff, i, subzero, cel, cel_frac_bits;
    
    	UART_init();
    	LCD_init();
    
    #ifndef OW_PORT
    	OW_set_bus(&PORTD,0);
    #endif
    DS18X20_find_sensor(&diff, &gSensorIDs[0]);
    	
    	while(1)
    	{
    i = gSensorIDs[0]; // family-code for conversion-routine
    
    		DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );
    		delayms(DS18B20_TCONV_12BIT);
    		DS18X20_read_meas_single(DS18B20_ID, &subzero, &cel, &cel_frac_bits );
    		decicelsius = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
    
    	UART_putstr_P(PSTR("\rdiff = "));
    	UART_putint(diff, 16);
    	UART_putstr_P(PSTR("\rgSensorIDs[0] = "));
    	UART_putint(i, 16);
    		UART_putstr_P(PSTR("\rsubzero = "));
    		UART_putint(subzero, 10);
    		UART_putstr_P(PSTR("\rcel = "));
    		UART_putint(cel, 10);
    		UART_putstr_P(PSTR("\rcel_frac_bits = "));
    		UART_putint(cel_frac_bits, 10);
    		UART_putstr_P(PSTR("\rdecicelsius = "));
    		
    		UART_putchar((subzero)?'-':'+');
    		UART_putint( (decicelsius/10) ,10);
    		UART_putchar(',');
    		UART_putchar( (decicelsius%10) + '0');
    		UART_putchar('\r');
    		LCD_xy(0,0);
    		LCD_putchar((subzero)?'-':'+');
     		LCD_putint( (decicelsius/10) ,10);
    		LCD_putchar(',');
    		LCD_putchar( (decicelsius%10) + '0');
    	}
    		
    }
    
  • #3 7149650
    vectra96
    Poziom 12  
    Prawdę mówiąc jest to prawie źródłowy gotowy przykład z biblioteki rklibavr, wydaje mi się że funkcja DS18X20_find_sensor tworzy tablicę gSensorIDs[], i po niej jakoś powinienem odczytać odpowiedni czujnik DS, ale niestety nie wiem jak to zrobić.
  • Pomocny post
    #4 7159296
    beznazwie
    Poziom 11  
    Dołącz i edytuj plik config.h z folderu, w którym są źródła tego przykładu. W tym pliku jest zdefiniowany port i pin. Ustaw odpowiednio dla Twojego układu.
  • #5 10867938
    vectra96
    Poziom 12  
    zamykam temat
REKLAMA