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.

Bascom Tablica wielowymiarowa Atmega32

omenserv 13 Mar 2012 10:01 1587 4
  • #1 13 Mar 2012 10:01
    omenserv
    Poziom 10  

    Witam!

    Z racji tego że nie można tworzyć tablic wielowymarowych w Bascomie proszę o pomoc w rozwiązaniu mojego problemu.
    Potrzebuje (w sterowniku czasowym - tygodniowym) przypisać do 10 czasów załączania i wyłaczania oraz sterowania dla każdego dnia tygodnia.
    Nie mama pojecia jak to rozwiązać.
    Z grubsza do pamięci eeprom musze zapisać:
    Bit_X, D_tyg, G_start, M_start, G_stop, M_stop, Wyj_start
    nie było by problemu gdyby był to jede zapis ja potrzebuje tych zapisów powtórzyć 10 razy dla 7 dni. Czyli 70 max zapisów z 7 parametrami.
    A co najważniejsze teraz odczyt tego aby nie robić pętli na eeprom.

    Zasada ma być taka np
    w poniedziałek o godzinie 11:30 ma właczyć się rekuperator na biegu 3 a przełaczyć o 15:30 na bieg 2 itd.
    Dlatego też
    Bit_X - bit kontrlony czy jest wpis na dany dzień
    D_tyg - zapisany dzień tygodnia
    G_start, M_start - godzyny startu
    G_stop, M_stop - godziny stopu
    Wyj_start - załanczane wyjście

    Jak mógłbym rozwiązać zapis w takiej formie w BAscom?

    0 4
  • Pomocny post
    #2 13 Mar 2012 10:41
    otapi
    Poziom 25  

    Zrobić jedną tablicę jednowymiarową i zapisywać kolejno po sobie po 7 tych zmiennych, następnie odczytywać z "offsetem"

    tablica(x + y*offset) daje to pseudo 2 wymiarową tablicę.

    tablica(0 + 0*7) = tablica(0)
    tablica(1 + 0*7) = tablica(1)
    tablica(2 + 0*7) = tablica(2)
    ....
    tablica(0 + 1*7) = tablica(7)
    tablica(1 + 1*7) = tablica(8)
    itd....

    0
  • #3 13 Mar 2012 11:18
    omenserv
    Poziom 10  

    No niezłe... na to sam na razie bym nie wpadł. Złudzenie wielowymiarowej spełnia - a praktycznie z offsetem jest dwuwymiarowa.
    W tym momencie nawet rozwiązuje mi problem zbędnego odczytu eeprom gdyż na końcu zrzuce sobie ilość wpisów i bede wiadział ile tam jest czasów ustawionych.
    Dziękuje za ukierunkowanie.

    P.s Awarii zasilanie też nie bedzie wiele zatem nawet gdybym musaił jednorazowo z eeprom zimenne odczytać to i tak bedzie znikoma ilość działań na eeprom pomimo tylu danych.

    Może na marginesie takie pytanie czy według Ciebie całą zawartość eeprom odzczytać przy starcie programu czy wedlug działania programu?
    Tj. w poniedziałek odczytuje tylko czasy dla poniedziałku we wtorek dla wtorku itd...
    czy jednorazowo uzupełnić tablica a póżniej przepisywaniem zmiennych działać już tylko w Ram?

    0
  • Pomocny post
    #4 14 Mar 2012 08:40
    otapi
    Poziom 25  

    Wydaje mi się że jak byś nie zrobił i będzie działało to tak jest dobrze ;] ilu programistów tyle podejść do tematu...
    Jeżeli już zadeklarujesz taką dużą tablicę to tak czy siak będzie ona zajmowała jakąś przestrzeń w pamięci więc czemu nie użyć jej i odczytać z eeprom wszystkiego na raz.
    Kiedyś robiłem podobny sterownik do CO ze sterowaniem temperaturą na każdy dzień tygodnia + tryb dzień/noc. Zapis ustawień zrobiłem tak że pewną przestrzeń eeprom potraktowałem tak jakby to była właśnie taka 2 wymiarowa tablica. Ustaliłem se adres bazowy (indeks 0,0 w tablicy) i dalej działałem na tym jak z tablicą odczytując/zapisując dane do zmiennych na konkretny dzień z eeprom tak jakby to była tablica 2 wymiarowa.

    Ale to było kiedyś, już nie piszę w Bascomie więc dziś zrobiłbym to zupełnie inaczej, no ale C daje zupełnie inne możliwości ;]

    0
  • #5 16 Mar 2012 22:11
    omenserv
    Poziom 10  

    Myśle ze temat moge zamknąć sprawa rozwiązana dzieki

    0