Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Attiny 2313 i Dallas ds18b20 Termometr

Musiol 09 Feb 2010 18:26 3603 9
  • #1
    Musiol
    Level 16  
    Witam na potrzeby szkolne stworzyłem termometr na układach Attiny 2313 i Dallas 20b18
    Interesuje mnie w jaki sposób odbywa się odczyt temp. z czujnika
    Dołączam program z bascomAVR
    $regfile "2313def.dat"					*Nazwa pliku doobsługi programu
    $crystal = 1000000					*Częstotliwosc taktowania 1Mhz z dokumentacji układu
    Config Lcd = 16 * 1a					*Deklaracja LCD 16 znaków na 1 rząd
    Config Lcdpin = Pin , Db4 = Pb.3 , Db5 = Pb.2 , Db6 = Pb.1 , Db7 = Pb.0 , E = Pb.4 , Rs = Pb.5	*Konfiguracja obsługi lcd
    
    
    Config 1wire = Portd.6					*Konfiguruje port dla transmji 1wire
    Dim I As Integer					*deklaracja zmiennych
    Dim S As Single
    Dim T As String * 4
    
    Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32 	*kod do znaku stopnia znalazłem to w programie bascomavr
    
    Cursor Off						*wył kursor
    Cls
    
    Lcd "Musiol IVc  :)"    				*komikat pocz
    Wait 2							*czas wyswietlania pow napis
    Cls
    
    Do
    
    
       1wreset						*wysyła zapyt o temp		
       1wwrite &HCC
       1wwrite &H44
       Waitms 750						*czeka aż ds18b20 przetwozy temp
    
       1wreset						*nastepne zczytuje
       1wwrite &HCC
       1wwrite &HBE
    
       I = 1wread(2)
       S = I / 16
       T = Fusing(s , "##.#")				*Przetwazanie temperatury do do 1 cyfry po przecinku
    
       Cls			
       Locate 1 , 4						*Miejsce wyswietlania napisu TEMP
       Lcd "Temp:"
       Locate 2 , 1						*Pozycja wyswietlania znaku stopnia i odczytu z czujnik
       Lcd T ; Chr(0) ; "C"
    
    
    
    Loop						
  • #2
    august_a
    Level 21  
    20b18 czy raczej DS18B20??
  • #3
    Musiol
    Level 16  
    Dallas ds18b20 ;]
  • #4
    august_a
    Level 21  
    skoro już coś napisałeś, i działa...to wiesz jak odczytywać dane z DSa.
    A szczegóły w data sheet.
  • #5
    norbis15
    Level 14  
    Interfejs ten został opracowany przez firmę Dallas Semiconductor (obecnie Maxim) i jest on przeznaczony do przesyłania informacji pomiędzy układem nadrzędnym master (mk) i układami podrzędnymi slave (np. termometry, układy identyfikacji, pamięci SRAM i EEPROM, programowalne klucze). Transmisja odbywa się w obu kierunkach z wykorzystaniem jednego przewodu sygnałowego (oprócz masy), który jednocześnie może być wykorzystany do zasilania układów do niego podłączonych. Dane przesyłane są z prędkością od bliskiej 0 do 16,3 kbps w trybie standard oraz do 115 kbps w trybie overdrive.Attiny 2313 i Dallas ds18b20 Termometr


    Każde z urządzeń podłączonych do magistrali musi mieć wyjście typu otwarty dren, a linia sygnałowa DQ jest połączona do zasilania przez rezystor podciągający o wartości około 5k. Zatem w stanie bezczynności linia DQ jest w stanie wysokim Proces odczytu wartości temperatury z DS18B20 nie jest niestety natychmiastowy, po wysłaniu przez mikrokontroler polecenia odczytu potrzeba 750 ms na dokonanie tzw. konwersji przez układ. W tym czasie linia danych jest bezczynna i jest w stanie wysokim, w czasie konwersji układ potrzebuje także najwięcej prądu. I tu pojawia się pewne rozwiązanie dla osób które chciały by zmniejszyć liczbę przewodów prowadzących do czujnika z trzech do dwóch.

    Attiny 2313 i Dallas ds18b20 Termometr

    Możemy pozbyć się przewodu zasilającego i bezkarnie podkradać prąd z linii danych. w tym celu musimy po prostu przy czujniku zewrzeć nóżkę zasilania z masą. Niestety w czasie konwersji prądu na linii danych może zabraknąć, by do tego nie dopuścić stosuje się tzw. strong pull up. Potrzeba wtedy zająć dodatkowy port mikrokontrolera i w momencie gdy dokonuje się konwersja za jego pomocą włączać tranzystor który mocno podciągnie linię danych do potencjału zasilania. Obrazuje to rysunek
  • #6
    Musiol
    Level 16  
    No właśnie nic z tego nie kapuje ;/ widziałem jak inni to robią i zrobiłem podobnie.
    Może pomożecie bo muszę to wiedzieć na jutro :/ a z programowania jest całkiem ciemny jak i z micro kontrolrów
  • #7
    kundzios
    Level 19  
    Wszystko masz w dokumentacji układu http://www.iele.polsl.pl/elenota/Maxim/2812.pdf Wystarczy przeczytać dokładnie.

    
    ...
       1wreset                    'reset magistrali   
       1wwrite &HCC            'komenda opuszczenia adresu (bo jest jeden DS18B20)
       1wwrite &H44             'komenda rozpoczęcia konwersji
       Waitms 750                  *czeka aż ds18b20 przetwozy temp  -tu dobrze
    
       1wreset                    'reset magistrali
       1wwrite &HCC            'opuszczenie adresu
       1wwrite &HBE             'komenda odczytu temperatury
    
       I = 1wread(2)            'odczytanie 2 bajtów
       S = I / 16
       T = Fusing(s , "##.#")            *Przetwazanie temperatury do do 1 cyfry po przecinku
    
       Cls         
       Locate 1 , 4                  *Miejsce wyswietlania napisu TEMP
       Lcd "Temp:"
       Locate 2 , 1                  *Pozycja wyswietlania znaku stopnia i odczytu z czujnik
       Lcd T ; Chr(0) ; "C"
    ...
    


    dodałem komentarze, które powinny pomóc w zrozumieniu komunikacji z DS'em
  • #8
    Musiol
    Level 16  
    ok dzięki ;] teraz aktualizuje system w n95 jak skończę instaluje adobe acrobat do PDF i ogarnę temacik , ta dokumentacja jest po polsku? bo jak po angielsku to się potne :P
  • #9
    kundzios
    Level 19  
    Niestety dokumentacja jest w języku angielskim. Jeśli koniecznie chcesz coś po polsku to zgłoś się na PW to zrobię skany z książek o BASCOM'ie tam często omawiali na przykładach działanie DS'a. W wujku Google też można znaleźć te skany.

    PS. Na elektrodzie jest mnóstwo projektów opartych na tym układzie. Wystarczy poszukać.
  • #10
    Musiol
    Level 16  
    Hmmm a luknął by ktoś w dokumentacje i odpowiedział mi na pytanie ;/ bo zupełnie nie wiem czego szukać, a na jutro muszę to wiedzieć.
    Przepraszam ze wykorzystuje was ale czas goni a ja jestem zielony