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

Pomoc w pisaniu programu atmega8 -Zegar+2 czujniki

28 Sie 2009 12:01 3868 3
  • Poziom 10  
    Witam z kolegą robimy projekt schemat już mamy
    Pomoc w pisaniu programu atmega8 -Zegar+2 czujniki
    Kod do obsługi termometru i wyświetlacza już mamy znaleziony w sieci i przerobiony
    na początku dodałem obsługę sda i scl lecz dalej nie wiem co robić to robiłem bez żadnej książki nie posiadam
    Code:

    'Stacja METEO
    $regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
    $crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
    'Deklaracja portów od wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
    Config Lcd = 16 * 4                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 4x16, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
    Config Clock = Soft , Gosub = Sectic
    Config Sda = Portc.4
    Config Scl = Portc.5
    '*************************************WAŻNE**********************************************
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
    Config 1wire = Portd.5                                      'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    Dim I4 As Integer

    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte
    Dim Dsid4(8) As Byte
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID
    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników

    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celsjusza

    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd "   Stacja Meteo    " ;                                    'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Wait 5
    Cls
    W = 1wirecount()
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Waitms 500
    Lowerline
    Lcd W
    Wait 3
                                                                'Znajdź pierwszy czujnik podpięty do portu
    Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
    Dsid2(1) = 1wsearchnext()                                   
    '*******************Odczyt numerów ID czujników temperatury*********************

    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia
     Locate 3 , 1
     Lcd "Czujnik 1 ID OK"
     Wait 1
     Locate 3 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2

    If Dsid2(8) = Crc8(dsid2(1) , 7) Then
     Locate 4 , 1
     Lcd "Czujnik 2 ID OK"
     Wait 1
     Locate 4 , 1
     For B = 1 To 8
     Lcd Hex(dsid2(b))
     Next
    End If
    Wait 2

    Cls
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Lowerline
    Lcd W


    Cls

    '*******************koniec odczytu ID czujników temperatury*********************

    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika
       1wwrite &HBE
       I1 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika
       1wwrite &HBE
       I2 = 1wread(2)
    '--------konwersja temp dla wszystkich dsow
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1

    '****Jeśli pracujesz z wyświetlaczem innym niż 4x16 to tutaj trzeba wprowadzić zmiany w LOCATE********

       I1 = I1 * 10
       I1 = I1 / 16
       'If I1 > 0 Then Cls                                       'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1                                             'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
       Lcd "Czujnik 1" ; Ss ; Chr(0) ;

       I2 = I2 * 10
       I2 = I2 / 16
       'If I2 > 0 Then Cls
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd "Czujnik 2" ; Ss ; Chr(0) ;



    Loop


    Bardzo proszę o jakieś wskazówki i jakiś przykładowy kod zegara jeszcze mam kilka pytań czy w kodzie np można dodać kod zegara pod ten od termometru czy nie
  • Poziom 14  
    Jeśli chodzi o atmege8 i zegar PCF8583 to zobacz tu
    https://www.elektroda.pl/rtvforum/viewtopic.ph...c+atmega+twi+na+przyk%B3adzie+zegara+led&sid=
    tylko że to jest w języku C, ale znajdziesz tam sposób adresowania zegara, i wiele innych rzeczy (po polsku! - między innymi opis PCF8583, opis magistrali TWI(i2c), oraz sposób połączenia atmegi i zegara). Co do zegara PCF8583 to kondensator 22pF (nóżka 1 i 8 PCF8583) decyduje o spieszeniu lub spóźnianiu się zegara. I tak bez tego kondensatora mój zegar spieszył się 18 sekund na dobę, gdy wstawiłem kondensator (po kilku próbach z różnymi kondensatorami) 8,2pF to spieszy mi się 1 sekundę na tydzień -> radzę ci dobrać ten kondensator indywidualnie.
    Życzę powodzenia w budowie i uruchamianiu twojego układu
    Piotr
  • Poziom 10  
    Dzięki za odpowiedz ale jednak w C nie pasuje mi kod prosił bym o jakieś wskazówki jak dodać do tego kodu z bascoma obsługę zegara
  • Poziom 25  
    Opis I2C masz na pewno w helpie do bascoma, razem z przykładami (helpa po polsku można znaleźć na google jak i na forum).

    A ogólnie dziesiątki kodów z tym zegarem w BASCOM jest dostępne na forum po wpisaniu w szukajce +PCF8583 +bascom.