Witam mam takie pytanko jak zapisać zmienną do pamięci mikrokontrolera której wartość mogę zmieniać za pomocą przycisku aby po wyłączeniu i włączeniu wartość zmiennej była taka jaka była ustawiona przed wyłączeniem zasilania? ... dim A as byte Do Debounce Pinb.0 , 0 , Zw , Sub Debounce Pinb.1 , 0 , Zm , Sub Loop Zw: Incr A Return Zm: A = A - 1 Return
|
|||
Re: Zapis zmiennej
Brak zapisu zmiennej do pamięci eeprom.
Moja strona w powijakach
RE; Zapis eeprom
Poszukaj w helpie poleceń writeeeprom i readeeprom jako argumenty podajesz zmienną i adres w pamięci pod który chcesz zapisać
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.
re zapis
Czyli że zapis ma być umieszczony w podprogramie a odczyt przed pętlą główną czyli tak?
Czyli każda zmiana zmiennej A będzie powodować wykasowanie starej wartości i zapisanie nowej. Czyli oznacza to że zmienną A mogę zmienić około 100000 razy bo taka jest trwałość pamięci eeprom ATmega8.
Od jakiego adresu można zacząć adresowanie pamięci EEPROM?
Chodzi mi o to czy jakieś komendy automatycznie nie zapisują danych na kilku pierwszych bajtach pamięci EEPROM i bezpieczniej zaczynać zapisywanie swoich zmiennych od jakiegoś adresu?
W przypadku ATmega8 posiadam 512 B pamięci EEPROM czyli do jakiego adresu mogę maksymalnie zapisywać zmienne?
Re: EEprom
do eeprom żadna komenda nic nie zapisuje, możesz zacząć zapisywać od adresu 1, adres 0 jest niepewny bo może się wykasowac po zresetowaniu procka. Jeśli chcesz zapisywac ustawienia to ja np robie to tak że zapisuje dopiero po ustawieniu całości jeśli przez kilka sekund użytkownik nie klika po przyciskach. Zmniejsza to ilość niepotrzebnych zapisów
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
O tym bym nie pomyślał żeby zrobić zapis po jakimś czasie. A mógł byś podać przykładową komendę zapisu, np że jeśli przycisk S1 nie zostanie naciśnięty przez czas 3 s to ma zostać wykonana instrukcja zapisu. Czy to się robi że np co 3 sekundy sprawdzana jest wartość zmiennej A i jeśli nie równa się ona tej z przed 3 s to wtedy zapisuje jej wartość do EEPROM?
W przypadku ATmega8 posiadam 512 B pamięci EEPROM czyli mogę zapisywać do adresu 511 lub szesnastkowo do 1FF?
Re: Zapis
Można sprawdzać czy zmienna się zmieniła i zapisać ją dopiero wtedy. Ja przeważnie robię licznik który liczy od pewnej wartości w dół. Jak dojdzie do 0 to następuje zapis i czeka do momentu aż zmienna licznikowa znowu nie zostanie ustawiona na jakąś wartość. Przyciskanie przycisków ustawia tą zmienna cały czas a jak przestanie się klikać po klawiaturze to wkońcu wartośc licznika spadnie do 0 i wartości się zapiszą. W efekcie zapis jest zrobiony dopiero po jakimś czasie od skończenia ustawiania parametrów
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.
podprogram
Faktycznie wsadzenie licznika w pod program obsługujący dany przycisk jest chyba najlepszym rozwiązaniem. A zapisywać mogę do adresu 511?
Re: Zmienna
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.
Dzięki
Jeszcze raz wielkie dzięki za szybką i fachową pomoc.
Kilka zmiennych
Witam a co jeśli bym miał kilka zmiennych i nie chciał bym zapisywać wszystkich tylko tę która została zmieniona
Przypuszczam że wystarczy w pod programie obsługi timer0 umieścić odpowiednie instrukcje If Then. Tylko jak sprawdzić czy wartość zmiennej np A po tych 5 s się zmieniła czy nie lub czy jest równa tej zapisanej w eeprom? Muszą być wprowadzone jakieś dodatkowe zmienne?
Re: Zmienne
Możesz odczytać wartość z pamięci, porównać i jeśli są różne to zapisać na jej miejsce nową wartość. Nie wiem jednak czy ma to sens, to wszystko zależy do czego to ma dokładnie finalnie 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.
re zapis
Dokładnie to chodzi o to że to ma być część większego programu i nie będzie zapisywana jedna zmienna a 8. Po co np po zmianie tylko jednej zmiennej o jakąś wartość miała by się reszta ponownie zapisywać jeśli była by taka sama.
Mam jeszcze pytanie do komendy 'Start Timer0' ona powoduje zliczanie od początku? Mam namyśli sytuacje gdy np. nacisnę przycisk podłączony do PB.0 to zmienna A się zwiększy i wystartuje się odliczanie 5s ale po 3s nacisnę przycisk podłączony do PB.1 to zapis nastąpi po 2s czy po 5s. Zliczanie czasu po kolejnej komendzie Start Timer0 będzie kontynuowane czy ruszy od nowa?
Re: Zmienna
No to zrób sprawdzanie tak jak pisałem wcześniej.
Co do timera to nie masz go zatrzymywać ani resetowac bo po co.... resetować masz wartość zmiennej, która sobie zrobisz. Masz np zmienną A typu byte i ona ma zwiększa swoją wartość co każde przerwanie timera. Naciśnięcie przycisku przypisuje A=0 a zapis następuje np dopiero jak zmienna A=100
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.
re zmienna
Ale po zliczeniu A=100 to muszę zatrzymać timer?
Bo jeśli go nie zatrzymam to zmienna A będzie się zliczać dalej i przekroczy wartość 255.
A jakiego stanu uśpienia musiał bym użyć w przypadku gdy do zmiennej A zapisywał bym wartość temperatury z DSa i np co 30minut mikrokontroler miał by sprawdzać czy temperatura nie przekroczyła jakiejś określonej wartości i w zależności od tego wykonywał by odpowiednie instrukcje. Dodatkowo chciał bym móc go wybudzić za pomocą przycisku w celu odczytania bieżącej temperatury lub za pomocą RS-232 w celu wyświetlenia temperatury w komputerze.
Re: Zapis
Ja to robie w taki sposób że liczę np do 100 ale odliczanie idzie tylko wtedy gdy zmienna jest mniejsza niż 100 a gdy osiąga 100 to następuje zapis:
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.
tryby uśpienia
To chyba będzie najlepsze rozwiązanie.
A za pomocą których rozkazów można wprowadzić i wyprowadzić mikrokontroler w jeden z trybów uśpienia?
Re: tryby uśpienia
Jak podamy Ci rozwiązanie na tacy to niczego się nie nauczysz. Ja ze swej strony proponuję poczytać choćby polski help bascoma. Na przykład komendy:
Moja strona w powijakach
rozkazy
Ja to rozumiem tylko że, polski help w tej wersji co mam ma ponad 400 stron. Można go sobie dogłębnie analizować tylko że, wątpię żeby ktoś go całego rozkaz po rozkazie przerobił. Do nauki potrzebny jest konkretny przykład zastosowania i wtedy dopiero to wciąga i jak się nie wie co robi konkretna komenda to można a nawet trzeba zajrzeć do helpu. najbardziej interesowała by mnie instrukcja
Idle
W helpie piszą że, wybudzenie procesora następuje po zgłoszeniu przerwania np. z liczników i wejść przerywających.
Czyli że muszę odblokować przerwania i użyć rozkazu
O transmisji szeregowej natomiast pisze że, działa cały czas. Pod pojęciem układ transmisji szeregowej ukrywają się interfejs RS232 oraz magistrala I2C, czy tylko jeden z nich?
Re: tryby uśpienia
Czyli oznacza to ni mniej ni więcej jak to że najłatwiej wybudzić procka jakimś przerwaniem. A jakim to już wybierz sobie sam jakie Ci pasuje.
Moja strona w powijakach