Wpis z mikrobloga

#avr #elektronika

Chcę napisać program na sucho, bo nie mam jak sprawdzić czy działa. Są 2 przyciski i 4 diody LED. Po wciśnięciu 1 przycisku, zapalają się diody w kolejności L1,L2,L3,L4. Po wciśnięciu 2 przycisku zapalają się w kolejności L4,L3,L2,L1.

Moj program:

#include
#include
int main (void)
{
DDRB = 0xFF;
PORTB = 0x00;
DDRD = 0x00;
PORTD = 0xFF;

while(1)
{
int i;
for (i=0;i<5;i++)
{
PORTB |= BV(1);
delayms(500);
PORTB&=~
BV(i);
delayms(500);
}
for (i=4;i>0;i--)
{
PORTB|=BV(1);
delayms(500);
PORTB&=~
BV(i);
delayms(500);
}
}
return 0;
}

Dobry tok rozumowania? Dopiero zaczynam z tym i pytam się :D
  • 11
@Maffiozzo97: nie za dobry. Funkcja __delayms() powinna być zakazana. Nie ucz się złych nawyków. Obsługa przycisków przez przerwaniu GPIO z debouncingiem na timerze a potem sekwencja ledów w przerwaniu timera. Na razie pewnie myślisz że się czepiam ale jak spróbujesz zrobić coś rzeczywistego to mi podziękujesz.
nie za dobry. Funkcja __delayms() powinna być zakazana


@keton22: Serio, to wszystko co masz do powiedzenia o tym kodziku? Może skoro opowi wystarcza to przestań się czepiać spraw drugorzędnych i skup się na algorytmie?
@Analityk: widać że nie rozumiesz, ja się nie czepiam, ogarnij model IO na przerwaniach. W AVR nie programowałem już kilka lat więc kodu ci nie podam ale blokowo:
1. pętla główna może być pusta albo zająć się czymś innym w tzw. międzyczasie (w nietrywialnym przypadku dzięki temu program pozostanie responsywny)
2. w inicie aktywujesz PCINT dla portu na którym znajduje się pin od przycisku (doczytaj w DS do swojejgo AVRa jak
@zetisdead: no to juz zalezy od modelu procka, jak pcint budzi to oszczedzanie energii zawsze na propsie alternatywnie mozna nie przegapic jakiegos waznego zdarzenia ktore przepadloby w trakcie delaya. Potem sa dziwy ze np przepadaja pomiary z jakiegos sensora bo obsluga wyswietlacza jest zrobiona na delayu.
@keton22: Twój kod jest nadal słaby (*) a poza delayem nie rozwiązuje zasadniczego problemu z zadaniem opa. Czy użyje przerwań czy timera a może da się inaczej? To bez znaczenia, skąd #!$%@? wiesz czy ten cały jego kod na tym się nie zatrzyma? A jak jest nubkiem to i tak nie ma pojęcia co ty tam wypisujesz.
(*) - jeśli wciśniesz przycisk i np. ściągniesz jakiś pin do zera to możesz