Krzysztof Wesołowski Programowanie, elektronika, automatyka – doświadczenia i projekty

4lis/09

Assembler 8051 – materiały do nauki, pierwsze sprawozdanie.

W ramach przedmiotu Technika Mikroprocesorowa (czy coś podobnego:)) na zajęciach zaczęliśmy zabawę z uC opartym o rdzeń '51, produkowany przez firmę Atmel. Ze względu na małą ilość spójnych informacji na temat programowania i działania tego uC którą udało się znaleźć postanowiłem zebrać i opublikować informację umożliwiające "rozpoczęcie przygody" :).

Po pierwsze jako źródło informacji na temat samego rdzenia poza książkami (np. dobrą pozycją pana Rydzewskiego) polecam:
Atmel 8051 Microcontrollers Hardware Manual (oryginalny plik na serwerze Atmela)
Atmel 8051 Microcontrollers Hardware Manual (lokalna kopia na tej stronie)

Zaś więcej szczegółów na temat konkretnych mikrokontrolerów można znaleźć w Datasheetach producentów. Dla dostępnych w budynku b1, s. 315 płytek deweloperskich sa to układy AT89S51 Atmela:
AT89S51 Datasheet (oryginalny plik na serwerze Atmela)
AT89S51 Datasheet (lokalna kopia na tej stronie)

Poniżej zamieszczam link do sprawozdania z  drugiego ćwiczenia (pierwsze polegało na mruganiu diodą w pętli głównej, niestety nie byłem na nim obecny). Zawiera ono pierwszy program, przygotowany koncepcyjnie/na symulatorze przeze mnie i Kubę Tutro (ale napisany na zajęciach), oraz drugi napisany już na zajęciach prezentujący działanie PWM w celu regulacji jasności świecenia diod. Oba programy pisałem na zajęciach wspólnie z Pawłem Górką, on również uzupełnił komentarze i przygotował sprawozdanie w formacie PDF.

Sprawozdanie z laboratorium 8051. Paweł Górka, Krzysztof Wesołowski

7paź/09

Program prezentujący działanie algorytmów działających na grafach

Przy okazji podnoszenia jednej oceny powstał prosty program prezentujący 3 algorytmy operujące na grafach. Pozwala on wprowadzić dowolny graf, o rożnych wagach a następnie prezentuje jego rozwiązanie krok po kroku.

Program powstawał  przy mniejszej lub większe niechęci przez wakacje. Pierwsza część programu to edycja i implementacja struktur grafowych.  Klasy tam zaimplementowane pozwalają zaprojektować graf, zapisać go/wczytać i uruchomić fragment prezentujący dany algorytm. Drugą częścią jest abstrakcyjna klasa AbstractSolver, ułatwiająca pisanie klas rozwiązujących o spójnym wyglądzie i funkcjonalności. Właśnie te 3 przykładowe algorytmy stanowią drugą cześć, stworzoną już nie przeze mnie ale przez Jakuba Tutro i Pawła Górkę.

6paź/09

Relacje 1:1 w Propel – unikanie błędu z primaryKey

Przeglądając trochę internetu w poszukiwaniu informacji jak zdefiniować relacje 1:1 za pomocą plików scheme.yml natrafiłem na wiele sugestii, mówiących aby nie tylko pole id, ale i drugie pole (będą właśnie w relacji 1:1 z polem id w innej tabeli) oznaczyć jako primary key. W prostej linii doprowadziło to do niezrozumiałego błędu:

Warning: Illegal offset type in symfony\plugins\sfPropelPlugin\lib\widget\sfWidgetFormPropelChoice.class.php on line 103

Rozwiązaniem generującym odpowiednie metody, zgodnym z informacją znalezioną np tutaj, było zrezygnowanie z primaryKey, i użycie klucza unikalnego.

9wrz/09

Obsługa interfejsu I2C/TWI w mikrokontrolerach AVR na przykładzie DS1338

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

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.

  1. http://pl.wikipedia.org/wiki/I2C[]
  2. http://en.wikipedia.org/wiki/I2C[]
Tagged as: , , , , Czytaj dalej
17sie/09

Usuwanie nieużywanych funkcji z programu

W trakcie tworzenia biblioteki do obsługi wyświetlacza 7 segmentowego (7 segmentów+kropka) doszedłem do wniosku,  że  najbardziej eleganckie rozwiązanie to stworzenie osobnego pliku C dla tej biblioteki, wraz z nagłówkami z prototypami funkcji jak i z konfiguracją. Niestety napisanie kilku funkcji ustawiających liczbę na wyświetlaczu spowodowało znaczny rozrost programu - nieużywane funkcje, często bardzo obszerne, trafiły do pliku *.o a następnie do wygenerowanego HEXa zajmując miejsce, pomimo iż nie wszystkie były używane.

Po przetrząśnięciu kawałka internetu znalazłem rozwiązanie, którego efekty są naprawdę znaczące (usunięcie zbędnych funkcji potrafi zaoszczędzić dużo miejsca gdy korzystamy z bibliotek zawierających funkcje na każdą okazję), i w związku z tym warte powtórzenia w wielu innych programach - pozwoli to uniknąć ręcznego usuwania nieużywanego kodu z "biblioteki".

5sie/09

Prosta aplikacja układu FT232R firmy FTDI

Po co taki układ?

Kiedy próbujemy stworzyć oprogramowanie na uC stajemy często przed problemem wymiany danych z naszym komputerem PC.  Sposobów na połączenie własnego układu z komputerem PC jest przynajmniej kilka:

  • Port LPT
    Możliwość niezależnego manipulowania bitami sprawia że to jedno z najprostszych rozwiązań. Poza zwykłym równoległym przekazywaniem informacji można również emulować interfejsy szeregowe. Obecnie laptopy bardzo rzadko posiadają taki interfejs, a nawet jeśli, są to często modele droższe od powszechnie spotykanych.
  • Port COM
  • Powszechny interfejs szeregowy. Poza podstawowymi liniami służącymi do transmisji i odbioru danych zawiera też linie sterujące przepływem danych. Pod względem sposobu transmisji do komunikacji wystarczy połączenie naprzemiennie sygnałów Tx<->Rx portu COM i mikrokontrolera. Niestety, w warstwie fizycznej całkiem inne poziomy napięć nie pozwalają na takie połączenie. Powstało wiele układów służących do konwersji napięć między poziomem uC a portu COM. Często więc na płytce montowało/montuje się po prostu MAX232 do konwersji napięć podpięty pod odpowiednie nóżki mikroprocesora, i łączony z portem COM komputera. Stety/niestety porty COM też należą już do laptopowej rzadkości. Rozwiązanie polegające na używaniu przejściówek USB<->COM wraz z takimi układami jest często spotykane, pomimo wiążącego się z tym narzutu - dwukrotna konwersja napięć nie ma sensu.
Tagged as: , , , Czytaj dalej