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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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