Skocz do zawartości

[C] pamięć EEPROM i oczekiwanie na sygnał


Rzeznik

Pomocna odpowiedź

Witam. Jak zrobić by program uC zapisywał pewne dane w pamięci EEPROM. Wiem że do tego służy biblioteka avr/eeprom.h tylko nie do końca wiem jak z niej korzystać.

Czy można potem dane zapisane w EEPROM odczytać bezpośrednio z komputera??

A teraz drugi problemik, mianowicie jak zaprogramować uC by oczekiwał przez podaną ilość czasu np. 5 sek na np. wciśnięcie przycisku, a w przypadku gdy takiego sygnału przez dany czas nie otrzyma to wykonuje odpowiednie instrukcje?

Link do komentarza
Share on other sites

no tak tylko ja nie chcę żeby on tak sobie czekał w nieskończoność tylko np. jak po tych 5 sekundach nie otrzyma sygnału (przyciśnięcia przycisku) to wykonuje dalsze instrukcje.

Link do komentarza
Share on other sites

Nie znam c ale napisze ci jak to powinno wyglądać.

deklaracja zmiennej x na 5

deklaracja zmiennej y na 1

if (y = 1) {

rozpoczęcie pętli nieskończonej

czekanie 1s

x = x - 1

if (wykryto wciśnięcie) {

y = 0

wyjście z pętli nieskończonej

}

if (x = 0) {

wyjście z pętli

}

}

To chyba najprostszy sposób. Jak jeszcze coś chcesz to pisz na pw.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Armir, twój pomysł raczej też nie wypali ponieważ w czasie oczekiwania 5 sekund nie następuje sprawdzenie czy został naciśnięty przycisk, dopiero po 5 s sprawdza.

Skoro znacz C++ to dlaczego nie programujesz uC w C?? ;D

[ Dodano: 04 Kwi 10 08:37 ]

Sory Armir, jednak coś w tym jest. Jednakże sprawdzane było by co 1 s należało by zmienić czas oczekiwania na np. 1ms to by mogło zadziałać.

Link do komentarza
Share on other sites

jezeli to atmega8 lub inny avr z timerem najlepiej jest zrobić tak:

ustawić timer na 5 sekund. w obsłudze przerwania timera dać kod:

timed_out = 1;

dalej w kodzie (nie w przerwaniu):

timed_out = 0;
uruchom_timer();
while (!(timed_out || wcisniety_przycisk)) {}
wyłącz_timer();
rób_swoje();

timed_out lepiej zadeklarować volatile.

Tym sposobem reakcja będzie dokładnie natychmiast po wystąpieniu jednego ze zdarzeń. Jeszcze lepiej podłączyć przycisk do nóżki przerwania procesora (INT0, albo INT1 w atmedze8). wtedy możemy zrobić pętlę while(flag) {}, i ustawić flag na 0 w pzerwaniu timera albo przerwaniu INT0/1.

Armir, Twój kod zadziała o ile przycisk pozostanie wciśnięty dłużej niż 1ms.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.