Skocz do zawartości

Procesor nie działa po odłączeniu od programatora


Razonek

Pomocna odpowiedź

Witam!

Mam bardzo nietypowy problem, a mianowicie napisałem program który włącza/wyłącza diody po naciśnięciu przycisku. Wgrywając program na procesor wszystko jest ok. Test z podłączonym programatorem - wszystko działa. Odłączam programator i czasem coś zadziała ale po chwili tak jakby procesor się zawieszał. Procesor (ATmega8) jest sprawny, wgrałem na niego przed chwilą inny program i działa, sprawdziłem też drugi procesor i ten sam problem.

Reset podciągnięty do Vcc przez rezystor 18k. Zasilanie podpięte odpowiednio pod Vcc i GND oraz pod AVcc i AGND ( i kondensatory 100uF ).

Zamieszczam kod:

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>


int main()
{

DDRD = 0xFF;
DDRC = 0x00;
PORTC = 0xFF;
DDRB = 0x06;
PORTB |= (1<<5);
unsigned char x = 0;

while(1)
{

switch(x)
{

case 1:
PORTD ^= _BV(PD0) ^ _BV(PD1);   
x = 0; 
break;

case 2:
PORTD ^= (1<<2);            
x = 0;
break;

case 3:
PORTD ^= (1<<3);             
x = 0;
break;

case 4:
PORTD ^= (1<<4);             
x = 0;
break;

case 5:
PORTD ^= (1<<5);             
x = 0;
break;


default:

if(!(PINC & 0x01))
{
_delay_ms(30);
while(!(PINC & 0x01)) {}
_delay_ms(30);
x = 1;
}

if(!(PINC & 0x02))
{
_delay_ms(30);
while(!(PINC & 0x01)) {}
_delay_ms(30);
x = 2;
}

if(!(PINC & 0x04))
{
_delay_ms(30);
while(!(PINC & 0x04)) {}
_delay_ms(30);
x = 3;
}

if(!(PINC & 0x08))
{
_delay_ms(30);
while(!(PINC & 0x08)) {}
_delay_ms(30);
x = 4;
}

if(!(PINB & 0x10))
{
_delay_ms(30);
while(!(PINB & 0x10)) {}
_delay_ms(30);
x = 5;
}

}
}
}
Link do komentarza
Share on other sites

Na moje oko to jeżeli działa z programatorem a bez nie, to coś pewnie jest z pinami programatora. Jeden z przycisków jest na PORTB 5 a to jest sygnał SCK. Zawiesić może sie tylko w pętlach while {}. Więc pewnie bez programatora nie wychodzi z pętli while(!(PINB & 0x10)) {} . Spróbuj dać ten przycisk z PORTB 5 na inny pin. Możesz jeszcze zmienić te unsigned char na np int bo możne kompilatorowi coś nie pasuje. Nie wiem co jest żle w programie ale spróbuj dać PORTB = 0xFF; ,Może to coś pomyliłeś z podciąganiem (pin nr 5 jest 6 w kolejności a ty masz (1<<5)).

  • Pomogłeś! 1
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.