Wpis z mikrobloga

Drogie Mirki spod tagu #elektronika i #programowanie (i jeszcze #mikrokontrolery :)) !
Jak zacząć programować "na poważnie" mikrokontrolery AVR? Chodzi mi o język C, pisanie rejestrami i tego typu rzeczy. Chcę osiągnąć poziom gdzie będę w stanie pisać kod bez wykorzystywania bibliotek. Idę w dobrym kierunku? Czy może nie warto się tego uczyć i jechać na bibliotekach, tak jak teraz to robię? Piszę programy na atmegi bezproblemowo za pomocą Arduino IDE, nawet zdarzy mi się popełnić czasem jakiś bardziej ambitny projekt. Mimo wszystko to nie jest czysty C, rejestrów moje kody na oczy nie widziały nawet, a jak tak sobie czytałem wypowiedzi bardziej doświadczonych w tym kierunku to podobno zabawa w Arduino IDE z wykorzystaniem bibliotek i nie pisanie na rejestrach to nie jest true programowanie ( ͡° ʖ̯ ͡°)
Co o tym sądzicie? Co polecacie? Generalnie w programowaniu siedzę z 2, może 3 lata, ale programowanie mikrokontrolerów AVR to jednak inna para kaloszy i jest trochę trudniej, bo nie wiem gdzie szukać wartościowych materiałów, które pozwolą mi na "fresh start" (nawet nie wiem do końca pod jakimi hasłami powinienem szukać).
Myślę nad zakupem książki "Mikrokontrolery AVR Język C Podstawy programowania" wyd. Atnel. Podobno zawiera dobry materiał przedstawiony w przystępny sposób. Co sądzicie?
Mogę liczyć na waszą pomoc?
  • 36
@tamian: bo ja wiem czy nie prawdziwe... Robię całkiem złożone projekty używając bibliotek arduino i jest całkiem ok. Czystego avra uczyłem się przy okazji, jak czegoś nie było w arduino. Generalnie pisanie bez bibliotek uważam za przeżytek
@Kireino: Skąd wnioskujesz (nie myląc się przy tym :D) że lubię wyzwania? :D Mój musk podpowiada mi, że za "ASM" stoi Assembler, a idąc dalej tym tokiem myślenia, widzę, że to prawdziwa mordęga by była :>
@zaqwsxdsa: Ja też robię z pomyślnością złożone projekty na tych bibliotekach, ale czytając wypowiedzi kilku użytkowników z elitarnego (xd) forum elektroda.pl wywnioskowałem, że pisanie w czystym C bądź za pomocą rejestrów to ogromna oszczędność pamięci wewnętrznej (która w moim przypadku przeważnie wynosi 32kB). Prawda to?
@tamian: w tych bibliotekach nie ma żadnej magii, kody są dostępne publicznie i wszystko widać co się dzieje. Jeśli masz nieco ogólnego pojęcia o pisaniu wydajnego kodu w c/cpp, to nie, nieprawda że oszczędności są ogromne :)
@xerxes931: no to do rzeczy time sensitive używasz PORTx, a do (zdecydowanej większości) rzeczy używasz wygodnych funkcji. Nie mówiąc o tym, że przepisanie sobie digitalWrite na funkcję inline prawie bez narzutu to jest 3min roboty
@tamian: jeśli lubisz konkrety to nie bierz tej książki, tylko http://helion.pl/ksiazki/jezyk-c-dla-mikrokontrolerow-avr-od-podstaw-do-zaawansowanych-aplikacji-tomasz-francuz,jcmikr.htm Kardaś niestety bardzo leje wodę i długość książki można by zmniejszyć o 50% bez utraty informacji (taka kompresja ( ͡° ͜ʖ ͡°) ). Francuz - same konkrety, choć czasami ciężko na początku zrozumieć jego kod. Ale skoro nie jesteś zupełnie początkującym, to sobie bez problemu poradzisz.(Mam obie, więc opinia nie jest wzięta z internetu)

Co do
@xerxes931: można to wywnioskować po samym rzucie oka na stockowe digitalWrite. To, że jest nieco wolniejsze to nie jest żaden argument, tym bardziej, że te biblioteki pozwalają zrobić w 2 liniach kodu rzeczy, które normalnie zajmują godzinę kodowania. To bardzo duży win
@nicniezgrublem: Przyznam szczerze, że w drugim akapicie rozbudziłeś mój zapał do rozpoczęcia nauki korzystania z not katalogowych :D (teraz jeszcze trzeba wykombinować skąd się tego nauczyć ...). No i ten Assembler... Trudny on? I czy ma on rację bytu przy pisaniu np. programów do obsługi wyświetlacza LCD czy innych peryferiów?

Planuję przygodę z AVR'ami jako początek, później mam zamiar wkraczać w coraz bardziej złożone procki, kontrolery. Czy ucząc się ANSI C
@trochejanusz: Miałem dylemat nad rozpoczęciem przygody z STM32. Z internetów wywnioskowałem, że to wyższy level niż AVR, więc myślę, że przydałoby się wpierw ogarnąć podstawy, a nie rzucać się na głęboką wodę. A na razie do moich projektów wystarcza AVR. Nawet atmega2560 czy którakolwiek xmega to już wystarczająco ;)
@tamian: Dokumentacja do danego procka i tyle jak dla mnie. Mam książkę do tego na którym teraz robię i to właściwie jest tłumaczenie datasheetów na język polski. Od siebie mogę powiedzieć, że Texas Instruments oprócz fajnego kompilatora daje program controlSUITE z wygodnym dostępem do dokumentacji wybranego procka i przykłady aplikacji.
A może spróbuj z #stm32?
@tamian: to C jest uniwersalnym językiem, w którym można wszystko zaprogramować. Procesory mają różne assemblery, więc uczenie się któregokolwiek na pamięć nie jest najlepszym wyjściem. Chodzi o samą zasadę "z czym to się je". Warto znać podstawy i umieć sobie poradzić z nowym procesorem. Oczywiście pisanie programów w assemblerze to katorga, więc to odradzam. Ale jakieś podstawowe rzeczy typu miganie diodami, używanie przycisków warto sobie poćwiczyć.

Jeśli chodzi o noty katalogowe,
@tamian: Generalnie to wiele nie trzeba żeby zacząć - chęć i cel.

Najpierw świecisz diodą, potem multipleksujesz, potem PWM, ADC, a końcu komunikacja. No i tutaj mamy małe schody :) Najpierw proponuję samemu spróbować napisać (w oparciu o tutoriale) komunikację po 1-wire, UART, SPI, I2C.

W późniejszych etapach jak już wiesz co jest 5, i co oznaca ACK w I2C, to możesz korzystać z gotowców.
Jak już dobrze ogarniesz AVR, to