logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMEGA128][GCC] Sterowanie diodą LED

marois 26 Paź 2009 11:51 2100 4
REKLAMA
  • #1 7176537
    marois
    Poziom 10  
    Czy mógłby ktoś pomóc tak zmodyfikować program:(ma działać na ATmega 128, wykonuje 16 milionów operacji)
    aby uzyskac:
    - miganie diody LED z czestotliwoscia około 0,5 Hz (należy wykorzystać pustą
    petle for… odpowiednia ilosc razy)
    - wyswietlanie numeru wcisnietego klawisza na diodach LED w kodzie
    binarnym, ma być 7 diod LED.
    Próbuje go testować na AVR GCC + hapsim, ale jakoś nie wychodzi.
    
    // Sterowanie dioda LED podłaczona do dowolnej linii mikrokontorlera
    // za pomoca przycisku podłaczonego do dowolnej linii minie działakrokontrolera
    #include <avr/io.h> // dostep do rejestrów
    #define DDR(x) _SFR_IO8(_SFR_IO_ADDR(x)-1) // adr. rej. kier. PORTx
    #define PIN(x) _SFR_IO8(_SFR_IO_ADDR(x)-2) // adr. rej. wej. PORTx
    #define LED_PORT PORTD // port diody LED
    #define LED_BIT 4 // bit diody LED
    #define LED_PORT_O LED_PORT // rejestr wyjsciowy
    #define LED_PORT_D DDR(LED_PORT) // rejestr kierunkowy
    #define LED_PORT_I PIN(LED_PORT) // rejestr wejsciowy
    #define KEY_PORT PORTD // port przycisku
    #define KEY_BIT 3 // bit przycisku
    #define KEY_PORT_O KEY_PORT // rejestr wyjsciowy
    #define KEY_PORT_D DDR(KEY_PORT) // rejestr kierunkowy
    #define KEY_PORT_I PIN(KEY_PORT) // rejestr wejsciowy
    int main( void ) // program główny
    {
    sbi(LED_PORT_D,LED_BIT); // uyj linii jako wyjscia
    sbi(KEY_PORT_O,KEY_BIT); //podciagnij linie do logicznej 1
    while(1) // petla nieskonczona
    {
    cbi(LED_PORT_O,LED_BIT); // zapal diode LED
    loop_until_bit_is_clear(KEY_PORT_I,KEY_BIT); //czekaj na nacisniecie przycisku
    sbi(LED_PORT_O,LED_BIT); // zgas diode LED
    loop_until_bit_is_clear(KEY_PORT_I,KEY_BIT); //czekaj na nacisniecie przycisku
    }
    }
    
  • REKLAMA
  • #2 7176845
    chudybyk
    Poziom 31  
    1. poczytaj o funkcji _delay_ms();
    2. spróbuj sam pokombinować a potem dopiero spytać, bo mając problemy z takimi podstawami ktoś dojdzie do wniosku, że ten wątek nadaje się do kosza.
    Pozdrawiam!
  • REKLAMA
  • #3 7176856
    mieczotronix
    Poziom 16  
    (1<<KEY_BIT) zamiast KEY_BIT itd...
  • REKLAMA
  • #4 7176903
    marois
    Poziom 10  
    Fachowcy nie zadają takich pytań, ale ci którzy zaczynają się uczyć TAK. Jak nie chcesz udzielać odpowiedzi to tego nie rób.
    pozdrawiam
  • #5 7177034
    chudybyk
    Poziom 31  
    Zadawać pytania też trzeba umieć. Ty napisałeś, że chcesz, żeby ktoś napisał za ciebie prościutki program. Wątpię, żeby komuś się chciało.
    Zadawaj bardziej konkretne pytania, wtedy prędzej doczekasz się pomocy. Własna inicjatywa jest tu ceniona.
REKLAMA