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

Jak napisać kod w Bascom 8051 dla czujnika LM35 i wyświetlacza LCD?

marcin-k 02 Gru 2005 19:23 5950 23
  • #1 2047609
    marcin-k
    Poziom 15  
    Posty: 255
    Ocena: 38
    koledzy czy ktoś może mi pomuc w opracowaniu listingu pod bascomem 8051 na miernik temperatury na czujniku lm 35 . jakies sugestie jak zrobuć najprostrzy przetwornik analogowo cyfrowy interesuje mnie rozdzielczość 1 stopień a zakres od 0 do ok 100 stopni chciałbym zbudować sterownik pieca c.o z resztą sobie poradze tylko ta tempera niewiem jak podejść do tego zagadnienia , żeby wynik pokazywany był na wyświetlaczu lcd
  • #2 2049400
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    Witam

    Sprawa generalnie dość prosta a tym bardziej że masz zakres od 0 do 100 stopni Celsjusza z rozdzielczością 1 st.
    W pierwszej kolejności należy zasilić czujnik napieciem np. 5V - tym samym co procesor, Podłączyć woltomierz na zakres 2V i mierzyć temperaturę. Sposób prezentacji wyniku w tym wypadku jest chyba znany i nie trzeba go opisywać. Następnie wyjście z LMa podpiąć pod wejście przetwornika w procesorze (zakładam, że używasz jakiegoś AVRa z przetwornikiem AC). Piszesz odczyt z przetwornika zgodnie z tym co jest w pliku pomocy i otrzymujesz jakąś wartość na wyświetlacz - nie temperaturę !!!. Następnie wartość tę przeliczasz na temperaturę i po kłopocie.

    Uwagi
    Warto zastosować jako napięcie referencyjne np. napięcie 2.5V lub jeszcze lepiej 1.25V. Spowoduje to, że uzyskasz wymagany zakres pomiarowy z dużą dokładnością. Po uśrednieniu dokładność pomiaru wyniesie 0.5 st.C czyli lepiej niż zakładałeś. Warto wspomnieć, że przy pojedyńczym napięciu zasilania zakres pomiarowy to 2 do 100 st. C. ale o tym co i jak wyczytasz w nocie katalogowej.
    Uzyskany wynik będziesz musiał jeszcze "obrobić" zgodnie z potrzebami : wyświetlanie z rozdzielczością do 1 st. lub lepszą

    pozdrawiam
  • #3 2049802
    marcin-k
    Poziom 15  
    Posty: 255
    Ocena: 38
    Może dorzucę schemat jak ja myślałem to zrobić, więc po kolei
    Wyobrażam sobie to tak przetwornik AC jest na wewnętrznym komparatoże
    Układu 2051 lub 4051 z wyjścia p1,2 w programie za pomocą instrukcji for next
    Są podawane impulsy o takiej samej długości, lecz coraz dłuższej przerwie to jest podawane na kondensator C1 przez opór R2 w konsekwencji C1 będzie się ładował liniowo do określonego napięcia, jeśli na LM35 będzie takie samo napięcie to program ma przeliczyć wartość na temperaturę, zapomniałem dodać, że przed każdym cyklem
    Program ma wystawić na porcie p3,7 jedynkę po to aby rozładować kondensator do zera przed pomiarem przekaźniki k1 i k2 mają sterować pompką i wentylatorem z dalszą częścią programu poradzę sobie ale nie wiem jak napisać tą część programu przeliczającą temperaturę . Jeśli ktoś może pomóc w tym temacie to byłbym bardzo wdzięczny może można to rozwiązać prościej. Wiem, że można to wykonać na przetwornikach specjalizowanych, ale to musi być jak najprościej i jak najtaniej. Proszę o jakiś fragmęt
    Listingu najlepiej w bascomie
    Załączniki:
    • Jak napisać kod w Bascom 8051 dla czujnika LM35 i wyświetlacza LCD? aa.GIF (30.24 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 2049846
    rezi_ar
    Poziom 17  
    Posty: 166
    Pomógł: 21
    Ocena: 9
    witam
    a może prościej będzie na DS18B20 lub DS18S20
    nie ma skalowania, tempetatura podawana jest w sposob cyfrowy,
    a na samej elektrodzie jest pewnie kilka modułów do komunikacji z tym DS'em

    rezi
  • #6 2050800
    rezi_ar
    Poziom 17  
    Posty: 166
    Pomógł: 21
    Ocena: 9
    lm 3,50 w TME
    ds 10,50 w TME, 7,50 na allegro

    robiłem czujniki temperatury na lm35 i lm135, ale stosowałem zewnętrzny przetwornik A/C - tlc549 ... szkoda zachodu
    lepsze są ds'y
    rezi
  • #7 2051913
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    cyberdar napisał:
    (zakładam, że używasz jakiegoś AVRa z przetwornikiem AC)


    Chyba nie doczytałeś że kolega chce użyć z 8051. Więc bez przetwornika A/C się nie obejdzie jeżeli to koniecznie ma być LM35.

    Podobno DS'y nie są zbyt stabilne chociaż ja tego nie zauważyłem, więc je polecam o ile możesz je użyć. DS18B20 jest dobry gdyż wyliczanie ujemnych temperatur jest proste.
  • #9 2053227
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Jeżeli koniecznie mają być te elementy to musisz dodać jeszcze przetwornik A/C jakiś zewnętrzny
  • #11 2053444
    jony15
    Poziom 25  
    Posty: 604
    Pomógł: 68
    Ocena: 74
    nie tak prosta. liniowosć tego przetwornika pozostawia BARDZO wiele do życzenia, jesli jakis przetwornik to polecam tlc549 ewentualnie możesz coś działać pod kątem PCF8591, lub też poszukać z maxima. pozdrawiam
  • #12 2053851
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    oczywiście że wykorzystanie instrukcji z Bascoma Getad2051 , pozostawia wiele do życzenia , dlatego cały czas namawiamy autora na przetwornik zewnętrzny A/C , ja mogę polecić ADC0831 , 0832 lub pójść inną drogą przetwornik temperatura / częstotliwość , wszystko zależy na co autor się zdecyduje
    może zobacz to http://chaokhun.kmitl.ac.th/~kswichit/thermo/digithermo.htm
  • #13 2054014
    marcin-k
    Poziom 15  
    Posty: 255
    Ocena: 38
    może kolega więcej coś powie na temat przetwornika temperarura częstotliwość jak rozumiem napięcie z czujnika zmienia częstotliwość i interpretuje ją na kod BCD strona jest ciekawa szkoda że nie po polsku ale materiały biorę do domu aby to jakoś przetłumaczyć
  • #16 2058021
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    ja powiem tak że dobrym pomysłem było by zastosowanie ATmega8.
    ma on wbudowany przetwornik cyfrowo analogowy, niejest dużo droższy (około 8PLN) i niepotrzebuje kwarcu który kosztuje 1,5PLN.
    tak że kosztów to mocno nie zawyży a da duże możliwości.

    jedyną przeszkoda będzie nieznajomość ich archiektóry.
    jeśli kolega potrafi się nimi bawić to może to być dobry pomysł

    Pozdrawiam
  • #17 2059579
    ficek
    Poziom 12  
    Posty: 57
    Pomógł: 1
    Ocena: 3
    Witam
    Wydaje mi się że przy takiej zakładanej dokładności to stosowanie zewnętrznych przetworników A/C to chyba przerost formy nad treścią i niepotrzebna komplikacja układu. W zupełności wystarczy wbudowany komparator. Można mierzyć czas ładowania kondensatora do napięcia Vcc lecz takie ładowanie jest nieliniowe i dość kłopotliwe w interpretacji. Lepiej jest zastosować źródło prądoe i ładowaie kondensatora stałym prądem, wtedy zależność napięcie na kondensatorze jest liniową funkcją czasu i wyraża się wzorem Uc=I*t/C, gdzie I stały prąd źródła, C pojemność mierzonego kondensatora. Źródło prądowe w najprostszej konfiguracji lustra prądowego, dodatkowy tranzystor sterowany z portu kontrolera i wystarczy. Dokładność pomiaru z dużym zapasem.
    Pozdrawiam
  • #19 2063965
    marcin-k
    Poziom 15  
    Posty: 255
    Ocena: 38
    dodaje jeszcze raz schemat zmodyfikowany o źródło prądowe na tranzystorze t1 czy tak ma to mniejwięcej wyglądać jeśli ktoś może pomóc to bardzo proszę jak mam to napisać w bascomie 8051 z resztą sobie poradze tylko ten wycinek programu niweczy mi wszystko
    Załączniki:
    • Jak napisać kod w Bascom 8051 dla czujnika LM35 i wyświetlacza LCD? proba-gif.GIF (34.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #20 2065209
    Darwin77
    Poziom 1  
    Posty: 1
    www.csd-electronics.de/de
  • #22 2079030
    PIOTR111
    Poziom 16  
    Posty: 279
    Pomógł: 9
    Ocena: 47
    Witam wszystkich mimo, że temat już zamknięty
    Mam taką prośbę do kolegi, który temat rozwiązał
    Z pewnością jest wiele osób, które chętnie zapoznałyby się
    z tym układem.
    Może się podzielisz na forum procedurą do obsługi czujnika lm35
    Zainteresowanie tematem jest dosyć spore (licznik odwiedzin)
    PIOTR
  • #23 2084665
    marcin-k
    Poziom 15  
    Posty: 255
    Ocena: 38
    może program nie jest bardzo dopieszczony ale działa . więc po kolei
    nie używam przerwań choć powinienem należy poprawić jeszcze pomiar temperatury ponieważ przy mniej niż 5 stopni czujnik nieco zawyża do jednej linijki należy dodać komende aby wynik z zmiennej był jeszcze odejmowany o 2 i sprawa załatwiona roździelczość to 1 stopień kalibracja polega na ustawieniu R17 tak aby wskazania temperatury były poprawne z jakimś wzorcowym termometrem
    algorytm programu jest taki że po włączeniu zasilania wentylator jest włączany z poślizgiem ok 10 sek i prubóje rozdmuchać żar musi to zrobić w około 55 minut jest to czas po którym sterownik wyłączy wszystko i wyświetli komunikat brak opału czas był dobrany z zapasem do mojego pieca jeśli przed czasem a powinien to bez problemów osiągnąć osiągnie temperaturę zadaną to wyłącza wentylator i czeka aż temperatura spadnie o 1 stopień od zadanej i załącza wentylator znowu jest to taka chistereza programowa to samo tyczy się pompki tyle że pompkę ustawiamy sobie indywidualnie przy jakiej temperaturze ma się wyłączyć powyżej tej temperatury pompka cały czas chodzi opis menu zmianę temperatury pieca od 30 do 90 ustawiamy S3 i S1 bespośrednio ustawienie pompki wciskamy menu i ustawiamy góra S1 dół S3 następnie wciskamy enter jeśli nie wciśniemy entera tylko drugi raz menu to wchodzimy do trybu ręcznego wyjście z tego to enter w trybie ręcznym mamy pęłną kontrole nad pompką i wentylatorem czyli załączenie wentylatora to S3 drugie wciśnięcie S3 wyłącza go pompka obsługiwana jest S1 ale tryb ręczny jest aktywny tylko do temperatury jaką ustawiliśmy wcześniej na piecu po przekroczeniu jej sterownik automatycznie z niej wychodzi w tryb automatyczny jest to taki rodzaj zabezpieczenia jeśli ktoś np. zapomni że wszedł w ten tryb a w piecu się pali i napewno istniało by duże prawdopodobieństwo jakiegoś nieszczęścia jak zagotowania wody powyżej 95 st celcjusza sterownik załącza buzer wyłącza obowiązkowo wentylator a załącza pompkę i wyświetla stosowny komunikat o niebezpieczeństwie sterownik testuje nie długo ale spisuje się znakomicie jestem na etapie pisania dodatkowych funkcji i usprawnień jeśli ktoś jest zainteresowany to przesyłam schemat finalny + program zaznaczam że jest to narazie tylko prototyp ale pracuję nadtym



    'STEROWNIK PIECA C.O WERSJA 4 WIELKOSC KODU TO 2364 BAJTOW
    'W STOSUNKU DO WERSJI 3 DODANO LICZNIK OPALU , KTORY JEST USTAWIONY NA
    'OKOLO 50 MINUT POTYM CZASIE STEROWNIK PRZECHODZI W USPIENIE, CZAS ZALACZENIA I WYLACZENIA
    'POMPKI ORAZ WENTYLATORA ODBYWA SIE Z POSLIZGIEM OKOLO 10 SEKUND
    'DOMYSLNE WARTOSCI POMPKI USTAWIONE NA 35 STOPNI A PIECA NA 50 STOPNI
    'DODANO STEROWANIE RECZNE WENTYLATORA ORAZ POMPKI JEDNAK JESLI TEMPERATURA
    'NA PIECU PRZEKROCZY 50 STOPNI PROGRAM PRZECHODZI W CYKL AUTOMATYCZNY ,
    'CZYLI PRZEJMUJE KONTROLE NAD STEROWANIEM POMPKI I WENTYLATORA

    '$sim
    $regfile = "89C4051.DAT"
    $large
    Config Lcd = 16 * 2
    Cursor Off
    Config Lcdpin = Pin , Db4 = P3.3 , Db5 = P3.2 , Db6 = P3.1 , Db7 = P3.0 , E = P3.4 , Rs = P3.5
    Dim P As Bit 'ZMIENNA POROWNAWCZA POMPKI
    Dim W As Bit 'ZMIENNA POROWNAWCZA WENTYLATORA
    Dim I As Bit 'ZMIENNA POROWNAWCZA
    Dim A As Word 'LICZNIK TEMPERATURY
    Dim Aa As Word 'WYNIK TEMPERATURY
    Dim Licznik_opalu As Word 'ZMIENNA NA KTOREJ JEST LICZONY OPAL
    Dim Aaaa As Word 'ZMIENNA NA KTOREJ JEST WARTOSC USTAWIONA
    Dim Went As Byte 'ZMIENNA POROWNUJACA ZAKRES WENTYLATORA
    Dim Pompka As Byte
    Dim Czas_pompki As Byte 'DODANO
    Dim Czas_wentylatora As Byte 'DODANO
    Dim Temp_przekroczona As Byte
    Declare Sub Czekaj_200_ms 'ETYKIETA CZEKAJ 200ms
    Declare Sub Pomiar_temperatury 'ETYKIETA POMIAR TEMPERATURY
    Declare Sub Menu_lcd
    Declare Sub Oblicz_wyswietl
    Declare Sub Opal

    I = 0 'LICZNIK OPALU
    A = 0
    Aa = 0
    Licznik_opalu = 0
    Aaaa = 50 'TEMPERATURA KOTLA ZADANA DOMYSLNIE NA 50 STOPNI
    Pompka = 35 'TEMPERATURA POMPKI ZADANA DOMYSLNIE NA 35 STOPNI
    Czas_pompki = 0
    Czas_wentylatora = 0
    Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' SYMBOL STOPNI CELCJUSZA


    Reset P1.6 'WYLACZ POMPE
    Set P1.7 'WLACZ WENTYLATOR
    Reset P3.7 'WYLACZ TRANZYSTOR ROZLADOWUJACY
    Cls
    Lcd "MARCIN KOLODZIEJ"
    Lowerline
    Lcd "PALACZ C.O wer.1"
    Wait 2 'CZEKAJ 1 SEKUNDE

    Cls

    Do
    If P1.4 = 0 Then 'JESLI WCISNIETO MENU S2 MENU
    Call Menu_lcd 'SKOCZ DO ETYKIETY MENU LCD
    End If

    If P1.3 = 0 Then 'JESLI WCISNIETO GORA S1
    Incr Aaaa 'ZWIEKSZ ZMIENNA AAAA O 1
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
    End If

    If Aaaa => 90 Then 'JESLI PRZEKROCZY 90 STOPNI
    Aaaa = 90 'ZAPISZ DO AAAA 90
    End If

    If P1.5 = 0 Then 'JESLI WCISNIETO DO DOLU S3
    Decr Aaaa 'ZMNIEJSZ ZMIENNA AAAA O 1
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
    End If

    If Aaaa =< 30 Then 'JESLI AAAA JEST 30 LUB MNIEJ
    Aaaa = 30 'ZAPISZ DO AAAA 30
    End If


    If Aa > Aaaa Then 'JESLI TEMPERATURA JEST WIEKSZA ZADANEJ
    If Czas_wentylatora => 60 Then 'JESLI CZAS WYLACZENIA OSIAGNA (OKOLO) 10 SEKUND
    Czas_wentylatora = 0 'WYZERUJ WARTOSC
    Reset P1.7 'WYLACZ WENTYLATOR
    I = 0 'ZMIENNA LICZNIK OPALU = 0
    End If
    End If

    If Aa < Aaaa Then 'JESLI TEMPERATURA JEST MNIEJSZA ZADANEJ
    If Czas_wentylatora => 60 Then 'JESLI CZAS WLACZENIA OSIAGNA (OKOLO) 10 SEKUND
    Czas_wentylatora = 0 'WYZERUJ WARTOSC
    Set P1.7 'ZALACZ WENTYLATOR
    I = 1 'ZMIENNA LICZNIK OPALU = 1
    End If
    End If

    If Pompka < Aa Then 'SPRAWDZ CZY NASTAWA POMPKI < NASTAWIE TEMPERATURY
    If Czas_pompki => 60 Then 'JESLI CZAS WYLACZENIA OSIAGNA (OKOLO) 10 SEKUND
    Czas_pompki = 0 'WYZERUJ WARTOSC
    Set P1.6 'ZALACZ POMPKE
    End If
    End If

    If Pompka > Aa Then 'SPRAWDZ CZY NASTAWA POMPKI JEST MNIEJSZA OD TEMPERATURY
    If Czas_pompki => 60 Then 'JESLI CZAS WYLACZENIA OSIAGNA (OKOLO) 10 SEKUND
    Czas_pompki = 0 'WYZERUJ WARTOSC '
    Reset P1.6 'WYLACZ POMPKE
    End If
    End If
    '..................................................
    If Aa < Aaaa Then 'JESLI TEMPERATURA PIECA JEST MNIEJSZA OD ZADANEJ
    Incr Czas_wentylatora 'ZWIEKSZ LICZNIK CZAS WENTYLATORA
    End If

    If Aa > Aaaa Then 'JESLI TEMPERATURA PIECA JEST WIEKSZA OD ZADANEJ
    Incr Czas_wentylatora 'ZWIEKSZ LICZNIK CZAS WENTYLATORA
    End If
    '..................................................
    If Pompka < Aa Then 'SPRAWDZ CZY NASTAWA POMPKI < NASTAWIE TEMPERATURY
    Incr Czas_pompki 'ZWIEKSZ LICZNIK CZASU POMPKI
    End If

    If Pompka > Aa Then 'SPRAWDZ CZY NASTAWA POMPKI > NASTAWIE TEMPERATURY
    Incr Czas_pompki 'ZWIEKSZ LICZNIK CZASU POMPKI
    End If
    '..................................................

    If Aa => 95 Then 'JESLITEMPERATURA PIECA JEST =LUB > OD 90 STOPNI
    Reset P1.2 'ZALACZ BUZER
    Reset P1.7 'WYLACZ WENTYLATOR
    Set P1.6 'ZALACZ POMPKE
    Cls
    Lcd " TEMP- PIECA"
    Lowerline
    Lcd "!!PRZEKROCZONA!!"
    Wait 1 'CZEKAJ 1 SEKUNDE
    Set P1.2 'WYLACZ BUZER
    Wait 1 'CZEKAJ 1 SEKUNDE
    End If

    Call Opal 'SKOCZ DO ETYKIETY OPAL
    Call Pomiar_temperatury 'SKOCZ DO ETYKIETY POMIAR TEMPERATURY

    Loop
    ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    Sub Menu_lcd:

    Waitms 200 'CZEKAJ 200ms
    Do
    Waitms 40 'CZEKAJ 40 ms
    Cls
    Lcd " WYLACZENIE "
    Lowerline
    Lcd "POMPKI NA " ; Pompka ; Chr(1) ; "C"

    If P1.3 = 0 Then 'JESLI NACISNIETO GORA S1 TO
    Incr Pompka 'ZWIEKSZ ZMIENNA POMPKA
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
    End If

    If Pompka => 60 Then 'JESLI ZMIENNA POMPKA = 60 STOPNI TO
    Pompka = 60 'ZAPISZ DO ZMIENNEJ POMPKA 60 STOPNI
    End If

    If P1.5 = 0 Then 'JESLI NACISNIETO DOL S3 TO
    Decr Pompka 'ZMNIEJSZ ZMIENNA POMPKA
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
    End If

    If Pompka =< 30 Then 'JESLI ZMIENNA POMPKA JEST = LUB < 30 STOPNI
    Pompka = 30 'ZAPISZ DO ZMIENNEJ POMPKA 30 STOPNI
    End If

    If P1.4 = 0 Then 'JESLI WCISNIETO MENU S2 MENU
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
    Reset P1.6 'WYLACZ POMPE
    Reset P1.7 'WYLACZ WENTYLATOR
    P = 0
    W = 0
    Do
    Cls
    Lcd "STEROWANIE RECZNE"
    Lowerline
    Lcd "POM.-" ; P ; " WENT.-" ; W

    '////////////////////////////////////////////////////////////////////

    If P1.3 = 0 Then 'JESLI WCISNIETO GORA S1
    P = 1
    Set P1.6 'WLACZ POMPE
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
    End If

    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms

    If P1.3 = 0 Then 'JESLI WCISNIETO GORA S1
    P = 0
    Reset P1.6 'WYLACZ POMPE
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
    End If

    If P1.2 = 0 Then 'JESLI WCISNIETO ENTER S4
    Waitms 100 'CZEKAJ 10 ms
    Exit Sub
    End If

    If P1.5 = 0 Then 'JESLI WCISNIETO DOL S3
    W = 1
    Set P1.7 'WLACZ WENTYLATOR
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
    End If

    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms

    If P1.5 = 0 Then 'JESLI WCISNIETO DUL S3
    W = 0
    Reset P1.7 'WYLACZ WENTYLATOR
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200ms
    End If

    '////////////////////////////////////////////////////////////////////
    If P1.2 = 0 Then 'JESLI WCISNIETO ENTER S4
    Waitms 100 'CZEKAJ 10 ms
    Exit Sub
    End If


    Set P3.7 'ROZLADUJ KONDENSATOR POMIAROWY
    Waitms 100 'CZEKAJ 100 ms
    Reset P3.7 'WYLACZ TRANZYSTOR ROZLADOWUJACY

    Do

    If P3.6 = 1 Then 'SPRAWDZ KOMPARATOR
    Exit Do 'JESLI = 1 TO WYJDZ Z PETLI
    End If

    Incr A 'ZWIEKSZ ZMIENNA A O 1
    Delay 'CZEKAJ OKOLO 100 uS

    If A => 3000 Then 'JESLI A JEST = LUB WIEKSZE OD 3000
    Set P1.6 'WLACZ POMPE
    Reset P1.7 'WYLACZ WENTYLATOR
    A = 0 'SKASUJ A
    Cls
    Lcd "TEMPERATURA POZA"
    Lowerline
    Lcd " ZAKRESEM"
    Wait 1 'CZEKAJ 1 SEKUNDE
    End If
    Loop

    Aa = A 'PRZEPISZ LICZNIK TEMPERATURY DO WYNIKU
    Aa = Aa / 30 'ZMIENNA AA DZIEL PRZEZ 30
    A = 0 'WYZERUJ TEMPERATURE KOTLA

    If Aa > Aaaa Then 'JESLI TEMPERATURA JEST WIEKSZA ZADANEJ
    Exit Sub
    End If

    Loop
    End If


    If P1.2 = 0 Then 'JESLI WCISNIETO ENTER S4
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY CZEKAJ 200 ms
    Exit Do 'WYJDZ Z PETLI
    End If
    Loop


    Return
    End Sub

    ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    Sub Pomiar_temperatury:

    Set P3.7 'ROZLADUJ KONDENSATOR POMIAROWY
    Waitms 100 'CZEKAJ 100 ms
    Reset P3.7 'WYLACZ TRANZYSTOR ROZLADOWUJACY

    Do

    If P3.6 = 1 Then 'SPRAWDZ KOMPARATOR
    Exit Do 'JESLI = 1 TO WYJDZ Z PETLI
    End If

    Incr A 'ZWIEKSZ ZMIENNA A O 1
    Delay 'CZEKAJ OKOLO 100 uS

    If A => 3000 Then 'JESLI A JEST = LUB WIEKSZE OD 3000
    Set P1.6 'WLACZ POMPE
    Reset P1.7 'WYLACZ WENTYLATOR
    A = 0 'SKASUJ A
    Cls
    Lcd "TEMPERATURA POZA"
    Lowerline
    Lcd " ZAKRESEM"
    Wait 1 'CZEKAJ 1 SEKUNDE

    End If



    Loop
    Call Oblicz_wyswietl 'SKOCZ DO ETYKIETY OBLICZ I WYSWIETL
    End Sub
    ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    Sub Oblicz_wyswietl:
    Aa = A 'PRZEPISZ LICZNIK TEMPERATURY DO WYNIKU
    Aa = Aa / 30 'ZMIENNA AA DZIEL PRZEZ 30
    A = 0 'WYZERUJ TEMPERATURE KOTLA


    Cls
    Lcd "TEMP KOTLA =" ; Aa ; Chr(1) ; "C"
    Lowerline
    Lcd "NASTAWIONA =" ; Aaaa ; Chr(1) ; "C"

    Return
    End Sub

    ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    Sub Czekaj_200_ms:
    Waitms 200 'CZEKAJ 200 ms
    Return
    End Sub
    ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    Sub Opal:

    If I = 0 Then 'JESLI I = 0 TO
    Licznik_opalu = 0 'WYZERUJ LICZNIK OPALU
    Return
    End If

    Incr Licznik_opalu 'ZWIEKSZ LICZNIK OPALU

    If Licznik_opalu = 9900 Then 'JESLI LICZNIK OPALU DOLICZYL DO 50 MINUT(198 NA MINUTE)
    Licznik_opalu = 0 'WYZERUJ LICZNIK OPALU
    Reset P1.7 'WYLACZ WENTYLATOR
    Reset P1.6 'WYLACZ POMPKE
    Cls
    Do
    Lcd " UWAGA !!!"
    Lowerline
    Lcd " BRAK OPALU"
    If P1.4 = 0 Then 'JESLI WCISNIETO MENU S2 TO
    Call Czekaj_200_ms 'SKOCZ DO ETYKIETY 200ms
    Exit Do 'WYJDZ Z PETLI
    End If
    Loop
    End If
    Return
    End Sub
    '///////////////////////////////////////////////////////////////////////////////
    Załączniki:
    • Jak napisać kod w Bascom 8051 dla czujnika LM35 i wyświetlacza LCD? schemat.GIF (39.55 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #24 10138415
    6marko
    Poziom 11  
    Posty: 14
    Ocena: 2
    Od kilu miesięcy "dopieszczam" program sterownika wersja1.Efekt taki,że ręce mi już opadają.Jest to wersja z pcf8591 i 4x lm35.Nijak nie moge dobrać się do tego przetwornika C/A.Studia juz zdążyłbym chyba skończyć ;) ,ale nie daje mi ten projekt spokoju,jako że ma aż 4 wskazania temperatury.
    Zainspirowany tematem (zakończonym przedwcześnie przez autora) z błedami niestety napisanym-złozyłem układ elektroniczny,który nie działał. Niemniej jednak mimo tego że Autor poczynił wiele błędów ,których i ja się równierz się nie ustrzegłem i program błedy nadal zawiera,lecz pomoc przy jego poprawnym ukończeniu bardzo by mi się przydała.Mam jednak uznanie dla wkładu Autora i jego pracy,bo dzieki niemu w moich zmaganiach z programem -nauczyłem się co nieco o bascom-ie.Prosiłbym o sugestie zmian w programie,tak aby poprawnie działał on i odczytywał/konwertował temperature z lm-mów , anie jak jest w tej chwili-wstatwiał błedny odczyt,z którym program nie radzi sobie tak naprawdę W tej chwili program nie dziła ponieważ wyświetla temp pieca 245 C ,ale po właściwych poprawkach powinien zadziałać. Projekt z EDW 12/2000
    Załączniki:
    • piec.7z (2.28 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczyła opracowania kodu w Bascom 8051 do pomiaru temperatury za pomocą czujnika LM35 i wyświetlania wyniku na LCD, z rozdzielczością około 1°C w zakresie 0–100°C. Ze względu na brak wbudowanego przetwornika A/C w mikrokontrolerach AT89C2051/4051, konieczne jest zastosowanie zewnętrznego przetwornika analogowo-cyfrowego, np. ADC0831, ADC0832, TLC549 lub PCF8591. Alternatywnie rozważano pomiar temperatury metodą przetwornika temperatura–częstotliwość, gdzie napięcie z LM35 jest konwertowane na częstotliwość, co ułatwia pomiar bez klasycznego A/C. Wskazano również możliwość wykorzystania źródła prądowego do liniowego ładowania kondensatora i pomiaru czasu ładowania za pomocą wbudowanego komparatora, co pozwala na prostsze i dokładniejsze odczyty. Dyskutowano o alternatywnych czujnikach cyfrowych DS18B20 i DS18S20, które eliminują potrzebę skalowania i zewnętrznych przetworników, jednak autor preferował LM35 ze względu na prostotę i koszt. Wskazano, że zastosowanie mikrokontrolera z wbudowanym A/C, np. ATmega8, może uprościć projekt. Autor ostatecznie poradził sobie z problemem, implementując prosty algorytm kalibracji i sterowania piecem CO, wykorzystując LM35 i wyświetlacz LCD. W dyskusji pojawiły się linki do schematów i artykułów dotyczących przetworników A/C oraz przetworników temperatura–częstotliwość.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA