• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Programowanie diody led AVR

0 głosów
763 wizyt
pytanie zadane 2 grudnia 2015 w C i C++ przez Mavimix Dyskutant (8,490 p.)

Witam, napisałem taki program migający dwiema led'ami:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
	DDRB |= (1<<PB1);
	DDRB |= (1<<PB0);

	void led(char port, int krotkie, int dlugie)
	{
		DDRB ^= (1<<port);
		_delay_ms(krotkie);
		DDRB ^= (1<<port);
		_delay_ms(krotkie);

		DDRB ^= (1<<port);
		_delay_ms(dlugie);
	}

	while(1)
	{
		led(PB1, 150, 800);
		led(PB0, 150, 800);
	}
}

I pojawia się błąd, kiedy chcę wgrać program do mikrokontrolera (Atmega8a-pu, taktowanie mam ustawione na 1MHz):

Proszę i dzięuję za pomoc, pozdrawiam.

3 odpowiedzi

+1 głos
odpowiedź 2 grudnia 2015 przez adrian17 Mentor (354,880 p.)
Brzmi jak problem ze sterownikami. Jaki masz programator i skąd masz sterowniki? Win7? Za każdym razem to się powtarza?
komentarz 2 grudnia 2015 przez Mavimix Dyskutant (8,490 p.)
USBasp, sterowniki nie mapiętam skąd, ale mam WinAVR, tak Win7. Za każdym razem się to powtarza. Kiedyś było wszystko ok.
komentarz 2 grudnia 2015 przez adrian17 Mentor (354,880 p.)
Wiem że czasami oprócz WinAVR czasem osobno trzeba było pobierać dodatkowy sterownik dla usbasp: http://www.protostack.com/blog/2011/05/usbasp-driver-for-windows-7-and-windows-vista-x64/

Ale skoro wcześniej działało i dopiero teraz przestało, to nie mam pojęcia o co może chodzić.
komentarz 3 grudnia 2015 przez Mavimix Dyskutant (8,490 p.)
Reinstalowanie sterowników nic nie dało, ale zaważyłem coś dziwnego: jak usunę drugą funkcję led to wszystko działa poprawnie.
komentarz 3 grudnia 2015 przez adrian17 Mentor (354,880 p.)
...chwila, dopiero teraz zauważyłem że definiujesz funkcję w funkcji, co jest rozszerzeniem GCC. Spróbuj przenieść funkcję led do normalnego miejsca.
komentarz 3 grudnia 2015 przez Mavimix Dyskutant (8,490 p.)

Poprawiłem kod na taki:

#include <avr/io.h>
#include <util/delay.h>

void led(char port, int krotkie, int dlugie)
{
	DDRB |= (1<<port);

	DDRB ^= (1<<port);
	_delay_ms(krotkie);
	DDRB ^= (1<<port);
	_delay_ms(krotkie);

	DDRB ^= (1<<port);
	_delay_ms(dlugie);
}

int main(void)
{
	while(1)
	{
		led(PB1, 150, 800);
		led(PB0, 150, 800);
	}
}

Ale niestety cały czas pojawia się ten sam błąd.

Mi się wydaje że błąd jest w podłączeniu mikroprocesora (co jest raczej nie możliwe, bo sprawdzałem kilkukrotnie), albo w ustawieniach Khazama (co też jest mało prawdopodobne bo nic nie zmieniałem).

komentarz 3 grudnia 2015 przez adrian17 Mentor (354,880 p.)
Jeśli problem jest podczas upoadu, a jedyną różnicą jest ładowany program... nie mam pojęcia. Albo coś ze sterownikiem, albo z transferem, albo atmega jest uszkodzona i mniejsze programy się zapisują, a większe nie.
komentarz 3 grudnia 2015 przez Mavimix Dyskutant (8,490 p.)
Próbowałem na innym procesorze (też Atme'dze) i też nie działało.
+1 głos
odpowiedź 2 grudnia 2015 przez Krawiec91 Pasjonat (19,600 p.)
Wcześniej wgrywałeś i nie było żadnych problemów? Czy coś zmieniałeś w ustawieniach (Khazama, czestotliwość taktowania, fusebity procesora) i ten błąd wyskoczył?
komentarz 2 grudnia 2015 przez Mavimix Dyskutant (8,490 p.)
Nie, nie zmieniałem żadnych ustawień.
–2 głosów
odpowiedź 2 grudnia 2015 przez niezalogowany
Nie prościej używać arduino?
komentarz 2 grudnia 2015 przez Mavimix Dyskutant (8,490 p.)
Za prosto :D

Podobne pytania

+1 głos
3 odpowiedzi 928 wizyt
pytanie zadane 14 września 2015 w C i C++ przez Mavimix Dyskutant (8,490 p.)
0 głosów
1 odpowiedź 410 wizyt
0 głosów
1 odpowiedź 538 wizyt
pytanie zadane 21 sierpnia 2018 w Inne języki przez Storm Obywatel (1,570 p.)

93,720 zapytań

142,644 odpowiedzi

323,266 komentarzy

63,270 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...