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.

[Mega8][Bascom] Odczytem temp. z DS18b20.

KiciuR8 24 Jun 2008 18:36 2888 16
  • #1
    KiciuR8
    Level 11  
    Witam. Napisałem program w bascomie, zwykły termostat z wyjściem na przekaźnik. Mikroprocesor to Atmega8 + lcd + DS18b20 + 2 przyciski. Przerwania działają, lcd tak samo, jednak program nie chce odczytywać danych z czujnika. Sądzę że jest dobry gdyż tą cześć kodu która ma służyć do obsługi czujnika zaczerpnąłem z tego forum. Kod zamieszczam poniżej i proszę o jakieś sugestie i wytknięcie błędu.
    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000

    Config Lcd = 24 * 2

    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

    Config 1wire = Portb.0

    Config Portd.0 = Output

    Config Int0 = Falling
    Config Int1 = Falling

    Dim A As Byte
    Dim A1 As Single
    Dim A2 As Single
    Dim T1 As Single
    Dim T2 As Single

    Declare Sub Odczyt_temp

    Pk Alias Portd.0

    Enable Interrupts
    Enable Int0
    Enable Int1

    On Int0 Pr1
    On Int1 Pr2

    Cursor Off

    Reset Pk

    A = 20

    Cls




    Do

    Call Odczyt_temp

    Locate 1 , 1
    Lcd A
    Locate 2 , 1
    Lcd T2

    A1 = A + 1
    A2 = A - 1

    If T2 > A1 Then
    Set Pk
    End If

    If T2 < A2 Then
    Reset Pk
    End If

    Loop

    End



    Pr1:
    If A < 30 Then
    A = A + 1
    End If
    Return


    Pr2:
    If A > 10 Then
    A = A - 1
    End If
    Return




    Sub Odczyt_temp

    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750
    1wreset
    1wwrite &HCC
    1wwrite &HBE

    T1 = 1wread(2)
    T1 = T1 * 10
    T1 = T1 / 16
    T2 = T1 / 10

    End Sub


    Poprawiłem tytuł:
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [c_p]
  • #3
    KiciuR8
    Level 11  
    Dokładnie nie pamiętam, aczkolwiek jest dobry gdyż w innym programie wcześniej działał bez zarzutu.
  • #6
    dawid512
    Level 32  
    Sprawdź PCB Rezystor 4.7kΩ masz na linii danych? Może podaj konkretnie co pokazuje sie na lcd.
  • Helpful post
    #7
    zumek
    Level 39  
    Balu wrote:
    a 8MHz masz?:>

    dawid512 wrote:
    Sprawdź PCB Rezystor 4.7kΩ masz na linii danych? Może podaj konkretnie co pokazuje sie na lcd.

    "Przyczepiliście się" :D do sprzętu , a żaden z Was nie zajrzał do kodu ;)
    A błąd ukrył się sprytnie , w deklaracji zmiennej T1 , która powinna być typu Integer , a jest ... :?:

    Piotrek
  • #8
    dawid512
    Level 32  
    Jak zwykle zumek zaskakuje pozytywnie :D

    T1 ma być jako integer a T2 jako single.
  • #9
    KiciuR8
    Level 11  
    Dziękuje, pewnie sam przez nie uwagę zmieniłem :) oczywiście "pomógł" już poszło. Mam jeszcze jedno pytanie, czy jest w bascomie jakaś komenda / polecenie która pozwoliła by podzielić liczbę tak aby otrzymać wynik bez reszty?
  • #10
    dawid512
    Level 32  
    Jest a oto mały przykład:

    Code:
    T = Fusing(s , "##.#")

    Gdzie T jest typu string a S typu single.

    Jest też opcja format.

    A to wszystko znjdziesz w helpie do bascoma.
  • #12
    dawid512
    Level 32  
    Można przecierz zrobić tak:
    Code:
    T = Fusing(s , "##.#")
    a potem wydzielić sobie 2 pierwsze cyfry prawda :D
  • #13
    don diego
    Level 32  
    dawid512 wrote:
    Można przecierz zrobić tak:
    Code:
    T = Fusing(s , "##.#")
    a potem wydzielić sobie 2 pierwsze cyfry prawda :D

    To chyba nadal nie będzie dzieleniem ;)
  • #14
    dawid512
    Level 32  
    Ale za to otrzyma wynik bez przecinka :)
  • #15
    Fyszo
    Level 37  
    Najczęściej dzielenie całkowite to instruckacja DIV, ale czy jest taka w tym języku - nie wiem.
  • #17
    KiciuR8
    Level 11  
    Fusing i Format to nie rozwiązanie mojego problemu ze względu na to że String to zmienna tekstowa a ja potrzebuje wynik otrzymać w postaci zmiennej liczbowej. próbowałem już to zrobić z "div" ale jednak nie ma takiego polecenia w bascomie, sprawdziłem już opcje z backslashem i działa. Dzięki :D