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

Attiny2313-DS1820-Uart Problem bascom

Macias871 14 Gru 2008 14:21 2048 4
REKLAMA
  • #1 5857590
    Macias871
    Poziom 12  
    Witam wszystkich. Tak jak w temacie mam problem z komunikacją tych elementów. Jest to maly nadajnik(czujnik temperatur) ktory ma wysylac dane o tmperarurze. I teraz Problem: Samym uart-em moge wysylac jakies dane bez problemu, ale gdy napisze obsluge do ds1820 to juz nic nie wysyla, co może byyc zle w tym kodzie.

    
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    Config Portd.5 = Input
    Config Portd.1 = Output
    
    
    
    
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $baud = 300
    Config 1wire = Portd.5
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , B As String * 5
    
    
    do
      1wreset
      1wwrite &HCC
      1wwrite &H44
      Wait 1
      1wreset
      1wwrite &HCC
      1wwrite &HBE
      Odczyt(1) = 1wread(2)
      T = Odczyt(2)
      Shift T , Left , 8
      T = T + Odczyt(1)
    
      T1 = T * 0.0625                                           '
    
    B = Fusing(t1 , "#.#")
    
    Print B
    Waitms 200
    Loop 
    End
    
  • REKLAMA
  • #2 5857720
    dawid512
    Poziom 32  
    Przy tym kwarcu optymalna prędkość transmisji to np. 9600. Następne pytanie to czy masz na pewno te 8MHz? Po za tym brakuje ci pętli a dokładnie "do".
  • REKLAMA
  • #3 5858155
    Macias871
    Poziom 12  
    Tzn. 'do' zapomnialem dopisac za nim skopiowalem bo zmienialem na rozne kombinacje i zapomnialem dopisac ale i tak nie dziala. Jezeli chodzi o predkosc to na niej moge przesylac liczby bez problemu, np. 123. A mam taką malą bo mam kiepskiej jakosci modul rf i przy tej predkosci dziala dobrze. A te 8nhz mam z wewnetrznego osc. Tak jak wspomnialem to problem pojawiają sie gdy chcę przeslac wartosc temperatury. Ds1820 podłączylem do pd.5
  • REKLAMA
  • #4 5861345
    PioTherm
    Poziom 15  
    Witam,

    Dla sprawdzenia zostaw kod w takiej postaci jak masz.
    Zmień tylko linijki
    config pind.5 = input
    config 1Wire = pind.5

    Jesli to nie pomoże to:
    zamień jeszcze:
    PRINT B na np PRINT "123"

    i zobaczysz czy odczyt 1Wire wpływa na port UART.
  • #5 5862208
    Macias871
    Poziom 12  
    Zmienilem na takie cos i wogole nic nie wysyla, wiec cos gdzies sie zatrzymuje..

    
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    Config Pind.5 = Input
    Config Portd.1 = Output
    
    
    
    
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $baud = 300
    Config 1wire = Pind.5
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , B As String * 5
    
    
    Do
      1wreset
      1wwrite &HCC
      1wwrite &H44
      Wait 1
      1wreset
      1wwrite &HCC
      1wwrite &HBE
      Odczyt(1) = 1wread(2)
      T = Odczyt(2)
      Shift T , Left , 8
      T = T + Odczyt(1)
    
      T1 = T * 0.0625                                           '
    
    B = Fusing(t1 , "#.#")
    
    Print "123"
    
    Waitms 200
    Loop
    End
    


    Dodano po 2 [godziny] 3 [minuty]:

    Trochę zmienilem program do 1wire i teraz dziala.

    
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    Config Portd.5 = Input
    Config Portd.1 = Output
    
    
    
    
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $baud = 300
    Config 1wire = Portd.5
    Declare Sub Odcz_temp                                       'procedura odczytu temperatury
          'z układu DS1820
    Dim Temperatura(2) As Byte                                  'tablica dwóch zmiennych typu
          'Byte do pamiętania wartości
          'temperatury
    'definicja znaku stopnia
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
    
    Do                                                          'początek pętli programu
     Call Odcz_temp                                             'wywołanie procedury pomiaru
          'temperatury
     Cls                                                        'czyszczenie ekranu LCD
     If Temperatura(2) = 0 Then                                 'jeśli wartość Temperatura(2)=
          '=0, to temperatura dodatnia
          'wyświetla temperatury dodatnie
      Print Temperatura(1)
     Else                                                       'w przeciwnym razie
          'wyświetla temperatury ujemne
      Print "-" ; Temperatura(1)
     End If
    Loop                                                        'koniec pętli Do...Loop
    End                                                         'koniec programu
    
    Sub Odcz_temp                                               'definicja procedury pomiaru
          'temperatury
     1wreset                                                    'reset magistrali 1-Wire
     1wwrite &HCC                                               'opuszczenie zapisu numeru ID
     1wwrite &H44                                               'start pomiaru temperatury
     Waitms 750                                                 'opóźnienie na czas pomiaru
     1wreset                                                    'reset magistrali 1-Wire
     1wwrite &HCC                                               'opuszczenie zapisu numeru ID
     1wwrite &HBE                                               'komenda odczytu zmierzonej
          'temperatury
     Temperatura(1) = 1wread(2)                                 'odczyt zmierzonej temperatury
          'do tablicy Temperatura
     1wreset                                                    'reset magistrali 1-Wire
     If Err = 1 Then                                            'jeśli układ dołączony do
          'magistrali nie odpowiada, to
      Cls                                                       'czyszczenie LCD
      Lcd "Brak ukladu"                                         'wyświetlenie komunikatu o braku
          'dołączonego układu
      Do                                                        'nieskończona pętla w celu
          'wstrzymania działania programu
      Loop
     End If
     If Temperatura(2) > 0 Then                                 'jeśli zmienna Temperatura(2)
          '> 0, to temperatura ujemna
          'przeliczenie temperatury
          'ujemnej
      Temperatura(1) = 256 - Temperatura(1)
     End If                                                     'koniec warunku
     Temperatura(1) = Temperatura(1) / 2
          'dalsze przeliczenie odczytanej
          'temperatury dodatniej jak
          'i ujemnej
    End Sub
    


    Proszę poprawić pisownię.
    Robak
REKLAMA