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

Programowanie diody led AVR

Object Storage Arubacloud
0 głosów
461 wizyt
pytanie zadane 2 grudnia 2015 w C i C++ przez Mavimix Dyskutant (8,390 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 Ekspert (344,860 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,390 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 Ekspert (344,860 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,390 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 Ekspert (344,860 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,390 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 Ekspert (344,860 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,390 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,390 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,390 p.)
Za prosto :D

Podobne pytania

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

92,551 zapytań

141,400 odpowiedzi

319,531 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...