Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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?

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.

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.

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ć.

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.

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...