Skocz do zawartości
Treker

Kurs programowania uC AVR w C (WinAVR, Kurs AVR-GCC)

Pomocna odpowiedź

A wcześniej uruchamiany był skrypt

C:\WinAVR-20070525\bin\install_giveio.bat (nie dotyczy Win9x/Me)

?

Udostępnij ten post


Link to post
Share on other sites

1. Wpierw należy uruchomić skrypt C:\WinAVR-20070525\bin\install_giveio.bat , jeśli nie był

2. W pliku Makefile wpisać typ programator na "stk200" i port na "lpt1" i to wszytko

przewód łączący nie powinien być zbyt długi

[dopisane]

oczywiście w miejsce stk200 wpisać nazwę tego programatora

Udostępnij ten post


Link to post
Share on other sites

avrdude -p atmega88 -P lpt1 -c stk200 -U flash:w:led.hex

avrdude: can't open device "giveio"

avrdude: failed to open parallel port "lpt1"

make.exe: *** [program] Error 1

> Process Exit Code: 2

> Time Taken: 00:01

Nadal nic.

Udostępnij ten post


Link to post
Share on other sites

No właśnie wypisuje komunikat:

avrdude: can't open device "giveio"

trzeba uruchomić ten skrypt

install_giveio.bat

Wykonaj przewód według tego schematu, tamten nie jest zgodny z stk200

https://www.forbot.pl/forum/files/stk200_708.png

albo zmień na nazwę programatora w pliku Makefile

Udostępnij ten post


Link to post
Share on other sites

Witam

Prosiłbym autora kursu o dodanie brakujących komentarzy dla ostatniego programu z 2 części oraz dodanie schematów podłączenia wyświetlacza LCD z 3 części kursu.

Pozdrawiam.

Udostępnij ten post


Link to post
Share on other sites

cześć. ja mam takie pytanie, po co są te 4 diody na matrycy przycisków, bo ogólnie ideę pracy tej klawiatury rozumiem, także kod, ale nie bardzo rozumiem, po co te diody...

Udostępnij ten post


Link to post
Share on other sites

Po kursie dla zupełnie zielonych spodziewałem się czegoś więcej. Na przykład:

- Po co są nawiasy {}? Doczytałem że zamykają główną funkcję, ale czy zamyka się cały program czy jakieś jego części?

- Dlaczego przed delay_ms stosuje się znak _ ?

- Czemu przy while(1) w nawiasie jest 1?

- Czy porty można ustawiać tylko szesnastkowo czy można też wpisać liczbę dziesiętną?

- Po co są znaczki w jednej linii i co to za znaczki a raczej po co są razem &= ~ ?

- Kiedy stosuje się zapis for(;😉? Po co te dwa średniki w nawiasie?

- Czemu pętla for nie jest zakończona komendą next?

- Czemu for a nie wile? Kiedy stosuje się jedną a kiedy drugą?

- Co to za zapis? _delay_ms((PIND & _BV(0))? 1000: 200);

Co oznacza? Kompletnie nic nie wyjaśnione w pierwszych lekcjach tylko od razu głęboka woda i hulaj sam.

To dlatego ludzie nie uczą się C tylko Bascoma bo bascom przynajmniej porządnie wyjaśniony a jak nie to ma porządnego polskiego helpa.

Nie nie, to nie dla mnie. Przynajmniej na obecną chwilę. Pozdrawiam miłośników C i autorów kursu.

Udostępnij ten post


Link to post
Share on other sites
Po kursie dla zupełnie zielonych spodziewałem się czegoś więcej. Na przykład:

- Po co są nawiasy {}? Doczytałem że zamykają główną funkcję, ale czy zamyka się cały program czy jakieś jego części?

- Dlaczego przed delay_ms stosuje się znak _ ?

- Czemu przy while(1) w nawiasie jest 1?

- Czy porty można ustawiać tylko szesnastkowo czy można też wpisać liczbę dziesiętną?

- Po co są znaczki w jednej linii i co to za znaczki a raczej po co są razem &= ~ ?

- Kiedy stosuje się zapis for(;😉? Po co te dwa średniki w nawiasie?

- Czemu pętla for nie jest zakończona komendą next?

- Czemu for a nie wile? Kiedy stosuje się jedną a kiedy drugą?

- Co to za zapis? _delay_ms((PIND & _BV(0))? 1000: 200);

Co oznacza? Kompletnie nic nie wyjaśnione w pierwszych lekcjach tylko od razu głęboka woda i hulaj sam.

To dlatego ludzie nie uczą się C tylko Bascoma bo bascom przynajmniej porządnie wyjaśniony a jak nie to ma porządnego polskiego helpa.

Nie nie, to nie dla mnie. Przynajmniej na obecną chwilę. Pozdrawiam miłośników C i autorów kursu.

A ja nie wiem o co Ci chodzi odpowiedzi na większość pytań które zadajesz znajdują się w tym kursie, jestem tego pewien w 100%. A co do reszty twoich pytań to są to podstawy języka C, wiec jeśli w tym masz braki to z AVR-GCC sobie nie radzisz.

Udostępnij ten post


Link to post
Share on other sites
A co do reszty twoich pytań to są to podstawy języka C, wiec jeśli w tym masz braki to z AVR-GCC sobie nie radzisz.

No chwileczkę, skoro ów kurs jest dla zupełnie zielonych to chyba te podstawy powinny być w podstawach a ich tam nie ma, albo ja nie znalazłem.

Bascom idzie mi "jako tako". Sporo wiem i to co chę napisać napiszę a w C nic nie kminię.

A ja nie wiem o co Ci chodzi odpowiedzi na większość pytań które zadajesz znajdują się w tym kursie, jestem tego pewien w 100%.

Jeśli są to na pewno nie w dwóch czy trzech pierwszych lekcjach.

W ogóle według mnie kurs powinien zacząć się od zupełnie czegoś innego. Powinno być wyjaśnienie do czego służą poszczególne znaki jak się je łączy czemu tak a nie inaczej. W bascom wszystko jest łatwiejsze.

Udostępnij ten post


Link to post
Share on other sites
No chwileczkę, skoro ów kurs jest dla zupełnie zielonych

Nikt nie twierdzi ze jest to kurs na zupełnie zielonych, wg mnie pewne zagadnienia z C zostały tam omówione dla przypomnienia.

Bascom idzie mi "jako tako". Sporo wiem i to co chę napisać napiszę a w C nic nie kminię.

Pewnie po tym zdaniu ludzie z tego forum mnie zlinczują, ale trudno 😋 Bascom przypomina składanie programu z "klocków" i jak to mawia mój wykładowca jest to język dla Bardzo leniwych i muszę przyznać ze wyjątkowo zgadam się z tymi słowami 😉

W ogóle według mnie kurs powinien zacząć się od zupełnie czegoś innego.

To napisz lepszy.

Udostępnij ten post


Link to post
Share on other sites

- Po co są nawiasy {}? Doczytałem że zamykają główną funkcję, ale czy zamyka się cały program czy jakieś jego części?

Klamry używam do grupowania kodu, zamykamy w nich blok instrukcji. Możesz używać ich wszędzie praktycznie. Dla przykładu:

Funkcję warunkową if używam następująco:

if (warunek logiczny){ //otwieram blok komend wykonanych jeśli warunek spełniony
	    	  //Blok komend
}else{			 //Zamykam blok dla spełnionego warunku  blok komend jeśli  warunek nie jest spełniony
}

W ten sposób w funkcji warunkowej możemy w ykonać wiele poleceń, ale nic nie stoi na przeszkodzie żeby tych nawiasów nie używać jeśli w funkcji warunkowej mamy tylko jedną komendę do wykonania np.

if (warunek logiczny)
jesli_prawda();
else
jeśli_falsz(); 

ale jeśli zapiszesz

 if (warunek logiczny)
Wykonaj_to();   //wykona się tylko pierwsza funckja
i_jeszcze_to();  // To się będzie wykonywac bez względu na to czy warunek został spelniony bo nie należy do niego

Pisząc kod możesz pisać

{ komendy jakieś;
jakieś ;
jakieś;
}
{ Komendy jakieś;
jakieś;
jakieś;
} 

ale taka składania nie ma sensu fakt zgrupowania poleceń fizycznie nic nie zmienia tylko zasmieca kod.

- Dlaczego przed delay_ms stosuje się znak _ ?

_delay_ms jest to makro i wcale nie musi się tak nazywać ale dając te podkreślenie zostawiamy wolną nazwę delay_ms pod którą możemy napisać funkcje realizującą opóźnienie. Wydaje sie że nie ma to sensu bo poco pisać funkcje która realizuje coś co już może być realizowane przez makro. Jednak nie zaleca sie używania makra dla dużych wartości parametru i poleca się napisać funkcje która to zrealizuje. Dodatkowo możesz napisać funkcje która będzie miała taki interface jaki chcesz. Czyli parametry jakie będziesz wprowadzać będą w dogodnym dla ciebie formacie.

- Czemu przy while(1) w nawiasie jest 1?

Taka jest składnia while.

while(Warunek_logiczny){
Komendy wykonywane jesli spelniony;
}
- Czy porty można ustawiać tylko szesnastkowo czy można też wpisać liczbę dziesiętną?

Rejest w którym przechowujesz jakiekolwiek konfiguracje przechowuje liczbe, to w jakim systemu mu podasz jest bez wiekszego znaczenia. Dla mnie kod szesnastkowy jest nieczytelny i wprowadzam binarnie. Wtedy mam czarno na biały które bity są ustawione.

- Po co są znaczki w jednej linii i co to za znaczki a raczej po co są razem &= ~ ?

Są to operatory logiczne.

~ jest to negacja wyrażenia przed którym stoi.

wszelakiego rodzaju zapisu typu += *= |= są to skrócone zapisy.

dla przykładu:

a = a + b
a += b 

te zapisy są równoważne

& oznacza iloczyn logiczny

| suma logiczna

- Kiedy stosuje się zapis for(;😉? Po co te dwa średniki w nawiasie?

Średniki wynikają ze składni for'a

for (a = Wartosc_Poczatkowa; Warunek_koncowy; Operacja_wykonywana_po_kazdym_przejscu_petli){
blok komend}
for(i  = 5; i<10; i++) {  //Typowe użycie
Jakas_komenda(); 
}
//Nic nie stoi na przeszkodzie aby użyć następującej skladni
for(i = 1 ; b<10 ; i = i+b){
jakies tam komend();
}  //Przy takim zastosowaniu jednak trzeba uważac zeby warunek wyjsca z for zostal spelniony bo inaczej wpadniemy w petle bez wyjscia

for(;😉 nie podajesz żadnych warunków początkowych ani warunku wyjściowego więc będzie wykonywać się cały czas.

for(;😉 ma taki sam rezultat jak while(1) można stosować to zamiennie.

- Czemu pętla for nie jest zakończona komendą next?

Ponieważ w jezyku C ma inna składnię.

- Czemu for a nie wile? Kiedy stosuje się jedną a kiedy drugą?

Kwestia dowolności co jest ci wygodniej używać.

- Co to za zapis? _delay_ms((PIND & _BV(0))? 1000: 200);

(PIND & _BV(0))? 1000: 200 jest to taki bardzo skrócony if

warunek_logiczny? jesli_Prawda: jesli_falsz

Prawdą jest że na większość tych pytań są odpowiedzi w kursach C 'komputerowego'

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Bascom przypomina składanie programu z "klocków" i jak to mawia mój wykładowca jest to język dla Bardzo leniwych i muszę przyznać ze wyjątkowo zgadam się z tymi słowami 😉

IMG_4d21ecd50cadc8325.jpg

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Witam, jak mam czas, to czytam sobie te kursy C, gdyż czasem programuje sobie w C++ proste aplikacje np. kalkulator w konsoli (trochę wstyd:P), Bascom trochę rozumiem, lecz nigdy jeszcze nie programowałem mikrokontrolerów - na razie tylko teoria. Ale nie o to tutaj chodzi, chodzi mianowicie o to, że nie rozumiem z kąd biorą się te dziwne ustawienia pinów np.:

PORTD = 0xaa

Mógłby ktoś mi wytłumaczyć na jakiej zasadzie je się ustawia i ew. zmienia ich stany?

Udostępnij ten post


Link to post
Share on other sites

@matrix: aż dziwne, że się nie zapytałeś, co robi "=", w końcu np. w Pascalu aby przypisać wartość było :=. Argument, że jest kiepski help jest chybiony - opisy (datasheet) do AVRów są bardzo dokładne, a reszta to podstawy podstaw języka C. a początek:

http://pl.wikipedia.org/wiki/C_(język_programowania)

edit:

@Speedos: jeśli zajrzysz do dokumentacji ATMega8 na strone 52 to tam jest to wyjaśnione.

Udostępnij ten post


Link to post
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!

Gość
Napisz odpowiedź...

×   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...