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

Program w Bascom dla ATtiny2313: Sterowanie wentylatorem z DS18B20 bez wyświetlacza

dezmontnikus 12 Kwi 2008 15:52 3217 13
REKLAMA
  • #1 5022225
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    Witam...
    Na tym dziale piszę pierwszy raz i mam wielką prośbę do was. Zbudowałem układ z tej strony:

    http://www.portalnaukowy.edu.pl/termometr_cyfr.htm

    Wszystko fajnie ale wyświetlacz mi nawalił i potrzebuję chętnego który za 50pk. :) napisze program do Bascom który w tym układzie(płytce) bez potrzeby wyświetlania na wyświetlaczu będzie uruchamiał wentylatory przy 40 stopniach. ATtiny2313 po przekroczeniu 40 stopni na czujniku DS18B20 pokaże sygnał na 1 pinie swojego układu, jak temperatura spadnie poniżej 40 to sygnał z ATtiny2313 zniknie. Wyświetlacz wywaliłem więc nie ma potrzeby pisać kodu do wyświetlacza. Jest to bardzo ważne dla mnie i proszę was o pomoc
    Pozdrawiam
  • REKLAMA
  • #2 5022940
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    'Jednopunktowy termometr z czujnikiem DS18B20
    'www.portalnaukowy.edu.pl
    'Program na podstawie kursu z ksišżki "Mikrokontrolery dla Poczštkujšcych" Pana Piotra Góreckiego
    
    $crystal = 4000000						'deklaracja częstotliwo�ci pracy kwarcu
    
    $regfile "attiny2313.dat"					'model procesora dla którego jest ten program
    Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32        ' definicja znaki stopnia
    
    
    Config 1wire = Portd.5         
    config pinX.N = output                             ' konfiguracja portu PD.5 jako wej�cia magistrali 1-wire
    
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
    'Deklaracja wszystkich zmiennych potrzebnych do pracy programu
    
    Do
      1wreset                                                   'reset
      1wwrite &HCC                                              'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
      1wwrite &H44                                              'dokonaj konwersji
      Waitms 750                                                'przeczekaj czas konwersji
      1wreset                                                   'reset
      1wwrite &HCC                                              'rozkaz adresowy SKIP ROM
      1wwrite &HBE                                              'rozkaz funkcyjny - polecenie odczytu DS18x20
      Odczyt(1) = 1wread(2)                                     'odczytaj dwa pierwsze bajty
      T = Odczyt(2)                                             'przepisz starszy bajt do zmiennej typu Integer
      Shift T , Left , 8                                        'przesuń ten bajt w lewo na wyższe pozycje
      T = T + Odczyt(1)                                         'przepisz - dodaj młodszy bajt
    
      T1 = T * 0.0625                                               'wyra� w stopniach Celsjusza, wynik wpisz do zmiennej Single
    if t1>40 then
    PORTX.N = 1
    else
    PORTX.N=0
    end if
    Napis = Fusing(t1 , "#.#")
      Cls : Cursor Off : Lcd "* Temperatura *"
      Lowerline
      Lcd "Wynik: " ; Napis ; " " ; Chr(1) ; "C"                'wy�wietl wynik ze zmiennej Single
    Loop : End
    
    'Powodzenia


    Powinno wystarczyć, chyba, że potrzeba histerezy.
    Zamieć oczywiście X i N na odpowiedni PORT i numer pinu.
  • #3 5023372
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    to ma tak wyglądać?

    Cytat:
    'Jednopunktowy termometr z czujnikiem DS18B20
    'www.portalnaukowy.edu.pl
    'Program na podstawie kursu z ksišżki "Mikrokontrolery dla Poczštkujšcych" Pana Piotra Góreckiego

    $crystal = 4000000 'deklaracja częstotliwo?ci pracy kwarcu

    $regfile "attiny2313.dat" 'model procesora dla którego jest ten program
    Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32 ' definicja znaki stopnia


    Config 1wire = Portd.5
    Config Pin 11.7 = Output ' konfiguracja portu PD.5 jako wej?cia magistrali 1-wire

    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
    'Deklaracja wszystkich zmiennych potrzebnych do pracy programu

    Do
    1wreset 'reset
    1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
    1wwrite &H44 'dokonaj konwersji
    Waitms 750 'przeczekaj czas konwersji
    1wreset 'reset
    1wwrite &HCC 'rozkaz adresowy SKIP ROM
    1wwrite &HBE 'rozkaz funkcyjny - polecenie odczytu DS18x20
    Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
    T = Odczyt(2) 'przepisz starszy bajt do zmiennej typu Integer
    Shift T , Left , 8 'przesuń ten bajt w lewo na wyższe pozycje
    T = T + Odczyt(1) 'przepisz - dodaj młodszy bajt

    T1 = T * 0.0625 'wyra? w stopniach Celsjusza, wynik wpisz do zmiennej Single
    if t1>40 then
    Portx.7 = 1
    else
    Portx.7 = 0
    end if
    Napis = Fusing(t1 , "#.#")
    Cls : Cursor Off : Lcd "* Temperatura *"
    Lowerline
    Lcd "Wynik: " ; Napis ; " " ; Chr(1) ; "C" 'wy?wietl wynik ze zmiennej Single
    Loop : End

    'Powodzenia


    Błędy mi wywala. Zrób na obojętnie jakim pinie i napisz mi jaki to będzie. Z mikroklockami to ja dopiero zaczynam

    PS. Jak można sprawdzić ten czujnik czy jest dobry? chociaż czy układ działa poprawnie
  • REKLAMA
  • #4 5023598
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    dezmontnikus napisał:
    to ma tak wyglądać?

    Błędy mi wywala. Zrób na obojętnie jakim pinie i napisz mi jaki to będzie. Z mikroklockami to ja dopiero zaczynam

    PS. Jak można sprawdzić ten czujnik czy jest dobry? chociaż czy układ działa poprawnie


    
     'Jednopunktowy termometr z czujnikiem DS18B20
    'www.portalnaukowy.edu.pl
    'Program na podstawie kursu z ksišżki "Mikrokontrolery dla Poczštkujšcych" Pana Piotra Góreckiego
    
    $crystal = 4000000 'deklaracja częstotliwo?ci pracy kwarcu
    
    $regfile "attiny2313.dat" 'model procesora dla którego jest ten program
    Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32 ' definicja znaki stopnia
    
    
    Config 1wire = Portd.5
    Config Pinb.2 = Output ' konfiguracja portu PD.5 jako wej?cia magistrali 1-wire
    
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single , Napis As String * 5
    'Deklaracja wszystkich zmiennych potrzebnych do pracy programu
    
    Do
    1wreset 'reset
    1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
    1wwrite &H44 'dokonaj konwersji
    Waitms 750 'przeczekaj czas konwersji
    1wreset 'reset
    1wwrite &HCC 'rozkaz adresowy SKIP ROM
    1wwrite &HBE 'rozkaz funkcyjny - polecenie odczytu DS18x20
    Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
    T = Odczyt(2) 'przepisz starszy bajt do zmiennej typu Integer
    Shift T , Left , 8 'przesuń ten bajt w lewo na wyższe pozycje
    T = T + Odczyt(1) 'przepisz - dodaj młodszy bajt
    
    T1 = T * 0.0625 'wyra? w stopniach Celsjusza, wynik wpisz do zmiennej Single
    if t1>40 then
    Portb.2 = 1
    else
    Portb.2 = 0
    end if
    Napis = Fusing(t1 , "#.#")
    Cls : Cursor Off : Lcd "* Temperatura *"
    Lowerline
    Lcd "Wynik: " ; Napis ; " " ; Chr(1) ; "C" 'wy?wietl wynik ze zmiennej Single
    Loop : End
    
    'Powodzenia
    
    


    Powinno działać na pinie PINb.2
  • #5 5023640
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    Trochę jest za długi można coś skrócić? Wywalić?

    PS. Coś jest nie tak bo wyskakuje błąd

    Error:344 Line:36 Program will overwirte bootloader [16 to long]
  • #6 5023747
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Bootloader? Jak to wgrywasz?

    Dodano po 2 [minuty]:

    Można skrócić.
    
    
     'Jednopunktowy termometr z czujnikiem DS18B20
    'www.portalnaukowy.edu.pl
    'Program na podstawie kursu z ksišżki "Mikrokontrolery dla Poczštkujšcych" Pana Piotra Góreckiego
    
    $crystal = 4000000 'deklaracja częstotliwo?ci pracy kwarcu
    
    $regfile "attiny2313.dat" 'model procesora dla którego jest ten program
    
    
    Config 1wire = Portd.5
    Config Pinb.2 = Output ' konfiguracja portu PD.5 jako wej?cia magistrali 1-wire
    
    Dim Odczyt(2) As Byte , A As Byte , Licznik As Byte , T As Integer , T1 As Single 
    'Deklaracja wszystkich zmiennych potrzebnych do pracy programu
    
    Do
    1wreset 'reset
    1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
    1wwrite &H44 'dokonaj konwersji
    Waitms 750 'przeczekaj czas konwersji
    1wreset 'reset
    1wwrite &HCC 'rozkaz adresowy SKIP ROM
    1wwrite &HBE 'rozkaz funkcyjny - polecenie odczytu DS18x20
    Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
    T = Odczyt(2) 'przepisz starszy bajt do zmiennej typu Integer
    Shift T , Left , 8 'przesuń ten bajt w lewo na wyższe pozycje
    T = T + Odczyt(1) 'przepisz - dodaj młodszy bajt
    
    T1 = T * 0.0625 'wyra? w stopniach Celsjusza, wynik wpisz do zmiennej Single
    if t1>40 then
    Portb.2 = 1
    else
    Portb.2 = 0
    end if
    Loop : End
    
    'Powodzenia
    
    
  • #7 5023766
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    Normalnie przez bascom. Najpierw biorę "Compile program " potem program chip ale po compile program wyskakuje błąd taki jak widzisz powyżej

    PS. NO i nie działa może coś z czujnikiem mam ale jak go wyjmę to jest to samo dioda się cały czas świeci. Diodę pod podłączyłem przez rezystor 1k na złączu 19 attiny2313. Programowałem drugiego procka bo myślałem ze ten jest spalony ale ten sam efekt.
  • REKLAMA
  • #9 5023985
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    Wiem... a wyświetlacz nie działa bo mi się uszkodził przy wmontowywaniu go w obudowę.
  • REKLAMA
  • #11 5023994
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    Nic nie zmieniałem.
  • #12 5023999
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    No to masz ustawione 1MHz RC a podajesz mu, że powinno być 4MHz... Przestaw fusy na zew. kwarc (jeśli go tam masz), Albo wpisz w bascomie taką F jaką masz w tej chwili w tinnym (CKDIV8?).
  • #13 5024009
    dezmontnikus
    Poziom 21  
    Posty: 590
    Pomógł: 3
    Ocena: 16
    Balu możesz bardziej mi objaśnić bo ja wiem tak z grubsza co to jest. Kwarc mam zewnętrzny.

    PS. Mam kwarc 4Mhz zewnętrzn
    y ale która pozycje wybrać w fuze ? A fusebit ma być na 1 czy 0
  • #14 5024071
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    LOL:)Bascom-> programuj ręcznie -> Fusebits -> tam powinno być gdzieś w comboBoxie do wyboru External XTAL (CKSEL na 1111 jeśli dobrze pamiętam)

Podsumowanie tematu

✨ Dyskusja dotyczy programu w Bascom dla mikrokontrolera ATtiny2313, który ma sterować wentylatorem na podstawie pomiaru temperatury z czujnika DS18B20, bez użycia wyświetlacza. Autor potrzebuje prostego kodu, który załączy sygnał na wyjściu mikrokontrolera po przekroczeniu 40°C i wyłączy go po spadku temperatury poniżej tej wartości. W odpowiedziach udostępniono przykładowy kod obsługi DS18B20 w Bascom, jednak pojawiły się problemy z błędem kompilacji związanym z nadpisaniem bootloadera oraz z konfiguracją fusebitów i częstotliwością kwarcu. Zalecane jest ustawienie fusebitów na zewnętrzny kwarc 4 MHz (External XTAL, CKSEL=1111) oraz dostosowanie deklaracji częstotliwości w programie do faktycznego taktowania mikrokontrolera. Poruszono także kwestie testowania czujnika DS18B20 i poprawnego podłączenia diody sygnalizacyjnej. Ostatecznie wskazano, że problem z błędem kompilacji i działaniem układu może wynikać z nieprawidłowej konfiguracji fusebitów i częstotliwości pracy mikrokontrolera.
Wygenerowane przez model językowy.
REKLAMA