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

Dziwne zachowanie uC. Ile trwa 1 cykl uC?

Tymek92 27 Lut 2009 19:41 1118 8
REKLAMA
  • #1 6213489
    Tymek92
    Poziom 10  
    Otóż zaprogramowałem w C ATmege8 tak, żeby gdy wcisnę przycisk zapaliła diodę. Układ zasilam z starego zasilacza komputerowego 5V.
    Gdy zbliżam rękę do układu na płytce stykowej dioda zaczyna mrugać, żarzyć się. Czasem gdy dotknę palcem masy układu to przestają dziać się takie cuda.

    ps. czy 1 cykl µC trwa ok. 0,5 sek? (jak wcisnę przycisk i puszczę go to dioda jeszcze chwilę się pali).
  • REKLAMA
  • #2 6213522
    Konto nie istnieje
    Poziom 1  
  • #3 6213538
    Tymek92
    Poziom 10  
    Program:

    #include <avr/io.h>
    #include <util/delay.h>
    #define LED_ON PORTB &= ~_BV(1);
    #define LED_OFF PORTB |= _BV(1);
    
    int main(void)
    {
    DDRB = 0xAA;
    PORTB = 0xAA;
    while (1) 
    {
    	LED_OFF;
      if(bit_is_clear(PINB,PB2))
      {
        
    PORTB &=~_BV(1);
    
      }
      }
    }
    


    PB1 dioda +
    PB2 przycisk do GND.

    pin7 uC do VCC
    pin8 uC do GND
  • REKLAMA
  • #4 6213545
    megaman123
    Poziom 13  
    A wyprowadzenie do którego jest zwarta dioda jest ustawione jako wyjście ? Jeśli DDRxy i PORTxy do którego zwarta jest dioda przedstawia 0 i 0 to się nie dziwić :)

    EDIT - powyższy tekst , byl kiedy Twojego drugiego jeszcze nie było.
    Zresztą skoro Anoda jest zwarta do pinu , to czy define'y nie powinny być odwrotnie ?
  • REKLAMA
  • #5 6213562
    Konto nie istnieje
    Poziom 1  
  • #6 6213582
    Tymek92
    Poziom 10  
    
    DDRB=0xAA (10101010) (wej,wyj,wej,wyj,ect...)
    PORTB=0xAA (10101010) (wys, niski, wys, niski...ect.)
    


    Czyli jeżeli dioda jest na wyjściu i ma stan niski to prąd i tak przez nią przepływa?? Więc powinienem zmienić diodę na wejście, tak?

    jak define'y odwrotnie. LED_ON to stan wysoki LED_OFF to stan niski. (chyba, że poprzez samo naukę źle coś zrozumiałem)

    Wyjście (bitowe 0) daje mi - na pinie PB1 druga nóżka diody idzie do +
    miganie diody za pomocą _delay_ms przebiega bez problemowo.

    Gdy odłączę kabelek to przstają dziać się cuda. Myślę, że ten kabelek działa jak antenka i coś łapie tylko nie wiem czemu program wykrywa to jako podłączenie do GND ;/
  • #7 6213604
    megaman123
    Poziom 13  
    1 - wyjście
    0 - wejście

    Chcąc zaświecić diodą , kiedy anoda jest zwartą z nóżką procka.

    DDRB |= 1<<nr_wyprowadzenia_diody;
    PORTB |= 1<<nr_wyprowadzenia_diody;

    :)
  • REKLAMA
  • Pomocny post
    #8 6213613
    Konto nie istnieje
    Poziom 1  
  • #9 6213645
    Tymek92
    Poziom 10  
    Atom Twój kod działa bez problemu i zakłóceń dzięki wielkie :)

    Acha tylko jak działa to podciąganie PB2 do VCC?

    Z tego ci mi wiadomo to w PORTB = 0xAA porty po kolei pb0 pb2 pb3 pb4... są ustawiane w stany wysokie i niskie na przemian

    W DDRB=0xAA porty po kolei są ustawiane jako wejścia; wyjścia (czyli jeśli się nie mylę + - + - + -... ) tak?

    AAAAA już rozumiem... bity liczy się od PRAWEJ strony... ja w kalkulatorze windows patrzyłem zawsze od lewej >.<

    równie dobrze mogę napisać PORTB=0xFF; też będzie działać :)
REKLAMA