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

[C]atmega32 - bardzo problematyczny program z którym sobie nie poradze...

margas4542 21 Maj 2014 21:12 1020 3
REKLAMA
  • #1 13623302
    margas4542
    Poziom 16  
    Witam.Jakiś czas [dawno]temu gdy ochoczo zabrałem się za napisanie programu do sterownika nadzorującego instalację oświetleniową 12V z ogniwem fotogalwanicznym ,akumulatorem,kontrolerem "solara" STEKA oraz czterokanałowym zegarem sterującym obwodami 230V. Program napisałem i działa do dziś choć nie tak jak zakładałem. W chwili obecnej chciałem poprawić kod ale na dobre utknąłem borykając się z nie działającymi funkcjami i jakimiś komunikatami w języku angielski w którym nigdy nie byłem mocny. Nadzieja że z ECLIPSE będzie nieco łatwiej umarła śmiercią naturalną i jeżeli nie naprawię programu sterownika to będę musiał się go pozbyć i przerobić instalację 12V. Nieśmiało więc pytam czy ktoś byłby skłonny pomóc poprawić i dopisać funkcje do nowszej wersji [zmiana menu opcji sterownika]. Na razie nie zamieszczam kodu bo nie wiem czy ktoś będzie miał ochotę w nim pogrzebać.
  • REKLAMA
  • #2 13623592
    gaskoin
    Poziom 38  
    Pewnie nikt nie zrobi tego za Ciebie, ale zawsze możesz wrzucić kod i pewnie chętnie ktoś Ci pomoże
  • REKLAMA
  • #3 13625029
    margas4542
    Poziom 16  
    Ok spróbuje.Co nieco zmodyfikowałem ale utknąłem na porównaniu czasu....
    część programu;
    Kod: C#
    Zaloguj się, aby zobaczyć kod
    [/syntax]//===========================================================
    // ODCZYT ZEGARA CZASU RZECZYWISTEGO RTC
    //===========================================================
    int a,tr;
    for(a=0;a<5;a++)
    {
    read_pcf[a] = TWI_read(pcf8583,rtc_adres[a]);
    }
    time[1] = bcd_na_dec(read_pcf[0]); //sekundy
    time[2] = bcd_na_dec(read_pcf[1]); //minuty
    time[3] = bcd_na_dec(read_pcf[2]); //godziny
    time[4] = bcd_na_dec(read_pcf[3]); //dni
    time[5] = buffer_t[4]; //miesiące
    time[6] = bcd_na_dec(read_pcf[4] & 0x1F); // ????
    //wyliczanie dnia tygodnia przy stałej wartości roku
    //nie wiem jak zrobić to inaczej by z automatu wyliczal rok
    int y=2014,m,d;
    m=time[6]; d=time[4];
    week=(d+=m<3?y--:y-2,23*m/9+(d+1)+4+y/4-y/100+y/400)%7;
    time_dec[0]=(time_dec[3]*60)+time_dec[2]; //1439 = godz 23:59
    // wartość czasu zegara systemowego jest liczba czterocyfrowa aby było
    // łatwiej wykonać porównanie czasu lokalnego z nastawą zegara sterujacego
    time[7]=((time[3]*60)+time[2]);
    //===========================================================
    //funkcje odczytu timera sterującego
    //===========================================================
    for(tr=0; tr<16; tr++)
    {
    //odczyt nastawy godzin dla 1 z n kanalow
    time[8]=TWI_read(pcf8583,mem_addr[tr]);
    //odczyt nastawy minut dla 1 z n kanalow
    time[9]=TWI_read(pcf8583,mem_addr[tr+1]);
    //sumowanie wartości godzin i minut
    time[10]=time[8]*60+time[9];
    if(time[7]==time[10])
    }
    //===========================================================
    //funkcje porównanie czasu systemowego z nastawą czasu timera
    //===========================================================
    //week - dzień tygodnia
    if((week==0)||(week==1)||(week==2)||(week==3)||(week==4))
    {
    //jak zrobić porównanie czasu time[10] do czasu załącz/wyłącz
    //odczytanego w pętli for i przypisać do jednego z czterech
    //kanałów status[] rozróżniając czy są to dni robocze pn-pt

    }
    else
    {
    //czy wolne sob-nd.
    }
    //===========================================================
    // FUNKCJE WYKONAWCZE - STEROWANIE AUTOMATYCZNE I MANUALNE PRZEKAZNIKAMI
    //===========================================================
    if(status[1]==0) { PORTC |= _BV(4);}else{ PORTC &=~ _BV(4); status[1]=1;}
    if(status[2]==0) { PORTC |= _BV(5);}else{ PORTC &=~ _BV(5); status[2]=1;}
    if(status[3]==0) { PORTC |= _BV(6);}else{ PORTC &=~ _BV(6); status[3]=1;}
    if(status[4]==0) { PORTC |= _BV(7);}else{ PORTC &=~ _BV(7); status[4]=1;}
    //***********************************************************
  • #4 13636431
    margas4542
    Poziom 16  
    ja to jestem amator eksperymentator ale czyżby szacowne grono starych wyjadaczy w "C" nie potrafiło uporać się z kilkoma linijkami kodu ?. Szacowni forumowicze proszę podsuńcie jakiś pomysł jak to zrobć...
REKLAMA