Nauka programowania mikrokontrolerow od podstaw.

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Arragon
-
Posty: 3
Rejestracja: 25 kwie 2007, 20:40

Nauka programowania mikrokontrolerow od podstaw.

Post autor: Arragon » 25 kwie 2007, 21:40

Witam wszystkich, jest to mój pierwszy post na forum :)
Od jakiegoś czasu interesuję się elektroniką, jak na razie jestem na dosyć niskim poziomie (kończę przerabiać "Oślą łączkę", zrobiłem trochę prostych projektów znalezionych w internecie), ale podstawy elektroniki analogowej sądzę, że mam już w miarę opanowane (nie idę na przód, jeśli dokładnie nie zrozumiem i wypróbuję jakiegoś schematu) i nieuchronnie zbliżam się do programowania. Na początki wszystko wydawało mi się proste, kupuję mikroprocesorową oślą łączkę i płytkę AVT-3500 i jakoś leci, im więcej jednak czytam na ten temat, tym bardziej wszystko mi się komplikuje :). Mam nadzieję, że pomożecie mi rozwiązać moje wątpliwości... Przepraszam z góry, za ewentualny zły dział, lub niepotrzebny wątek, ale zależy mi na wyjaśnieniu pewnych kwestii, przed wydaniem sporych jak dla mnie pieniędzy praktycznie w ciemno...

1. W tekscie ze strony http://www.btc.pl/pdf/mdp_wstep.pdf zalazłem informację, że do ćwiczeń z książki oprócz AVT-3500 może być wykorzystywany ZL11AVR, wygląda mi na "bardziej profesjonalny" :) ładniej wyprowadzone złącza itd, ale jak to wygląda z "kompatybilnością" z zadaniami z książki, czy wszystkie będę mógł wykonywać identycznie, jak gdybym posługiwał się 3500, czy może wystąpią jakieś problemy dyskwalifikujące takie rozwiązanie dla początkującego?
2. Czy będę potrzebował coś poza jedną z wymienionych płytek? Z przedstawionego wstępu wynika wprawdzie, że nie, ale gdzieś na forum widziałem informacje o konieczności zaopatrzenia się w programator ISP STK200/300, do czego on właściwie służy?
3. Jak wygląda kwestia potrzebnych przewodów w przypadku poszczególnych płytek i portów w komputerze? Nie mam na swojej płycie ani gameportu, ani LPT, czyli będę musiał zaopatrzyć się z kontrolery zarówno jednego i drugiego? (nie potrafię teraz podać linka, ale widziałem gdzieś schemat kabla połączeniowego do samodzielnego wykonania i jeden kabel odchodził właśnie do gameportu) czy da się to jakoś podłączyć do COM i czy są dostępne gotowe kable, estetyczniejsze niż własna robota? Na ZL11AVR widzę ładnie wyprowadzone złącze na przykręcaną wtyczkę, ładnie więc wyglądałoby to podłączone jednolitym kablem :)
4. Do czego służy reszta złącz (listwy montażowe? w każdym razie te na śrubki...) i jak wygląda kwestia zasilania?
5. Jak właściwie wygląda cała procedura programowania? Po napisaniu programu i jego kompilacji wysyłam go na płytkę, w której umieszczony jest mikrokontroler, sprawdzam jego działanie na wyswietlaczu LED, wyciągam z podstawki i umieszczam w docelowym układzie?
6. Czy są jakieś kwestie o których nie wspomniałem, a o których powinienem wiedzieć? A może w ogóle lepszym rozwiązaniem byłaby książka "Programowanie mikrokontrolerów AVR w języku Bascom" i ZL2AVR?

Trochę to zajęło, ale naprawdę jestem poważnie zainteresowany tym tematem, a może nawet edukacją w tym kierunku i nie chciałbym zrazić się na początku niepotrzebnym wydaniem kasy, lub wystartowaniem od zbyt wysokiego poziomu... Liczę na Waszą pomoc.

TeslaBuilder
-
Posty: 80
Rejestracja: 02 lut 2007, 11:31
Lokalizacja: Kalisz
Kontakt:

Post autor: TeslaBuilder » 26 kwie 2007, 13:17

Witam.
Programator jak sama nazwa wskazuje służy do programowania. Potrzebujesz go, żeby wysłać program do µC. Co do programowania to w żadnym wypadku nie chcę uchodzić za specjalistę, ale zdecydowana większość osób obeznanych w temacie poleca Asemblera, a nie Bascoma.
Pozdrawiam.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 26 kwie 2007, 14:51

większość osób obeznanych w temacie poleca Asemblera, a nie Bascoma.
Pokaz mi te osoby... NIe wierze, zeby mozna bylo polecac asm zamiast Bascoma. Chyba bardziej C/C++ zamiast Bascoma ? O tym jak Bascom ogranicza programiste nie bede pisal, natomiast assemblera sie "prawie" nie stosuje. Oto dlaczego:
- wymaga dokladnej znajomosci architektury uK
- wymaga znacznie wiekszych nakladow czasu
- latwiej popelnic blad
- brak zaawansowanych rozwiazan typu wskazniki, tablice, zmienne (np. 16-bitowe), funkcje, klasy etc
Poza tym C/C++ zajmuje niewiele wiecej pamieci niz asm, szczegolnie w ukladach z architektura dedykowana dla C. A jak myslisz - po co caly czas zwieksza sie pamiec programu? Wlasnie po to, aby umozliwic zmieszczenie duzych programow w C.
Jezyk maszynowy stosowany jest glownie do optymalizacji najbardziej kluczowych procedur, ale do optymalizacji, a nie do pisania calego programu. Zasadnicza czesc pisana jest w jezykach wyzszego poziomu.
Reasumujac: nie zgadzam sie z Twoja wypowiedzia :wink:

ZbeeGin

Post autor: ZbeeGin » 26 kwie 2007, 17:23

Arragon pisze:1. W tekscie ze strony http://www.btc.pl/pdf/mdp_wstep.pdf zalazłem informację, że do ćwiczeń z książki oprócz AVT-3500 może być wykorzystywany ZL11AVR
Z analizy obu zestawów nie wynika żadna niekompatybilność. Przynajmniej nic takiego nie zauważyłem.
Arragon pisze:3. Jak wygląda kwestia potrzebnych przewodów w przypadku poszczególnych płytek i portów w komputerze? Nie mam na swojej płycie ani gameportu, ani LPT, czyli będę musiał zaopatrzyć się z kontrolery zarówno jednego i drugiego?
Nie pozostaje nic innego jak poszukać programatora podłączanego do portu USB i którego obsługę zapewnia pakiet BASCOM.
Arragon pisze:4. Do czego służy reszta złącz (listwy montażowe? w każdym razie te na śrubki...) i jak wygląda kwestia zasilania?
Dokumentacja wyjaśni wszystko :arrow: http://www.btc.pl/pdf/zl11avr.pdf
Arragon pisze:5. Jak właściwie wygląda cała procedura programowania? Po napisaniu programu i jego kompilacji wysyłam go na płytkę, w której umieszczony jest mikrokontroler, sprawdzam jego działanie na wyswietlaczu LED, wyciągam z podstawki i umieszczam w docelowym układzie?
TAK. Jeśli w urządzeniu docelowym będzie zawarty dokładny podzbiór peryferii z AVT3500/ZL11AVR to teza ta będzie w 100% prawidłowa. Można także zaprogramować procesor w zestawie uruchomieniowym, ale w docelowym układzie (nie zgodnym zupełnie z oba w/w płytkami) dopiero nastąpi sprawdzenie poprawności programu. Ten drugi sposób jest przydatny gdy nie chcesz tracić miejsca na płytce by zamontować tam złącze ISP.
Arragon pisze:6. Czy są jakieś kwestie o których nie wspomniałem, a o których powinienem wiedzieć? A może w ogóle lepszym rozwiązaniem byłaby książka "Programowanie mikrokontrolerów AVR w języku Bascom" i ZL2AVR?
Widzisz. Miałem oba zestawy AVT3500 (do dziś mam) i ZL2AVR (oddałem w dobre ręce :) ) i dla Mnie osobiście ZL2AVR był lepszy: z powodu swojej konigurowalności - nic nie było narzucone; miał więcej peryferii i możliwość użycia własnych również; bardziej zaawansowany procesor. Niesty książka Marcina Wiązani już nie prowadzi tak za rączkę jak książka Piotra "Guru" Góreckiego :wink: . ZL2AVR ma jeszcze jedną zaletę - bez zbędnych sztuczek zamiast Mega8 możesz włożyć nowszy Mega88.

W tej kwestii jeszcze jedno moje spostrzeżenie. Zamiast tych zestawów wolałbym zestaw ZL10AVR. Niestety jego cena nieco odstrasza.

---
alaris pisze:- wymaga dokladnej znajomosci architektury uK
Niestety. Bez poznania dokładnej architektury uK to tworzenie aplikacji w dowolnym języku będzie sztuką dla sztuki. Mikrokontrolery to nie tylko jądro, ale mnóstwo urządzeń peryferyjnych które trzeba oprogramować. Aby zapalić diodę nie wystarczy napisać printf() czy cout() z odpowiednim parametrem...
Uważam zatem ten argument za mocno nie trafiony.
Ostatnio zmieniony 01 sty 1970, 1:00 przez ZbeeGin, łącznie zmieniany 3 razy.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 26 kwie 2007, 17:42

ZbeeGin pisze:Uważam zatem ten argument za mocno nie trafiony.
Jasne, ze pisanie w jakimkolwiek jezyku wymaga znajomosci architektury danego mikrokontrolera. W moim argumencie bylo slowo DOKLADNEJ, a oznacza to, ze chcac dodac dwie liczby nie musze wiedziec z jakich rejestrow czy akumulatora procesora skorzystac, aby tego dokonac. Tak samo sprawa wyglada z przerwaniami, nie trzeba znac adresow przerwan, ani sposobow ich obslugi, bo w C zalatwia to specjalna funkcj typu SIGNAL czy INTERRUPT. Kolejny przyklad, to operowanie na pamieci - tu rowniez nie trzeba znac adresu fizycznego i sposobu odnoszenia sie do niego, czyli gdzie go wpisac, zeby dostac zawartosc komorki. Poza tym obsluga takich peryferiow jak EEPROM moze byc dokonana za pomoca funkcji bibliotecznej. Wiecej nie chce mi sie wymyslac - podtrzymuje swoj argument :)

DODANO PO ZROBIENIU KAWY:
Programowanie w C nie wymaga znajomosci architektury. Mozna np. stworzyc obiekt o nazwie cout, przeladowac operator i pisac na ekranie w stylu C++:

Kod: Zaznacz cały

cout << "Hello world" ;
Po drugie, gdy nad projektem pracuje wiecej niz jedna osoba, ktos moze stworzyc biblioteke i da sie wlaczyc diody nie majac kompletnego pojecia o portach, np.

Kod: Zaznacz cały

leds.on(LED_1 | LED_2 | LED_7) ;

Dar.El
-
Posty: 65
Rejestracja: 10 lut 2007, 20:18
Lokalizacja: Warszawa

Post autor: Dar.El » 27 kwie 2007, 8:59

Witam
Piszę tylko w asemblerze, jakoś nie mogę zmusić się na C. Pisząc w językach wyższego poziomu traci się zasoby i szybkość na rzecz szybszego pisania programu. Jak stosuje się małe mikrokontrolery, które mają 1KB na kod, to C jest tu już bezsilne. Widziałem już różne sterowniki działające na programie napisanym w C i mógłbym to porównać do taniej chińszczyzny, działały powoli, było widać jak rysują grafikę i ogólnie nie było to rozwiązanie ciekawe. C można stosować od ARM w górę a gdy chce się zastosować małe µK nie tylko do mrugania diodą to lepiej zrobić to w asemblerze. Stosując makra i gotowe procedury w asemblerze, też można osiągnąć dobry czas pisania.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 27 kwie 2007, 14:39

Dar.El pisze:Jak stosuje się małe mikrokontrolery, które mają 1KB na kod, to C jest tu już bezsilne.
Stusujac "maly" uK (ATtiny13) udalo mi sie stworzyc sensor do rozpoznawania gestow dloni i wysylania kodow w RC5, napisany wlasnie w C. Po drugie architektura AVR jest specjalnie OPTYMALIZOWANA pod katem C. Po trzecie - nie ma znaczenia, ze piszesz programy szybsze, bo i tak nie zaistniejesz na rynku. Zaistnieje konkurencja, ktora robi gorszy soft, ale szybciej (tzw. time-to-market). Poza tym pisanie w C nie zamyka drogi na asm (moza optymalizowac kluczowe algorytmy) i koncowy efekt jest zalezny od umiejętności, wiedzy i doświadczenia programisty. Po czwarte - nie wiem czy stosowanie funkcji biblioecznych, optymalizowanych przez cale rzesze programistow, nie przyspieszy programu bardziej, niz nieumiejetne pisanie tej samej funkcji w asm.

ZbeeGin

Post autor: ZbeeGin » 27 kwie 2007, 17:27

Oj... Zrobił się nam tutaj spory Off-Topic. Niestety nie mogę podzielić tak postów by rozdzielić w pełni dyskusję na dwa tory, zatem proponuję zakończyć ten "boczny tor". Sam przestawiłem zwrotnicę, więc sam postawię szlaban.

Dalsze posty typu "boczny tor" będą niestety usuwane.

Arragon
-
Posty: 3
Rejestracja: 25 kwie 2007, 20:40

Post autor: Arragon » 03 maja 2007, 11:44

Witam,
dostałem już książkę Mikrokontrolery dla początkujących teraz kolej na płytkę testową... Najprawdopodobniej zaopatrzę się w kontroler LPT i sam zmontuję sobie jedną z wymienionych wcześniej płytek. Mam pytanie w związku ze schematem kabla programującego (http://sklep.avt.pl/photo/_pdf/AVT3500.pdf ostatnia strona) Czy pierwszy od góry pin +5V mogę podpiąć do czerwonego kabla z wtyczki molex? a w przypadku plytki zl11avr i zasilania z usb nie podpinac wcale?
Do czego na płytce zl11avr służy złącze db9f w lewym górnym rogu? Dokumentacja wiele mi nie mówi...
Ile orientacyjnie będą mnie kosztować elementy poszczególnych płytek? Według wstępnych obliczeń wyszło mi, że powinienem zmieścić się w 100PLN, ale czy na pewno?
dzięki za pomoc...

ZbeeGin

Post autor: ZbeeGin » 03 maja 2007, 15:03

Arragon pisze:Mam pytanie w związku ze schematem kabla programującego (http://sklep.avt.pl/photo/_pdf/AVT3500.pdf ostatnia strona) Czy pierwszy od góry pin +5V mogę podpiąć do czerwonego kabla z wtyczki molex?
Tak, możesz. Jednak jedno małe "ale"; wykorzystaj tamto 5V oraz masę (GND - przewód czarny). Tak aby zasilanie zawsze było włączane gdy podłączysz gniazdo Molex. Takie gniazda na przewód są dostępne.
Arragon pisze:a w przypadku plytki zl11avr i zasilania z usb nie podpinac wcale?
W tym modelu masz zworkę PWR_SEL którą wybierasz źródło zasilania: albo z jednego ze złącz JP1/JP2 albo z gniazda USB. Osobiście wybrałbym złącze USB i zastosował fabryczny przewód połączeniowy. Będzie łatwiej...
Arragon pisze:Do czego na płytce zl11avr służy złącze db9f w lewym górnym rogu? Dokumentacja wiele mi nie mówi...
Na Rys. 2 w dokumentacji ZL11AVR jest przecież opisane. Jest to gniazdo interfejsu RS232 służącego do komunikacji "ze światem" - przede wszystkim z terminalem. W przypadku AVT3500 musiałbyś je podłąłączyć na przewodzie do złącza ARK po lewej stronie na dole. Zatem tutaj projektanci zestawu stanęli na wysokości zadania i uprościli sprawę. Jak zresztą w wielu innych miejscach także...
Arragon pisze:Ile orientacyjnie będą mnie kosztować elementy poszczególnych płytek? Według wstępnych obliczeń wyszło mi, że powinienem zmieścić się w 100PLN, ale czy na pewno?
Jak składałem płytkę AVT3500 3 lata temu to koszt części wyniósł ok. 65zł. Zatem teraz będzie to ok. 75zł, w przypadku ZL11AVR będzie więcej: dochodzi parę dodatkowych elementów (m.in. złącze USB, MAX232, złącze DB9...). Niestety każdy sklep jest inny i musisz policzyć sam.

Arragon
-
Posty: 3
Rejestracja: 25 kwie 2007, 20:40

Post autor: Arragon » 05 maja 2007, 16:44

Witam zdecydowałem się ostatecznie na avt-3500, przed złożeniem zamówienia chciałbym mieć jednak pewność co do poprawności całego zestwu. Byłbym wdzięczny za dokładne sprawdzenie poniższej listy. Największe wątpliwości mam co do rozmiarów elementów, które występują właśnie w różnych rozmiarach, czyli goldpiny i złącza ARK, oraz potencjometrów, których było kilka, różniących się jakimś pojedynczym symbolem. W przypadku jakiegoś błędu byłbym wdzięczny za podanie alternatywy ze sklepu avt.

nazwa produktu netto PLN vat brutto PLN suma PLN
AVT3500 A
Płytka testowa do kursu BASCOM AVR Mikroprocesorowa Ośla Łączka - płytka drukowana 18.03 22 22.00 22.00
R680
REZYSTOR 680om 0.41 22 0.50 0.50
R82
REZYSTOR 82om 0.41 22 0.50 0.50
R3_3K
REZYSTOR 3.3kom 0.41 22 0.50 0.50
R330
REZYSTOR 330om 0.41 22 0.50 0.50
R10K_1
REZYSTOR 10kom 0.41 22 0.50 0.50
R1M
REZYSTOR 1Mom 0.41 22 0.50 0.50
KE220/163
KONDENSATOR ELEKTROLIT. 220uF/16V 1.31 22 1.60 1.60
KC100nF
KONDENSATOR CERAMICZNY 100nF 0.57 22 0.70 0.70
KC33pF
KONDENSATOR CERAMICZNY 33pF 0.57 22 0.70 0.70
1N5822
DIODA 1N5822 0.49 22 0.60 0.60
L-934GC
DIODA LED L-934GC 0.41 22 0.50 0.50
BC516
TRANZYSTOR BC516 0.41 22 0.50 3.00
BC548B
TRANZYSTOR BC548B 0.16 22 0.20 0.20
PCF8591T
UKŁAD SCALONY PCF8591P 8.20 22 10.00 10.00
TL431CLP
UKŁAD SCALONY TL431CLP 0.49 22 0.60 0.60
LED2WA
WYŚWIETLACZ LED2WA (DA56-11EWA) 4.34 22 5.29 10.58
ARK2/500
ZŁĄCZE ŚRUBOWE (RASTER 5MM) 0.66 22 0.81 5.67
ARK3/500
ZŁĄCZE ŚRUBOWE (RASTER 5MM) 0.98 22 1.20 4.80
MIKROSW 1.5
MIKROSWITCH 1.5mm 0.20 22 0.24 0.48
Q4MHz
REZONATOR KWARCOWY 4MHz 0.82 22 1.00 1.00
PR1K HEL POZ
POTENCJOMETR PR 1kom HELITRIM POZIOMY 1.56 22 1.90 1.90
PR10k CER
POTENCJOMETR PR10kom CER (MINIATUROWY) 0.41 22 0.50 0.50
DIL16
PODSTAWKA 16 PIN 0.16 22 0.20 0.20
DIL 20 PREC
PODSTAWKA PRECYZYJNA 20 PIN 1.31 22 1.60 1.60
DIL40
PODSTAWKA 40 PIN 0.41 22 0.50 0.50
DIL20
PODSTAWKA 20 PIN 0.20 22 0.24 0.24
JUMPER 6
JUMPER 6MM CZARNY 0.08 22 0.10 1.00
JUMPER 6 1
JUMPER 6MM CZARNY Z UCHWYTEM 0.08 22 0.10 1.00
GOLDPIN 1x40
LISTWA KOŁKOWA 1X40 PROSTA - GOLD PIN 0.82 22 1.00 2.00
Z-BL20/1G
LISTWA JEDNORZĘDOWA Z-BL20/1G 1.31 22 1.60 3.20
ATTINY2313
UKŁAD SCALONY ATTINY2313-20PI DIP20 3.93 22 4.80 4.80

[ Dodano: 2007-05-14, 21:33 ]
Dostałem dzis plytke i mialem nadzieje, ze jeszcze dzisiaj sie nia pobawie a tu zonk :/
Przy probie wgrania pierwszego programu z ksiazki:

$regfile = "attiny2313.dat"
$crystal = 1000000

Config Portb = Output
Config Portd = Output
Portd = 2
Do
If Portd = 64 Then Portd = 1
Portd = 2 * Portd
Waitms 250
Loop

Wyskakuje "could not identify chip with ID:000000" a zaraz potem "Selected chip and target chip do not match AT90S2313 <> ATTINY2313". Przejrzalem google i widze ze nie jestem jedyna osoba, ktora ten problem spotyka, zadno ze znalezionych rozwiazan jednak nie skutkuje :/ Zasilanie podlaczone mam z molexa do zlacza "power". Kabel programujacy jak na rysunku: Obrazek Przy "robieniu" kabla sprawdzalem buzzerem poszczegolne zyly, wszyskie sa w calosci.
W opcjach mam "sample electronic programer i lpt address 3BC (kontroler LPT) Attiny jest sprawny, mial juz wgrany zegar, ktory dziala prawidlowo. Gdzie wiec moze byc przyczyna?
dzieki za pomoc

Kazik
-
Posty: 17
Rejestracja: 24 sie 2007, 9:52
Lokalizacja: Krosno

Post autor: Kazik » 24 sie 2007, 10:03

Witam wszystkich! Niedawno zacząłem przygode z mikrokontrolerami AVR. Postanowiłem skorzystać z zestawu uruchomieniowego ZL11AVR z mikrokontrolerem ATtiny2313.
Mam problem z podpięciem do kompa. "Jeśli płytka testowa jest zasilana z zasilacza , wtedy szósta żyła kala programującego nie może być dołączona do komputera." O co w tym chodzi? Bardzo prosze o pomoc :smile:

Z góry dziękuje :grin:

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 24 sie 2007, 10:31

Ta szósta żyła to zasilanie. Nie mam tego zestawu ale z reguły tak jest. Tak więc chodzi o to żeby nie łączyc ze soba dwóch źródeł napięc, jednego z kompa a drugiego -zasilacza. A czy programator to tylko sam wtyk db25 czy jest jeszcze np. USB żeby podpiąc 5V?

Kazik
-
Posty: 17
Rejestracja: 24 sie 2007, 9:52
Lokalizacja: Krosno

Post autor: Kazik » 24 sie 2007, 15:39

Do programatora jest kabel programujący 10 żyłowy. Już chyba wiem o co chodzi.
Dzieki:)

[ Dodano: 2007-08-25, 17:04 ]
Witam :smile: Mam problem. Gdy podłącze programator ZL2PRG do kompa , to komp nie chce mi go czytać. Wyskakuje błąd. Proszę o pomoc.

Z góry dziękuje! :smile:

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 26 sie 2007, 14:29

Z kablem programującym zawsze jest problem, ja radzę zrobić programator STK200 lub STK300, jeszcze nigdy nie wystąpił mi błąd przy przesyłaniu danych do mikroprocesora przez niego. Natomiast z kablem również miałem problem, co chwila wyskakiwały błędy, itd.

Schemat programatora STK200/STK300 jest w załączniku.
Załączniki
programator_schemat.jpg
Schemat programatora STK200/STK300

ODPOWIEDZ