Witam, $regfile = "m16def.dat" $crystal = 16000000 'Podłączenie pinów LCD do mikroprocesora ' BL = PortC.1 ' Rs = PortC.2 ' E = PortC.3 'Db4 = PortC.4 'Db5 = PortC.5 'Db6 = PortC.6 'Db7 = PortC.7 Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 Config Lcd = 16 * 2 Config 1wire = Portb.0 ' termometr ds18b20 Dim I As Integer 'zmienne do odczytu temp. Dim S As Single Dim T As String * 4 Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32 ' stopien Cursor Off Cls 'pomiar temp. Do 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE I = 1wread(2) S = I / 16 T = Fusing(s , "##.#") Locate 1 , 1 Lcd "Temp: " ; T ; Chr(0) ; "C" Loop Nie chodzi mi o gotowca tylko chociaż o naprowadzenie na procedury odczytu i zapisu temp, oraz ich przykładowe wykorzystanie.
|
|||
Re: Zapis EEPROM
Nie ma z tym żadnego problemu, zakładając że odczyt temperatury działa Ci prawidłowo. Zapis wewnetrznej pamięci procesora jest banalnie proste, wystarczy wywołać funkcję:
a do odczytu:
zmienna Var to zmienna którą chcesz zapisać, a address to jej adres w pamięci EEPROM uC. Jeśli zapisywana wartość jest typu Byte to możesz zapisywać każdy kolejny adres począwszy od 1 w górę (0 nie jest zalecane). Jeśli natomiast chcesz zapisywać integer'y to każdy z nich ma dwa bajty więc zapisując go pod adresem 1 automatycznie zajęte zostaną adresy 1 i 2 bo gdzieś się musi ten drugi bajt zmieścić. W takiej sytuacji zapisywać należy co drugi adres 1, 3, 5 itd
W twoim programie to będzie jakoś tak:
gdzie N jest dresem który będziesz zwiększał N=N+2 po każdym zapisie temperatury. Do zapisu wykorzystaj timer który odliczy ci te potrzebne 15 min czasu i w obsłudze timera daj zapis do EEPROM. Pamiętaj że M16 ma tylko 512 bajtów EEPROM więc musisz ograniczyć N aby nie wyszło poza zakres.
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ękuje bardzo. Faktycznie
Dziękuje bardzo. Faktycznie proste. Może nawet za proste :)
Myślałem żeby ograniczyć zapis do 4-ch temperatur. Tak żeby wszystkie zmieściły się na LCD 16x2.
Czy w sytuacji gdy na jakimś adresie istnieje już wartość to aby zastąpić ją inną trzeba ją najpierw skasować czy użyć tego samego adresu i zapisać nową wartość?
Wiem że nic nie wiem...
Re: EEPROM
Nie trzeba nic kasować, nadpisujesz jedną wartość na drugą.. Kasowanie to przecież zapis 0 więc było by to bez sensu. Pamiętaj żeby nie zapisywać zbyt często do pamięci nieulotnej bo ona ma skończoną liczbę cykli zapisu. Jeśli nie wyłączasz zasilania a chcesz pamiętać tylko 4 temperatury to wystarczy zapisywać to w dodatkowych zmiennych w programie, dołożyć jeszcze baterię do układu i w momencie braku prądu zapisać do eeprom i wyłączyć układ
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.
Brak zasilania
Witam serdecznie! Czy po utracie zasilania dane zapisane w wewnętrznym EEPROM'ie Atmegi 8 zostaną utracone? Jak sama nazwa pamięci wskazuje, nie powinny. Lecz nie mogę sobie poradzić z zapisem do pamięci wew. jednej wartości WORD, wyłączeniem zasilania, ponownym włączeniem i odczytem tej wartości :(
Re: Eeprom
Zapis jest prosty:
zmienna_word zostanie zapisana po adresem adres i adres +1 bo ma dwa bajty i trzeba o tym pamiętać. Odczyt jest następujący:
i tak samo podajesz tylko adres pierwszej komórki a czytane sa dwie kolejne komórki pamięci. Jak zapisujesz dwie kolejne wartości word to nie wolno ich zapisać np w komórkach 1 i 2 tylko np 1 i 3 bo komórka 2 zostanie automatcznie zapisana przy zapisie word pod adres 1
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.
Eeprom
Witam
Proszę o wytłumaczenie jak to jest z nadpisywaniem danych w atmega8? Dokładniej mówiąc mam zadaną wartość początkową T1=80 i chciałbym aby po ustawieniu jej np na T1=85 było tyle ustawione jako wartość początkowa i taka wartość pojawiała się po zaniku napięcia.
Z góry dziękuję za pomoc.
Pozdrawiam
Re: EEPROM
No to nie widzę problemu. W menu gdzie ustawiasz parametry po wyjściu z menu zapisz parametry do eeprom w procku. Na początku programu odczytaj EEprom do zmiennej tymczasowej. Sprawdź warunkami if czy wartość parametru mieści się w odpowiednich granicach. Jeśli się mieści to T1=Wartosc_odczytana a jeśli się nie mieści to T1=wartosc_domyslna
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.
Ja mam takie coś co wpisuje
Ja mam takie coś co wpisuje domyślną wartość po programowaniu układu (domyślnie komórka wypełniona samymi jedynkami czyli 255)