Witam, Robię właśnie swój pierwszy "poważny" układ :) i programuję w BASCOMie. Wszystko idzie jak po maśle, za wyjątkiem dwóch rzeczy: 1) Nie mogę sobie poradzić z zapisem i odczytem liczby typu single z eepromu. No, może nie do końca - już wyjaśniam w czym rzecz. Otóż fragment: Dim E_temp_alarm As Eram Single Dim Temp_alarm As Single E_temp_alarm = 123.45 Temp_alarm = E_temp_alarm działa poprawnie - natomiast zmienna E_temp_alarm musi być w moim przypadku przechowywana w eepromie cały czas (ponieważ wartość ta się zmienia, a po resecie/braku zasilania potrzebuję skorzystać z ostatnich ustawień), więc na początku programu dopisałem: If Temp_alarm = 255 Then Temp_alarm = 20 End If Czyli warunek który powinien zostać spełniony tylko przy pierwszym uruchomieniu programu, aby zapobiec porównań w programie do FF :) I tu jest problem - o ile takie sprawdzanie działa idealnie przy zmiennych Byte, o tyle z Single mam kłopot... Wygląda na to, że ten warunek nie zostaje spełniony, bo pod Temp_alarm pojawia się liczba -0.0. Podejrzewam, że jest to błąd w odczycie - liczba Single jest zapisywana na 4 bajtach, wiec jej wartość początkowa w eepromie to FFFF FFFF - tylko jak teraz napisać ten warunek sprawdzający? 2) Przerwania :)Czy mógłbym prosić o przykład (może być pseudo-kod) zastosowania? Generalnie potrzebuję COŚ zrobić, abym mógł swobodnie sprawdzać na bieżąco stan tact-switchy (w tej chwili odczyt temperatury mam co 750ms, i w tym czasie oczywiście nie mogę monitorować stanu przycisków, a ciężko się wstrzelić w "otwartą linię" ;) Z góry dziękuję za pomoc pozdrawiam!
|
|||
RE: Bascom
Szczerze mówiąc to nigdy w ten sposób nie zapisywałem nic do eeprom, zawsze robię to za pomocą writeeeprom. Do ilu miejsc po przecinku potrzebujesz tego Singla, nie można poprostu zrobić z niego liczby całkowitej mnożąc przez np 1000 (do 3 miejsc po przecinku)?
Co do obsługi klawiatury podczas pomiaru temperatury Ds18B20 (bo zakładam że tym mierzysz) nie potrzeba żadnego przerwania zewnętrznego, wystarczy timer z określonym interwałem czasu. Popatrz w moich projektach, prawie wszystkie mają klawiatury.
a tak w ogóle to co to będzie za układ i do czego będzie służył?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dzięki za zainteresowanie. Z
Dzięki za zainteresowanie.
Z tego co czytałem, to każda zmienna deklarowana jako Eram, jest zapisywana identycznie jak przy użyciu writeeeprom - z tym ułatwieniem, że wystarczy później przypisać do tej zmiennej dowolną wartość, i w tym momencie zostanie wpisana do eepromu pod komórkę wskazaną przy deklaracji.
O, to "At 3" mówi o tym, gdzie zapisywać ;). Zmienna single jest potrzebna z dokładnością do 1 cyfry po przecinku, przechowuję w niej ustawienie programowego termostatu - musi to być typ single, gdyż jak wiadomo nie mogę porównywać zmiennych dwóch różnych typów.
Co do obsługi klawiatury - zaraz zajrzę do Twoich źródeł, i spróbuję zrobić w analogiczny sposób.
Doszedłem do wniosku, że najlepiej zacząć zabawę z elektroniką mając nakreślony konkretny cel do zrealizowania - wybrałem przyjemne z pożytecznym, i postanowiłem zrobić układ zarządzający mała szklarnią u taty na działce (kontrola otwarcia okna, włączanie/wyłączanie zraszaczy, prowadzenie statystyk średnich temperatur [ds18b20] z ostatnich dni a kiedyś kiedyś kontrola wilgotności podłoża - póki co nie wiem jak się za to zabrać od strony elektroniki :D). Generalnie na tym etapie mam tylko te dwa problemy - sam układ polutowany i chyba działa :D
Pozdrawiam!
EDIT: problem z single rozwiązany - faktycznie nie pomyślałem o dzieleniu i mnożeniu przez 10 :).
EDIT 2: jednak dalej nie mogę dojść do ładu z przerwaniami... Patrzyłem w kody, i szczerze niewiele rozumiem z tych przerwań. Tak właściwie to co ja powinienem umieścić w timerze/przerwaniu? Odczyt i konwersje temperatury, czy samą obsługę przycisków? Coś czuję, że bez przykładu nie dam rady... :)
Przepraszam że dokopuje temat
Przepraszam że dokopuje temat ale wczoraj ze 6h wlaczyłem z tym problememi nic...
Czy może którys z kolegów "łopatologicznie" napisac jak zapisać zmienną Single do pamięci
deklaracje wyglądaja tak:
W programie przed pętlą głowna robie odczyt:
a w programie głównym raz na dobę ( w pętli funkcji if) dokonuje zapisu obu zmiennych do eeprom:
Dla zmiennej Dt/Dzientyg wszystko jest w porządku - zarówno zapis ja i odczyt jest poprawny natomiast zmienna Sr1twys/Sr1twys1 bądz nie zapisuje się bądz nie oczytuje (zwraca wartość 0.0) Co robie nie tak?
Re: Zapis do EEPROM
Wnioskuję że chodzi o zapis do eeprom. ja bym to zrobił tak:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dzieki Działa i działał ...
Dzieki
Działa i działał ... problem tkwił w czymś innym... Zmienna była wynikiem diałania które jest normalnie wykonywane w programie (wyliczanie sredniej)
Jako, że zapsuję tylko średnią a po restarcie skladowe tej średniej były zerowe więc program ponownie wyliczał srednią "zastępując" oczytaną wartość zerem... Problem rozwiązałem dodojąc do wyliczeń sredniej linijki:
Pozdrawiam
M