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

Termoregulator - Termoregulator - przejście z 1 na 4 obwody

mocarny66 22 Maj 2014 23:12 1725 15
  • #1 22 Maj 2014 23:12
    mocarny66
    Poziom 10  

    Witam
    Na wstępie przyznaję sie do laizmu, proszę o wyrozumiałość.
    Mam problem z przerobieniem programu obsługującego 1 czujnik i jedną grzałkę, na wersję z odczytem z czterech czujników sterujących pracą czterech grzałek, każdy czujnik ma swoją grzałkę.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0 15
  • Metal Work Pneumatic
  • #2 23 Maj 2014 09:56
    mocarny66
    Poziom 10  

    Zauważyłem wielu wstępujących, czy nikt nie jest w stanie mi poradzić co zrobić.
    Sprawa może się wydawać błaha dla innych, ale dla mnie laika stwarza pewien problem.

    0
  • Metal Work Pneumatic
  • #3 23 Maj 2014 20:40
    boss87
    Poziom 11  

    Co robi funkcja search_sensors() ? Zwraca ilość czujników ? Jak ?

    Jeśli masz podpięte kilka DS18B20 pod jedną linię, musisz znać ich adresy lub użyć algorytmu wyszukiwania czujników,
    Ale możesz podpiąć je osobno pod inne piny, lub użyć multiplexera.

    0
  • #4 23 Maj 2014 23:52
    mocarny66
    Poziom 10  

    Za odszukanie adresów czujników odpowiada plik "ds18x20.h", który jesnt podany w includach

    0
  • #5 23 Maj 2014 23:58
    boss87
    Poziom 11  

    No ok, w takim razie załącz cały projekt żeby można było podejrzeć wszystkie funkcje,

    jeśli ta funkcja odnajduje adresy wszystkich czujników i je zapisuje 'gdzieś' to łatwo przerobić program na 4 kanały,

    Z: DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits) ) wnioskuję że w gSensorIDs[] są adresy, podłącz dwa czujniki, ustaw [1] zamiast [0] i zobacz czy pokazuje temp drugiego.

    Żeby coś więcej powiedzieć musisz załączyć bibliotekę ds18b20

    0
  • #6 24 Maj 2014 00:12
    mocarny66
    Poziom 10  

    boss87 napisał:

    Żeby coś więcej powiedzieć musisz załączyć bibliotekę ds18b20

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Sprawa raczej się rozbiega o część odpowiadającą sterowaniu/załanczaniu wiekszej liczby grzałek bo temperaturę mizczytuje.

    0
  • #7 24 Maj 2014 00:22
    boss87
    Poziom 11  

    Załącz plik ds18x20.c, załączyłeś tylko plik nagłówkowy.

    I w międzyczasie spróbuj zrobić tak jak napisałem, powinno zadziałać. Potem będziesz musiał zamienić zmienne cel i cel_fract_bits na tablice i będzie ok.

    0
  • #8 24 Maj 2014 00:33
    mocarny66
    Poziom 10  

    boss87 napisał:
    Załącz plik ds18x20.c, załączyłeś tylko plik nagłówkowy.


    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    boss87 napisał:
    Potem będziesz musiał zamienić zmienne cel i cel_fract_bits na tablice i będzie ok.


    Twoim zdaniem utworzenie tablic będzie zbawienne, może to trafne. Od jakiegoś czasu ma pomroczność i nie mogę się skupić, najprostsze rzeczy stwarzają mi ogromną trudność - to chyba przesilenie.

    A zatem stworzenie/zamiana na tablice będzie ostatecznym rozwiazaniem.

    0
  • #9 24 Maj 2014 00:40
    boss87
    Poziom 11  

    Tablice będą potrzebne abyś mógł przechowywać więcej niż 1 wynik pomiaru, ale do sprawdzenia czy 4 czujniki zadziałają razem wystarczy test o którym napisałem wyżej, od tego zacznij.

    Rozumiem, że nie jesteś autorem tego programu i nie masz za dużego pojęcia o programowaniu, ale za to chęci? :)

    0
  • #10 24 Maj 2014 00:44
    mocarny66
    Poziom 10  

    Jeśli chodzi o działanie czujników :D to mam podłączone trzy, załączają przekaźnik zależnie od wartości temp.
    Dzięki za wyrozumiałość, rzadko się spotyka.

    0
  • #11 24 Maj 2014 00:49
    boss87
    Poziom 11  

    Podłączone trzy, wyświetla się tylko jeden, tak ? Grzałki też trzy, i działają prawidłowo ?
    Opisz trochę bardziej co masz zbydowane, co działa, co nie działa, i jak byś chciał żeby działało.
    Bo na tą chwile to rozumiem że działa to z jednym czujnikiem i grzałką, a chcesz żeby działały 4 niezależne kanały.

    i znajdź funkcję DS18X20_read_meas(... w któryms pliku jak możesz, bo w ds18b20.c też jej nie ma... może w i2c_twi.c ?

    0
  • #12 24 Maj 2014 01:00
    mocarny66
    Poziom 10  

    boss87 napisał:
    Podłączone trzy, wyświetla się tylko jeden, tak ? Grzałki też trzy, i działają prawidłowo ?
    Opisz trochę bardziej co masz zbydowane, co działa, co nie działa, i jak byś chciał żeby działało.
    Bo na tą chwile to rozumiem że działa to z jednym czujnikiem i grzałką, a chcesz żeby działały 4 niezależne kanały.

    i znajdź funkcję DS18X20_read_meas(... w któryms pliku jak możesz, bo w ds18b20.c też jej nie ma... może w i2c_twi.c ?


    A zatem w chwili obecnej podłączone są trzy czujniki DS i jeden przekaźnik który załącza się w chwili gdy jeden z czujników odczyta temp poniżej zakładanej.
    Ja chciałbym aby każdy czujnik po odczycie temp sterował pracą jednego z trzech wskazanych przekaźników.

    Co do drugiej części to:
    w ds18x20.c znalazłem że jest
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    a w main.c
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #13 24 Maj 2014 01:11
    boss87
    Poziom 11  

    Jesteś pewien że jeśli obojętnie który czujnik odczyta zbyt niska temp. to włączy się przekaźnik ?

    A co widzisz na wyświetlaczu ? Jedną temp, trzy ? Czy trzy na przemian ?
    I powiedz na jakim poziomie w AVR jesteś żebym wiedział na jakim poziomie Ci dawać instrukcje.

    0
  • #14 24 Maj 2014 01:22
    mocarny66
    Poziom 10  

    Tak, niezależnie który czujnik wczyta np 24 oC i zadziała przekaźnik, ponadto gdy jeden z czujników zostanie odłączony przekaźnik nie zadziała.
    Wyświetlane są trzy temp bo mam wyświetlacz 4x20, a zatem jest taka możliwość
    Jeśli chodzi o mój poziom AVR to jestem na etapie raczkowania.
    Zapewne powiesz że to za wysokie progi naa początek ale ja lubię wyskoczyć "z motyką..." aby się wzmocnić duchowo.

    0
  • Pomocny post
    #15 24 Maj 2014 02:19
    boss87
    Poziom 11  

    To ciekawe, bo wg kodu nie ma prawa tak działać, co najwyżej 2 temperatury, w pierwszej i drugiej linii LCD.
    W ogóle wydaje mi się że załączyłeś pliki z różnych wersji programu, funkcje się powielają pod innymi nazwami, a niektórych nie ma w ogóle, zrób porządek z projektem.

    w ogóle w miejscu :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    między start_ a read_ nie ma odpowiedniego opóźnienia dla konwersji czujnika, może on działać nieprawidłowo.

    Aby zrobić to tak jak mówisz, trzeba by w tym miejscu zrobić :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i poniżej:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodatkowo na górze pliku main.c dopisać
    Kod: c
    Zaloguj się, aby zobaczyć kod


    a w void IOPorts_Config(void) dodać:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    no i zmienić zmienne cel i cel_fract_bits na tablice:
    uint8_t cel[5] - dajmy na to 5 elementowe


    Jeszcze trzeba powielić sprawdzanie czy każda pojedyncza temperatura mieści się w zakresie, i tam włączać odpowiedni przekaźnik, no trochę tego jest, ja już dziś odpadam.



    73

    0
  • #16 02 Cze 2014 21:02
    mocarny66
    Poziom 10  

    Z uwagi na trudności postanowiłem wykonać termoregulator robiąc program od nowa uderzając :-) z innej beczki.
    Dziękuję wszystkim za pomoc.

    0
  Szukaj w 5mln produktów