Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Termometr ATmega8 Bascom ds18b20 problem z wyświetlaczem

nowakm3 26 Lut 2010 15:35 2243 2
  • #1 26 Lut 2010 15:35
    nowakm3
    Poziom 11  

    Witam.
    Zrobiłem termometr taki jak w temacie https://www.elektroda.pl/rtvforum/topic334889.html#1696804
    tyle że zamiast AT90s2313 dałem ATmege8, taktuje go wewnnetrznym oscylatorem 4MHz ponieważ portb jest zajęty dla wyświetlacza.
    Po uruchomieniu na wyświetlaczu pojawiają się "niepełne" cyfry coś podobne do 2 lub innej cyfry. Programu nie zmieniałem podłączyłem wszystko według schematu.Wyświetlacz podłączony tak: pinb.1 segment A, pinb.2 segment B itd.


    Code:

    $regfile "m8def.dat"
    $crystal = 4000000
    Config Portb = Output
    Config Portd = Output
    Portb = 255
    Portd = 127
    Dim Zmienna As Byte
    Dim Liczba As Byte
    Dim Jednosci As Byte
    Dim Dziesiatki As Byte
    Dim Temp As Byte
    Dim 1cyfra As Byte
    Dim 2cyfra As Byte
    Dim A As Byte
    Dim Odczyt(2) As Byte
    Dim T As Integer
    Portd.0 = 1
    Portd.1 = 0

    Config 1wire = Portd.0
    Liczba = 77

    Do
       1wreset : 1wwrite &HCC : 1wwrite &HBE                    'polecenie odczytu DS18x20
       Odczyt(1) = 1wread(2)                                    'odczytaj dwa pierwsze bajty - temperaturę
       T = Odczyt(2)                                            '          starszy bajt temperatury
       Shift T , Left , 8                                       'przesuń w lewo o 8 miejsc
       T = T + Odczyt(1)                                        'w zmiennej Integer jest dziwna "ułamkowa" wartość
       Shift T , Right , 4                                      'zamiast dzielić przez 16 przesuń w prawo
     '   Shift T , Right , 1       'dla kostek DS18S20, DS1820 przesuń o 1 bit



         1wreset                                                '   dopiero teraz daj polecenie konwersji:
         1wwrite &HCC                                           'polecenie SKIP ROM, bo pojedyncza kostka
         1wwrite &H44                                           '   dokonaj konwersji - zmierz temperaturę
                                                     'po cyklu pracy poczekaj
                                                     Liczba = T
                                                     Gosub Wyswietlanie
    Loop

    Wyswietlanie:
    Portd.1 = 1
    Gosub Oblicz
    For A = 0 To 125
    Dziesiatki:
    If Dziesiatki = 0 Then
    Portd.6 = 1
    Goto Jednosci
    End If
    Portb = 1cyfra
    Portd.6 = 0
    Waitms 3
    Jednosci:
    Portb = 2cyfra
    Portd.6 = 1
    Portb.0 = 0
    Waitms 3
    Next A
    A = 0
    Portd.1 = 0
    Return


    Oblicz:
    Temp = Makebcd(liczba)
    Jednosci = Temp And &B00001111
    Shift Temp , Right , 4
    Dziesiatki = Temp

    1cyfra = Lookup(dziesiatki , Tabela)
    2cyfra = Lookup(jednosci , Tabela)

    'Dziesiatki = Liczba / 10
    'Jednosci = Dziesiatki * 10
    'Jednosci = Liczba - jednosci

    Return


    End
    Tabela:
    Data 3 , 111 , 133 , 37 , 105 , 49 , 17 , 99 , 1 , 33

    0 2
  • Pomocny post
    #2 26 Lut 2010 17:43
    Krauser
    Poziom 26  

    Najpewniej w tabeli masz złe wartości. Przykładowo 0 ma tu kod 3=00000011B czyli na pewno portb.0 = 1 i portb.1 = 1 jeśli portb.1 jest podpięty pod segment A to jest błędnie.

    0