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

[AT90S2313][C][Winavr] Przykład w C 2x DS18x20

J_D 04 Lut 2009 23:38 2129 2
REKLAMA
  • #1 6104334
    J_D
    Poziom 10  
    Witam serdecznie,
    forum przeszukałem prawie całe a przykładu na dwupunktowy pomiar temperatury z czujnikami DS18x20 na 2313 w C nie znalazlem. Sa przyklady owszem ale w Basic. Probowalem skompilowac gotwe biblioteki które równiez były przytaczane na forum
    (przykładowa, ciekawa biblioteka) ale nie niestety nie mieszcza sie do 2k Flasha nawet po jej okrojeniu.
    Czy ma ktoś przykład w C albo biblioteki 1-Wire do obslugi wielu czujników na lini? No i ktore zmieszcza sie w 2k?

    Pozdrawiam,
    J_D
  • REKLAMA
  • #2 6146238
    lord_adi
    Poziom 11  
    Program do odczytu temperatury z czterech DS18B20 i wyświetlenia na lcd 4x20 w załączniku.

    Funkcję dtostrf zastąpiłem przez itoa, ale nie wiem czy jest zapisana poprawnie. Normalnie używam dtostrf (do atmega8 się mieści), a z itoa nie mam jak przetestować. Numery seryjne wpisane na stałe. Funkcja do ich odczytania (każdy DS oddzielnie):

    
    unsigned char ROM=0x00;
    unsigned char SC[9]="  ";
    
    void FindDevices(void)
    {
    
    LCD_GoTo(0,0);
    LCD_WriteText("Nr: ");
    
       if(RESET_PULSE())
       {
    	send_byte(0x33);
    	
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	LCD_WriteText(" ");
    	ROM=read_byte();
    	itoa(ROM,SC,16);
    	LCD_WriteText(SC);
    	
    	}
    }
    


    Mam też gdzieś na dysku kawałek kodu do odczytania numerów seryjnych z kilku urządzeń.

    Pozdrawiam.
  • #3 6148624
    J_D
    Poziom 10  
    Dziekuję za pomoc. Osobiście udało mi się "nawiązc kontakt" z czujnikami i nawet to dziala. Po optymalizacji i skonczeniu kudu zamieszcze go tutaj dla szukających rozwiazania w przyszlosci.
    Dzieki raz jesze za pomoc online i offline.

    Pozdrawiam,
    J_D
REKLAMA