Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega 8 i DS1820 - Bascom

neon121 29 Apr 2007 18:28 2646 4
  • #1
    neon121
    Level 18  
    Witam
    Temat może i wałkowany kilka krotnie, ale siedze nad tym jeż 3 dni i nie mogę odczytać temp z DS1820 i wyświetlić na LCD 16x2, na AT89S52 wszystko działa mi elegancko czujniki sprawne, napisze drugi program pod Atmege, wykrywa mi czujnik, i wyswietla komunikat jak odepne, ale ciagle mam 0 stopni, może ktoś ma na 100% sprawdzony program, moze jakieś fusebity trzeba przestawic, bo jedyny który ruszałem to oscyalator na zewnętrzny kwarc, bo nie widział nawet czujnika. Kwarc jest 10MHz. Czujnik próbowałem już na różnych portach.
    Poniżej przykład jednego z programów:

    $regfile = "m8def.dat" 'ATmega8
    $crystal = 10000000



    Config 1wire = Portb.2
    'Config Portb = Output
    'Config Portd = Output
    Config Lcd = 16 * 2
    Dim Odczyt(2) As Byte
    Declare Sub Odcz_temp
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'znak stopnia
    Cursor Off

    Do
    Call Odcz_temp
    Cls
    Lcd "temp = " ; Odczyt(1) ; Chr(0) ; "C"
    Loop
    End 'end program

    Sub Odcz_temp
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Odczyt(1) = 1wread(2)
    1wreset
    If Err = 1 Then
    Cls
    Lcd "brak ukladu"
    Waitms 500
    End If
    Odczyt(1) = Odczyt(1) / 2 'obliczanie temperatury
    End Sub

    Pozdrawiam
  • #2
    spektra
    Level 18  
    Declare Sub Read1820 'deklaracja podprogramu
    Declare Sub Temperature 'deklaracja podprogramu
    Dim Bd(9) As Byte 'deklaracja tablicy zmiennych
    Dim I As Byte , Tmp As Byte 'deklaracja zmiennych używanych przez program
    Dim T As Integer , T1 As Integer 'deklaracja zmiennych używanych przez program
    'Dim X As Byte 'deklaracja zmiennych używanych przez program
    Config Lcd = 16 * 2 'deklaracja rodzaju stosowanego wyświetlacza
    Config 1wire = Pind.0 'konfiguracja 1WIRE
    Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 'definiowanie znaku "O"(stopni Celsjusza)

    Cls 'inicjalizacja wyświetlacza LCD
    Cursor Off 'usunięcie z ekranu kursora
    Do
    Temperature 'pętla główna programu
    Loop

    '**podprogramy**
    Sub Temperature 'pomiar temperatury
    1wwrite &HCC 'pominięcie identyfikacji układu DS1820
    1wwrite &H44 'start konwersji A/D
    Waitms 250 'oczekiwanie na zakończenie konwersji
    Waitms 250
    Waitms 250 'oczekiwanie na zakończenie konwersji (łącznie 750ms czasami trzeba więcej)
    Lcd "T= " 'wyświetlenie znaku "T" na wyświetlaczu

    Read1820 'skok do programu konwersji z dokładnością do 0,1OC
    If Err = 1 Then 'jeżeli błąd, czyli brak czujnika DS1820
    Cls 'to wyczyść ekran
    Locate 1 , 8
    Lcd "Brak DS1820" 'komunikat o błędzie
    End If 'koniec uwarunkowania

    Locate 1 , 7 'ustaw kursor na pozycji 7
    Lcd T ; Chr(0) ; "C" 'wyświetlenie temperatury x10
    T = T / 10
    Locate 1 , 6 'cofnij kursor do pozycji 6
    Lcd T ; "," 'wyświetl wartość temperatury + znak dziesiętny z kursu Rabbe
    End Sub

    Sub Read1820
    1wreset 'inicjalizacja magistrali 1WIRE
    1wwrite &HCC 'żądanie dostępu do pamięci RAM
    1wwrite &HBE
    Bd(1) = 1wread(9) 'odczyt zawartości pamięci i umieszczenie danych w tablicy
    1wreset 'reset magistrali
    Tmp = Bd(1) And 1 'konwersja danych z precyzją 0,1OC
    If Tmp = 1 Then Decr Bd(1)
    T = Makeint(bd(1) , Bd(2))
    T = T * 50
    T = T - 25
    T1 = Bd( - Bd(7)
    T1 = T1 * 100
    T1 = T1 / Bd(
    T = T + T1
    T = T / 10 'wynik konwersji

    End Sub
  • #3
    neon121
    Level 18  
    Witam
    No i nie działa, jest kilka błędów kompilacji:
    T1 = Bd( - Bd(7)

    T1 = T1 / Bd(

    ustawiłem w opcjach jaki procesor, gdzie 1wire i pokazuje caly czas 0,2, jak odepne uklad to wyswietla brak ds1820
    Testowalem juz 2 procesory i ciagle nie moge odczytac temperatury
  • #4
    zumek
    Level 39  
    neon121 wrote:
    Witam
    No i nie działa, jest kilka błędów kompilacji:...

    Ależ Twój program jest jak najbardziej OK , choć tylko w zakresie temperatur dodatnich :D
    Czy "podciągnąłeś" linię 1wire(DQ) do VCC , zewnętrznym rezystorem :?:

    Piotrek
  • #5
    neon121
    Level 18  
    DS mam zasilonego razem z procesorem 5V nie stosuje tej opcji tylko z jednym przewodem + GND.
    Chodzi ci o to czy pin do którego mam dołączonego DS jest podciagnięty zewnętrzenie do Vcc? Czy to jest konieczne w Atmegach?

    Bo mam drugi zestaw złożony do testów na 89S52 i tam mam bezpośrednio podłączony i działają wszystkie czujniki.
    Jaki to ma byc + / - rezystor ??


    No, nie dołączylem 4,7k ohm i ruszyło od razu

    Dzięki za rade
    Teraz musze to uruchomić na HDLX1414, bo wstawiłem sobie taki wyświetlacz do liczników w samochodzie, bo jest mały i zaczne od pomiarów temp