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

Pierwszy program na Atmedze 16

fred_fn 29 Mar 2009 17:07 1181 5
  • #1 6349372
    fred_fn
    Poziom 10  
    Napisałem taki program.

    #define F_CPU 1000000L
    #include <avr/io.h>
    #include <util/delay.h>                
    
    int main(void)
    {
        	DDRA = 0xFF; //ustawienie A jako wyjscie
    	DDRB = 0x00; //ustawienie B jako wejscie
    	
        	PORTA = 0x01;
    	_delay_ms(300);
    	PORTA = 0x08;
    	_delay_ms(300);
    	PORTA = 0x40;
    	_delay_ms(300);
    	PORTA = 0x08;
    	_delay_ms(300);
    	PORTA = 0x01;
    	_delay_ms(300);
    	PORTA = 0x00;
    
    	while(1){
    
    	if(PINB == 0x01){
    		PORTA = 0x01;
    		_delay_ms(300);
    		PORTA = 0x08;
    		_delay_ms(300);
    		PORTA = 0x40;
    		_delay_ms(300);
    		}
    	if(PINB == 0x02){
    		PORTA = 0x40;
    		_delay_ms(300);
    		PORTA = 0x08;
    		_delay_ms(300);
    		PORTA = 0x01;
    		_delay_ms(300);
    		}
    	if(PINB == 0x04){
    		PORTA = 0x01;
    		_delay_ms(300);
    		PORTA = 0x08;
    		_delay_ms(300);
    		PORTA = 0x40;
    		_delay_ms(300);
    		PORTA = 0x08;
    		_delay_ms(300);
    		PORTA = 0x01;
    		_delay_ms(300);
    		PORTA = 0x00;
    		}
    	}
    }
    


    Jednak po podłączeniu vcc do pinów 1 - 3 uC nie reaguje. Gdzie w programie jest błąd?
  • #2 6349428
    _Robak_
    Poziom 33  
    Podlaczasz VCC pod wszystkie piny czy po kolei? Vcc podlaczasz przez rezystor ? ;)
  • #3 6349478
    slawko_k
    Poziom 35  
    a gdzie te piny wejściowe masz podpięte? jeśli wiszą w powietrzu to loteria i procek na wszystkich może widzieć poziom wysoki.
    zdecydowanie lepszym rozwiązaniem jest podciągniecie wejść wewnętrzenie do Ucc a podawanie masy na wejście.
  • #4 6349582
    fred_fn
    Poziom 10  
    Wiszą w powietrzu. Podłączam piny osobno, bez rezystora - mam kabelek, i ten pin, na którym chce mieć stan wysoki, łączę kabelkiem z vcc. :-)
    Cytat:
    podciągniecie wejść wewnętrzenie do Ucc

    Ucc = Vcc?
    I jak to zrobć?

    DDRB |= ( 1<<PD2 );
    PORTB |= ( 1<<PD2 );
    DDRB &=~( 1<<PD2 ); 

    Tak?
  • #5 6349735
    poczitamagoczi
    Poziom 14  
    A przez pierwsze 1,5 s prawidłowo załanczają się wyjścis ?;> I czemu po raz drugi ustawiasz pin 1 i 4 ?
  • #6 6349813
    _Robak_
    Poziom 33  
    Noo jak wisza w powietrzu to nie bedzie nigdy ci dzialac. Ustaw tak:
    Cytat:

    DDRB=0x00;
    PORTB=0xFF;

    Tylko teraz masz domyslnie stan wysoki na porcie i musisz zwierac do masy a nie do Vcc.
REKLAMA