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

Bascom - jak zapamiętać wartości zmiennych tablicowych w mierniku napięcia?

Eltok 28 Gru 2012 20:26 939 3
  • #1 11708062
    Eltok
    Poziom 11  
    Witam Kolegów i proszę o pomoc! Mimo napisania już kilku aplikacji w Bascomie, napotkałem problem, z którym się wcześniej nie zetknąłem i nie znalazłem nic na ten temat w sieci.
    Wykonałem czterokanałowy miernik napięcia, który będzie częścią pewnego urządzenia. Układ działa poprawnie, ale mam kłopot z zapamiętaniem wartości zmiennych tablicowych. Zadeklarowane zmienne mogę odczytać tylko bezpośrednio po wpisaniu do nich wyników z ADC. Jeśli chcę wykorzystać zapisane zmienne z każdego kanału na końcu programu, one "znikają". Logicznie myśląc zadeklarowana zmienna powinna pamiętać wyniki przez cały czas, niezależnie od tego, kiedy będą użyte. Załączam ten program - może ktoś z Kolegów będzie mógł mi wyjaśnić, co zrobiłem nie tak.
    Identycznie "zapominane" są zwykłe zadeklarowane zmienne. Nie wiem, czy Bascom tak właśnie działa, ale przecież w każdym innym języku zmienną można wykorzystać w dowolnym miejscu programu wielokrotnie.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #2 11708478
    Mundi1970
    Poziom 24  
    Twój problem polega na tym że źle używasz instrukcji Spiin, zaglądnij do helpa. Drugi argument instrukcji to ilość bajtów do odczytu, zmienna Ls_byte przy twoich obliczeniach może przyjąć wartość większą niż 2 i podczas odczytu nadpisujesz inne zmienne.

    Zamień:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    na:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #3 11710233
    Eltok
    Poziom 11  
    Niestety, to także nie działa. Zresztą poprawna instrukcja dla zmiennej tablicowej wzięta z helpu to:
    Spiinit
    Spiin a(1) , 4 'odczytuje cztery bajty
    i ona działa, scala bajty i zapisuje wynik do zmiennej Tabl_wyn(x). Problem jest tylko z jej późniejszym,powtórnym odczytaniem. Odczytanie natychmiastowe w następnej instrukcji: Lcd Tabl_wyn(x) działa bezbłędnie.
    Zastanawiam się, czy to nie jest przypadkiem wina ustawień kompilatora, bo już nic mądrzejszego mi nie przychodzi do głowy.
  • #4 11712456
    Eltok
    Poziom 11  
    No i problem rozwiązany! Doszedłem, że do zmiennych innych niż bajtowe trzeba podchodzić w Bascomie z tzw. "zasadą ograniczonego zaufania". Potwierdziło to się zresztą po dokładnym przestudiowaniu helpa.
    Zmieniłem program, zapisując najpierw w tablicy oba bajty wyniku każdego kanału, a dopiero na końcu w pętli Next - For wyliczyłem końcowe cztery wyniki z jednoczesnym ich wyswietlaniem na LCD. Wszystko elegancko działa z tym, że zamiast LCD będa te wyniki przesyłane RS-em. do PC-ta.
    Temat zamykam.
REKLAMA