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

Avr Bascom regulowany termostat "sam się" reguluje

Foadrian 24 Sie 2011 16:43 2515 6
REKLAMA
  • #1 9858155
    Foadrian
    Poziom 10  
    Witam! Jestem początkujący w dziedzinie programowania mikrokontrolerów w związku z tym proszę o wytknięcie mi moich błędów ;] Napisałem już kilka sprawnych o dobrze działających programów. Teraz staram się stworzyć program do termostatu z regulacją temperatury i stałą histerezą. Problem polega na tym że gdy do najprostszego termostatu dopisałem regulację temperatury to układ nie działa właściwie. Mianowicie X czyli temperatura która ma być utrzymywana sama ciągle wzrasta. Po naciśnięciu guzika zmniejszającego wartość spada ale dzieje się to bardzo powoli tak jak by układ się przycinał na czas odczytu temp. Próbowałem już na różne sposoby oddzielić obsługę regulacji i termostat jednak efekt ciągle ten sam.Podobny problem miałem gdy do programu "termometr" dodałem "zegar" wtedy program się spóźniał a guziki reagowały bardzo powoli ale godzina sama się nie zmieniała. Proszę o udzielenie mi podpowiedzi jak skorelować ze sobą obsługę termometru i regulacji termostatu.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 9858198
    piotrva
    VIP Zasłużony dla elektroda
    Zmień:

    na

    Bo Set może z tego co wiem ustawiać tylko bity i dziwne że Bascom ten kod kompiluje z tym Set Portb...
  • REKLAMA
  • #3 9858209
    Foadrian
    Poziom 10  
    Niestety nie rozwiązało to problemu. Zupełnie nic się nie zmieniło w działaniu programu.
  • REKLAMA
  • #4 9858825
    sylwunia35
    Poziom 18  
    A czy dobrze ustawiłeś "fusy" dla $crystal = 8000000? W pętli DO..LOOP wstaw Toggle Portx.y gdzie x to port a y to końcówka portu x ustaw jako Output i podłącz diodę Led wówczas będzie widac jak się kręci pętla.
  • #5 9859216
    rs07
    Poziom 20  
    Może spróbuj następujących zmian.
    W głównej pętli wstaw:

    If P1 = 0 Then call zwieksz
    If P2 = 0 Then call zmniejsz

    a funkcja zwieksz może wyglądać tak:

    Sub zwieksz
    Do
    Incr X
    Waitms 250
    Loop Until P1=1
    A1 = X - H
    A2 = X + H
    End Sub
  • Pomocny post
    #6 9859356
    snnaap
    Poziom 25  
    Pytana do układu:
    1. P1 i P2 podciągnięte do plusa za pomocą rezystorów? Bo w programie nie masz "włączonego" wewnętrznego podciągnięcia?


    Jeden z twoich problemów to:

    Cytat:
    Po naciśnięciu guzika zmniejszającego wartość spada ale dzieje się to bardzo powoli tak jak by układ się przycinał na czas odczytu temp.


    nie dziw się ponieważ w funkcji Odczyt_t podczas odczytywania temperatury używasz Waitms 750 czyli wstrzymujesz program na 1 sekundę. W związku z tym przytrzymując przycisk zmniejszanie temperatury będzie następowało o jeden stopień (lub inna jednostka) co 750ms.
    Następnie w procedurze odczytu klawisza masz kolejne Waitms 250 czyli program pomiędzy kolejnymi zmniejszeniami temperatury o jeden czeka 1 sekundę.


    Rozwiązań jest kilka:
    1. użyć timera do wyliczenia sekundowej przerwy
    2. sprawdzić w nocie jak zachowuje się czujnik DS i co wysyła na linię gdy jest w czasie konwertowania temperatury - i zastosować to w programie
    3. obsługiwać klawisze w przerwaniu


    Mając na względzie ten zapis A1 = X - H co będzie jeżeli X < H?? Powstaną liczby ujemne?? Czy było to Twoim zamierzeniem?


    Czego ten fragment:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    jest w funkcji obsługi przycisków?
  • REKLAMA
  • #7 9864345
    Foadrian
    Poziom 10  
    Witam! snnaap dzięki za pomoc, udzieliłeś świetnych uwag !!! Dokonałem zmian w programie i tak jak właśnie powiedział snnaap, zastosowałem przerwania int0 i int1 do odczytu stanu przycisków +/- po za tym odczyt temp i termostat pozostawiłem bez zmian. Zamieszczam kod mimo że jest napisany w stylu quick and dirty i zawiera wiele niedociągnięć jednak główna funkcja działa!! Dziękuję za pomoc i zainteresowanie!
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA