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

Attiny 13 - Układ wyłączający ogrzewanie po uzyskaniu zadanej temperatury

Marek Sp 20 Lut 2013 21:21 2754 29
  • #1 20 Lut 2013 21:21
    Marek Sp
    Poziom 20  

    Robię taki układ , który po uzyskaniu zadanej temperatury wyłączy grzałkę ,czyli
    po włączeniu zasilania układ sprawdzi czy temperatura jest poniżej zadanej i włączy grzałkę aż do uzyskania temp . Podczas grzania będzie pikać buzerem i migać LED jak uzyska to zapika i zamiga inaczej po czym przestanie działać czyli jakaś pusta pętla.
    Zadanie temperatury będzie poprzez przycisk , czyli jak naciskam przycisk program mierzy temp po czym zapisuje w eeprom, po puszczeniu przycisku temp. zadana się zmienia . Nie wiem czy to jasno opisałem . Na razie coś takiego napisałem. drugi przycisk bedzie sluzył do bezwglednego uruchomienia grzania . Proszę o weryfikacje i ewentualne sugestie

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 29
  • #2 20 Lut 2013 22:50
    Rokita1993
    Poziom 19  

    Nie zrozumiem użycia takiego warunku. Przecież on zawsze będzie spełniony:

    If Wart_dc = Wart_dc Then

    If Kal = Kal Then

    Jaki jest cel użycia go w programie? Co on ma robić? Przecież A zawsze będzie równe A.

    0
  • #3 20 Lut 2013 22:59
    yogi009
    Poziom 42  

    Taki układ prawdopodobnie nazywają termostatem (o ile działa cyklicznie), w sieci można znaleźć sporo przykładów kodu realizującego tą funkcję.

    0
  • #4 20 Lut 2013 23:15
    Marek Sp
    Poziom 20  

    nie jest to termostat, raczej wyłącznik zadanej temperatury z możliwością programowania zadanej temp. Fakt ten warunek jest bez sensu, Jak sie realizuje histerezę żeby nie oscylował na granicy przełączenia ?

    0
  • #5 20 Lut 2013 23:29
    Rokita1993
    Poziom 19  

    Piszesz tak program aby np wyłączył układ przy temperaturze 50 C a włączył go przy 40C Jakto temperatura spadnie. Tak powstaje histereza.

    Pozdrawiam :)

    0
  • #6 21 Lut 2013 10:37
    yogi009
    Poziom 42  

    Skoro to jest wyłącznik, a nie termostat, to po co histereza (ściślej mówiąc: ustawianie progu włączania)? Natomiast kiedy piszesz algorytm typu: "przy 50 stopniach wyłącz, ale po spadku poniżej 40 stopni włącz ponownie...", to jednak wygląda mi na termostat. Możesz nieco to rozjaśnić ?

    0
  • #7 21 Lut 2013 13:16
    Marek Sp
    Poziom 20  

    Juz wyjasniam
    - Start - włącz grzałkę i czekaj aż uzyskasz zadaną temperaturę odczytując ją z eeprom .
    - Po uzyskaniu zadanej temperatury wyłącz grzałkę i już nic nie rób do czasu ponownego uruchomienia układu tzn. ponowne włączenie zasilania
    - Jeśli nacisnę przycisk 1 odczytaj temperaturę wyłączenia i zapamiętaj w eeprom .
    - Jeśli nacisnę przycisk 2 włącz grzałkę bez względu na temperaturę , tu jakiś on/off
    sygnalizacja buzerem i miganiem Led .
    Chyba to już jasno opisałem ?

    0
  • #8 21 Lut 2013 18:10
    yogi009
    Poziom 42  

    Tak, opisałeś to dobrze. Ale teraz nie rozumiem, po co tu była mowa o jakiejś histerezie :-)

    0
  • #9 21 Lut 2013 18:19
    Marek Sp
    Poziom 20  

    Masz racje , zupełnie nie potrzebna , wystarczy ze jak będzie powyżej jakiegoś napięcia przeskoczy na koniec zadania . Nie wiem jak napisać podprogram migania i pipania buzerem .
    czyli :
    - jak sie nagrzewa pipa powiedzmy co sek mogę zrobić wait 1 ale wtedy nie będzie mierzył , chyba ze użyć jeszcze timeru ? a może jest jakiś inny sposób ?

    0
  • Pomocny post
    #10 22 Lut 2013 12:22
    1477378
    Użytkownik usunął konto  
  • #11 22 Lut 2013 12:32
    piotrva
    Moderator na urlopie...

    Do generowania dźwięku można użyć kanału PWM (jeśli to buzzer bez generatora) a jeśli buzzer z generatorem to wystarczy tylko tranzystor podłączający zasilanie i wystawianie odpowiedniego stanu na pin. Do tego też można użyć timera.
    Co do zawieszania się układu - od czego jest watchdog?

    0
  • #12 22 Lut 2013 12:40
    Marek Sp
    Poziom 20  

    Nie w samochodzie , o watchdog pomyślałem ale jeszcze nie doczytałem jak się go konfiguruje . Moje pytanie odnośnie buzerka brzmi jak pogodzić pikanie buzera z generatorem z ciągłymi pomiarami temperatury ?

    0
  • #13 22 Lut 2013 12:46
    1477378
    Użytkownik usunął konto  
  • #14 22 Lut 2013 12:48
    piotrva
    Moderator na urlopie...

    No jak masz w buzzerze generator to w programie wystawiasz stan go aktywujący na odpowiedni pin, i ustawiasz jakąś zmienną (zmniejszaną w przerwaniu timera) na wartość odpowiadającą długości piknięcia. I potem w tym przerwaniu od timera jeśli zmienna dojdzie Ci do 0 to wyłączasz nogę aktywującą buzzer i koniec. Program jest zajęty tylko w momencie aktywowania buzzera.

    0
  • #15 22 Lut 2013 13:10
    Marek Sp
    Poziom 20  

    marcin387 napisał:

    Nie rozumiem tego co napisałeś, jak długo ma działać ta grzałka? Czy pomiar co 1/10 sekundy będzie zbyt długi?.
    Zupelnie wystarczający , tyle ze jednak muszę uruchomić Timer0 i tym pikać . Spróbuje napisać nową wersje

    0
  • #16 22 Lut 2013 13:18
    1477378
    Użytkownik usunął konto  
  • #17 22 Lut 2013 14:06
    Marek Sp
    Poziom 20  

    Proszę :
    podczas grzania co sekundę krótkie pikniecie , jak usłyszę to będę wiedział czy je powiększyć czy zmniejszyć , buzer z generatorem jest podpięty za pośrednictwem tranzystora czyli piszczy jak stan na pinie jest wysoki. Pozmieniałem program i oczywiście nie ma prawidłowych wartości piknięć ale jest to szkic testowy czy to dobra droga .

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #18 22 Lut 2013 17:52
    1477378
    Użytkownik usunął konto  
  • #19 22 Lut 2013 18:24
    Marek Sp
    Poziom 20  

    OK pozmieniałem , teraz pytanie takie w jakim czasie będzie się przeładowywał timer0 ? jak najlepiej go taktować . Jutro wgram do modelu i będę realnie testował i zobaczymy co z tego wyszło

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #20 23 Lut 2013 13:04
    1477378
    Użytkownik usunął konto  
  • #21 23 Lut 2013 13:44
    Marek Sp
    Poziom 20  

    Ogólnie to wiem , tyle ze jak to wyliczyć ?

    0
  • #22 23 Lut 2013 13:57
    BlueDraco
    Specjalista - Mikrokontrolery

    Najlepiej wyliczyć na podstawie dokumentacji mikrokontrolera.

    0
  • #23 23 Lut 2013 14:08
    Marek Sp
    Poziom 20  

    :D no tak , nie wiedziałem ze jest dokumentacja a konkretnie w tym programie ?

    0
  • #24 23 Lut 2013 14:46
    BlueDraco
    Specjalista - Mikrokontrolery

    Konkretnie w tym przypadku chodzi o dokumentację ATtiny13, sądząc z brzmienia tematu.

    0
  • #25 23 Lut 2013 17:15
    Marek Sp
    Poziom 20  

    Oczywiście że tak ..... ja pytam konkretnie szanownego kolegę o to jak to obliczyć a odsyłanie do noty katalogowej wydaje mi się jakiś takie no ......... gdybym wiedział jak to pewnie dałbym sobie rade prawda ? Dla mnie zapytanie nie jest wstydem jedni wiedzą to a inni coś innego .

    0
  • #26 06 Mar 2013 19:43
    Marek Sp
    Poziom 20  

    Program już działa ale nie mam pomysłu jak zrobić zakończenie pracy układu .
    po wykonaniu szeregu pipnieć program powinien przestać działać i czekać aż na następne uruchomienie czyli włączanie zasilania . Jeszcze mam wątpliwości co do watchdoga. Jak i jak napisać procedurę pozwalająca za pomocą "przycisk" zawsze uruchomić grzanie .

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #27 06 Mar 2013 20:32
    BlueDraco
    Specjalista - Mikrokontrolery

    I tu dochodzimy do tego samego, co zawsze, czyli do tego, że taka budowa programu po prostu nie pasuje do większości realnych zastosowań.

    Zdaję sobie sprawę, że jesteś bardzo początkujący, ale napiszę Ci, jak to powinno być zrobione.

    Po pierwsze - wszystko robimy w przerwaniu timera, zgłaszanym ze stałą częstotliwością, np. 100 Hz.

    Rozrysowujemy urządzenie jako automat, opisując jego stany i zdarzenia powodujące zmiany stanów, np. grzanie, koniec grzania itd.

    Definiujemy zmienną określającą bieżący stan. W przerwaniu timera następuje rozejście wg. stanu. W każdym stanie sprawdzamy zdarzenia powodujące zmianę stanu, a jeśli takie zdarzenie wystąpi - zmieniamy stan, zmieniając przy okazji sterowanie urządzeń (np. wyłączamy grzałkę). W każdym stanie obsługujemy też sygnalizację dla niego właściwą, np. popiskiwanie czy miganie - wszystko przez zliczanie czasu - okresów przerwań.

    Tzw. pętla główna jest pusta. Program główny inicjuje to, co trzeba i wpada w pustą pętlę, w której usypia procesor.

    0
  • #28 06 Mar 2013 21:18
    Marek Sp
    Poziom 20  

    Nie bardzo rozumiem ale ... OK
    timery jasne, są do pikania ale do zapisu w eeprom chyba nie bardzo ?
    mogę inaczej poukładać program tylko nie bardzo rozumiem Twoją myśl w tym przypadku . Bo program główny nie może być pusty ( chyba )
    Bloki sa jakby dla mnie jasne
    1 - blok pomiarowy grzania
    odczytuje wartość , mierzy napiecie ADC i porównuje z eeprom wykonuje sygnalizacje
    2- blok zapisu do pamięci
    3- blok sygnalizacji zakończonego grzania
    4- blok zakończenia funkcji .
    Popraw mnie jeśli się mylę.
    Czyli sugerujesz ze z zależności od wartości timera ma skakać po sub ?

    0
  • #29 06 Mar 2013 21:31
    BlueDraco
    Specjalista - Mikrokontrolery

    Jak by Ci tu powiedzieć... Obecnie utrzymuję i rozwijam kilkanaście projektów urządzeń z mikorkontrolerami, o objętości kodu od 3 do ponad 100 KB. Pętla główna jest tylko w jednym z tych projektów (największym) i pozostanie tam dopóki nie będę miał czasu przerzucić tego pod FreeRTOS - wtedy zniknie. Pozostałe projekty - od ok. 600 do ok. 10.000 linii kodu, obywają się bez pętli zdarzeń.

    Sugeruję, że w przerwaniu timera należy robić wszystko, albo prawie wszystko (trzeba się przyjrzeć temu zapisowi EEPROM - to może należy wyrzucić gdzie indziej).

    W zależności od bieżącego stanu robisz różne rzeczy. Kiedy grzejesz - sprawdzasz czy jeszcze trzeba grzać. Kiedy już nie grzejesz - sprawdzasz, czy wciśnięto guzik grzania. Wygodnie jest zrobić to w dużej instrukcji switch (stan), który w Bascom nazywa się chyba case.

    To jest po prostu zupełnie inne podejście do budowy programu. To podejście doskonale sprawdza się przy sterowaniu obiektami - silnikami krokowymi, ogrzewaniem, chłodzeniem itp.

    0
  • #30 06 Mar 2013 21:38
    Marek Sp
    Poziom 20  

    Nie wątpię ze masz racje ale nie możesz jednak podeprzeć przykładem ? Bo jak mowie koncepcja jest inna niż ta którą znam i jak na razie obca mojemu schematowi myślenia .

    0