Krzysztof Wesołowski » AVR http://kwesoly.net Programowanie, elektronika, automatyka - doświadczenia i projekty Wed, 07 Sep 2011 14:03:29 +0000 pl-PL hourly 1 Obsługa interfejsu I2C/TWI w mikrokontrolerach AVR na przykładzie DS1338 http://kwesoly.net/programowanie/avr/obsluga-twi-i2c-ds1338-avr/ http://kwesoly.net/programowanie/avr/obsluga-twi-i2c-ds1338-avr/#comments Wed, 09 Sep 2009 18:44:00 +0000 http://kwesoly.net/?p=385 Interfejs TWI/I2C

To dwa określenia dotyczące tej samej magistrali. Jej twórcą była firma PHILIPS, która do teraz jest właścicielem znaku handlowego I2C. Dlatego też inne implementacje tego standardu są często określane w inny sposób - np.  Atmel nazywa ten interfejs TWI. Na połączenie składają się dwie linie, zegarowa (oznaczana najczęściej SCK/SCL) i danych (oznaczana SDA), łącząca wszystkie urządzenia na danej magistrali. Więcej o samym sposobie działania i podłączania można przeczytać w internecie.

Obsługa interfejsu I2C w mikrokontrolerach AVR

Zakładam, że korzystamy z mikrokontrolera posiadającego sprzętowe wsparcie dla tego interfejsu. Pozwala nam to obsługiwać ten interfejs na poziomie bajtów, z prędkościami nieosiągalnymi przy emulacji za pomocą zmian stanów portów (bitbang). Przykład, który tutaj zamieszczam został sprawdzony na uC ATmega8, jednak powinien być w pełni przenośny na każdy mikrokontroler AVR ze sprzętowym wsparciem I2C.

Program obsługuje zegar czasu rzeczywistego Maxim/Dallas,DS1338. Ze względu na stosunkowo rzadkie odczyty zrezygnowałem z trudniejszej obsługi za pomocą przerwań - odczyty i zapisy blokują pracę mikrokontrolera. Obsługę podzielono na dwa fragmenty:

  • twi_basics.c, twi_basics.h, zawierające funkcje odnoszące się bezpośrednio do rejestrów kontrolnych (TWCR) i danych (TWDR) oraz oczekujące na ukończenie operacji.
  • ds1338.c,ds1338.h, zawierające funkcje do bezpośredniej obsługi podłączonego zegara, odczyt/zapis czasu, wykorzystanie pozostałych 56bajtów NVRAM.

Cała obsługa sprawdza wartości zwracane przez magistralę i informuje o wyniku operacji za pomocą kodów błędu zdefiniowanych w plikach nagłówkowych. Ułatwia to znajdowanie ewentualnych problemów,  nie eliminuje niestety wszystkich możliwych problemów.

Obsługę innych urządzeń można łatwo skonstruować korzystając z funkcji zawartych w twi_basics, dodając tylko interfejs do danego układu. Dla wielu urządzeń istniejąca biblioteka ds1338 będzie wymagała tylko niewielkich zmian, gdyż filozofia dostępu do danych jest identyczna.

Do samych plików dołączam przykład ilustrujący działaniem wystarczający do zrozumienia jej wykorzystania. Zachęcam do samodzielnego studiowania źródeł, zarówno tych jak i innych spotykanych w internecie, w celu lepszego zrozumienia problemu.

Załącznik:

Biblioteka DS1338, oparta o TWI

]]>
http://kwesoly.net/programowanie/avr/obsluga-twi-i2c-ds1338-avr/feed/ 0
Eclipse + WinAVR + AVRStudio Debuger http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/ http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/#comments Sun, 22 Feb 2009 19:11:02 +0000 http://kwesoly.net/?p=313 Jako, że postanowiłem spróbować programowania w znanym mi języku, ale na całkiem innej platformie - procesorach  AVR, postaram się opisać niektóre fragmenty moich doświadczeń. Dziś jedno z pierwszych - konfiguracja tytułowego zestawu. Używanie takiej konfiguracji upraszcza pracę, pozwalając przerzucić odpowiedzialność za plik makefile na środowisko programistyczne, co jest z reguły wygodniejsze i efektywniejsze niż ręczna edycja. Poza tym korzystamy  z wygodnego edytora, ze znanymi już funkcjami, skrótami klawiszowymi etc.

Instalacja WinAVR

Pierwszą częścią zestawu, niezbędną w pracy będzie kompilator WinAVR, dostępny pod adresem http://winavr.sourceforge.net/. Nie będę się rozpisywał na jego temat, gdyż przekracza to zakres tego wpisu, w dodatku jest bardzo szeroko opisane w internecie. Sama strona pobierania WinAVR na SourceForge.net znajduje się tutaj.

W trakcie instalacji najlepiej nie zmieniać domyślnej ścieżki, i pozwolić na dopisanie jej do zmiennej systemowej PATH, zwłaszcza jeżeli nie używamy innych kompilatorów korzystających z make (jeśli używamy, warto skorzystać np. ze skryptu wsadowego do odpalania środowisk tak, aby zmienną PATH modyfikować dynamicznie, i zawsze odpalać właściwy make, gdyż często różne wersje dołączane do aplikacji nie są ze sobą kompatybilne). Jeśli zamierzamy używać Eclipse, warto odznaczyć również instalacje Programmers Notepada.

Po instalacji warto uruchomić ponownie komputer tak, aby dopiski do zmiennej PATH zaczęły działać.

Instalacja i konfiguracja Eclipse

Podstawowym  środowiskiem edycyjnym będzie Eclipse, wraz z narzędziami do programowania w języku C/C++ rozprowadzany jako Eclipse CDT. Jego instalacja jest prosta, opisałem ją zresztą jakiś czas temu tutaj.

Po zainstalowaniu Eclipse, będziemy potrzebowali jeszcze dodatkowej wtyczki, która ułatwia tworzenie projektów, zarządzanie nimi, pisanie kodu jak i jego kompilacje.

Wtyczka ta jest dostępna pod adresem http://avr-eclipse.sourceforge.net, konkretnie na stronie pobierania. Najprostsza droga instalacji to skorzystanie z menedżera pakietów dostępnego w Eclipse, ją tez krótko opiszę.

  1. Uruchamiamy Eclipse, ewentualnie tworzymy już nowy Workspace na projekty AVR.
  2. Wybieramy z menu Help->Software Updates.
  3. W zakładce Available Software wybieramy Add Site...
  4. Wpisujemy/wklejamy adres znaleziony na stronie pobierania, w moim wypadku to http://avr-eclipse.sourceforge.net/updatesite/.
  5. Na liście, która prawdopodobnie automatycznie się rozwinie, zaznaczamy oba pola, czyli w praktyce całą stronę wklejoną wcześniej.
  6. Klikamy Install, i po przejściu przez prostą procedurę instalacji w stylu Next, Accept, Next i zamknięciu okienka Software Updates nastąpi instalacja zakończona propozycją ponownego uruchomienia środowiska Eclipse.

Po zakończeniu powyższych czynności dysponujemy już zarówno kompilatorem, jak i środowiskiem edycyjnym.

Instalacja AVRStudio

Pomimo wielu prób stworzenia symulatora z możliwością debugowania programów napisanych na mikrokontrolery, wciąż najlepszym rozwiązaniem (ze znanych mi w tej chwili) pozostaje oryginalny debugger zintegrowany z AVRStudio, pozwalający na symulację i debugowanie programów na uC AVR.

Pobierania AVR Studio należy rozpocząć tutaj: http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725. Niestety, sam doświadczyłem niekompatybilności najnowszej wersji (4.15 przy poprzedniej instalacji), z moim system Windows XP sp3 PL, dlatego w razie problemów należy spróbować użyć innej wersji (4.14 zadziałała wtedy, 4.16 też już działa).

Samo pobieranie wymaga wyjątkowo denerwującej rejestracji- Atmel nie tworzy nam konta, tylko pyta o te same dane przy każdym pobieraniu. Dlatego nie warto skrupulatnie wypełniać rubryczek, zwłaszcza, że zawierają szczegółowe dane o naszej osobie.

Instalacja przebiega bezproblemowo, AVR Studio gotowy do pracy.

Pierwszy projekt w Eclipse

Utworzę teraz nowy projekt, oraz podpowiem jak go skonfigurować, aby możliwa była współpraca z ww debugerem. W tym celu uruchamiamy Eclipse, i wykonujemy nastepujące kroki:

  1. Z menu File->New wybieramy "C Project".
  2. Uzupełniamy jego nazwę, i w Project Type wybieramy "AVR Cross Target Application".
  3. Przechodzimy dalej (Automatycznie zaznaczył nam się jedyny dostępny Toolchain).
  4. Na następnej stronie pozostawiamy zaznaczone obie konfiguracje, wchodzimy w Advanced Settings.
  5. W zakładce AVR ustawiamy typ docelowego procesora, jego częstotliwość oraz ewentualnie konfigurujemy programator (opiszę to przy następnej okazji).
  6. Wchodzimy w zakładkę "C/C++ build", w część Settings.
  7. Widzimy teraz listę ustawień kompilatora, linkera etc, w dodatku możemy modyfikować ją dla obu konfiguracji kompilatora, wybierając Debug/Release u góry okna.
  8. Aby debugować kod w AVR Studio potrzebujemy posiadać niezbędne informację w pliku elf, w tym celu w wyżej wymienionych ustawieniach, w sekcji Debugging, zarówno dla AVR Assembler jak i AVR Comiler ustawiamy Debug info format  na dwarf-2.
  9. Akceptujemy wszystkie ustawienia klikając OK i przechodzimy do następnego etapu.
  10. W następnym oknie ponownie wybieramy docelowy MCU oraz wpisujemy jego częstotliwość.

Utworzony projekt jest pusty, dlatego musimy jeszcze dodać przynajmniej jeden plik źródłowy, klikając na File, New, C Source File i wypełniając go treścią. Ja wykorzystałem listing pochodzący z kursu programowania mikroprocesorów w C z czasopisma "Elektronika dla wszystkich":

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

int main(void)
{
	DDRD=0x7c;
	for(;;)
	{
		PORTD=0x7c;
		_delay_loop_2(0xffff)
		PORTD=0;
		_delay_loop_2(0xffff);
	}
	return 0;
}

Po zapisaniu pliku pozostaje zbudowanie pliku, za pomocą menu Project->Build.

W katalogu Debug, wewnątrz naszego projektu powstanie m.in. plik nazwaprojeku.elf, który można symulować wraz z podglądem źródeł w AVR Studio.

]]>
http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/feed/ 12