Płytki rozwojowe do mikrokontrolerów




Płytki stykowe to bardzo dobry i wygodny wynalazek, służący do szybkiego budowania prototypów bez użycia lutownicy i wielokrotnego montowania elementów bez ich niszczenia. W praktyce często stosuje się typowe układy jak wyświetlacz multipleksowany czy klawiatura matrycowa, które wprawdzie nie są skomplikowane, ale ich zmontowanie na płytce jest czasochłonne. Ponadto, takie układy występują bardzo często. Dlaczego by nie zrobić osobnych płytek na których na stałe będą klawisze i wyświetlacze?
Spis treści:
Pliki do pobrania:
Tak było wcześniej. Zmontowanie zajęło ponad godzinę. A tak jest teraz. To dokładnie ten sam układ co wyżej, ale zmontowany w... kilka minut.
Elementy elektroniczne, zestawy prototypowe, Arduino

Wyświetlacz LED trójkolowy

Zawiera diody zielone i czerwone, a przy jednoczesnym świeceniu dają światło żółte. Są one w obudowie pojedynczej ze wspólną anodą. Zwykły, jednokolorowy wyświetlacz posiada dwie anody (pin 3 i 8). W tym wynalazku jest anoda diod zielonych i druga anoda diod czerwonych. Zastosowałem połączenie multipleksowe, co daje nam osiem wyprowadzeń segmentów i osiem wyprowadzeń anod - w sam raz do mikrokontrolera ośmiobitowego :)
Mikrokontrolery XMEGA

Ze względu na nietypowe wyświetlacze, schemat również jest trochę nietypowy. Doświadczonemu elektronikowi rzucą się w oczy nietypowe wartości rezystorów - wszystko dlatego, aby diody zielone i czerwone równocześnie świeciły tak samo jasno. Poza tym, chciałem oszczędzić rezystorów na segmenty i dlatego ich tam nie ma. Wyświetlacz jest z założenia przystosowany do połączenia multipleksowego, aczkolwiek można go także używać bez multipleksowania - należy wtedy wybrać jedną anodę lub ewentualnie dwie anody tego samego wyświetlacza, aby świecił na żółto. Przy multipleksowaniu świeci trochę słabiej niż bez. Segmenty są zapalane zerami, cyfry też są zapalane zerami. Wyświetlacze tego typu można kupić w sklepie AVT za 2zł sztuka. Można również stosować wyświetlacze jednokolorowe, byle ze wspólną anodą.

Klawiatura matrycowa 4x4

Połączenie matrycowe pozwala dołączyć aż 16 klawiszy do 8-bitowego portu mikrokontrolera. Zasada odczytu jest bardzo prosta - kolumny podłączamy do pinów 0123 i w rejestrze DDR ustawiamy je jako wyjścia (=1) o stanie początkowym 0, a wiersze łączymy z pinami 4567, które ustawiamy na wejścia (=0) z podciągnięciem do zasilania. W pierwszej fazie skanowania, przypisujemy pierwszej kolumnie wartość 0 i sprawdzamy czy w rejestrze PIN kolejnych wierszy przypadkiem nie pojawiło się 0, co oznacza wciśnięcie klawisza. Później 0 ustawiane jest na kolejnej kolumnie i skanowanie wierszy przebiega tak samo. Procedura jest bardzo prosta. Przykładowy kod programu, chyba najprostszy z możliwych, bez żadnych pętli i przesunięć, zamieszczam poniżej. Funkcja read_keypad zwraca wartość typu unsigned char, czyli po prostu klawisz. Niekoniecznie musi to być wartość 1-16. Równie dobrze można wpisać 'a' 'b' 'c' pamiętając o 'apostrofach'. Jeżeli funkcja nie stwierdzi wciśnięcia żadnego klawisza, zwróci wartość zero. Jeszcze słowo na temat co to jest asm volatile("nop") - bez tego funkcja nie działa, ponieważ ustawiamy rejestr PORT i od razu odczytujemy rejestr PIN. Dzieje się to za szybko. PIN nie zdąży odczytać zera ustawionego w kolumnie i dlatego funkcja nie zauważy wciśnięcia przycisku. Komenda nop każe procesorowi odczekać jeden cykl zegarowy, aby w rejestrze PIN znalazła się "aktualne zero" kolumny, która ma być przeskanowana.

void init(void) {            // 1 wyjscie, 0 wejscie

    DDRB = 0b00001111;        // klawiatura matrycowa
    PORTB = 0b11110000;
}

unsigned char read_keypad(void) {
    
    // kolumny - piny 0123
    // wiersze - piny 4567
    
    PORTB = 0b11111110;                    // 1 wiersz
    asm volatile("nop");
    if(!(PINB & _BV(4))) return 1;            // 1 kolumna
    if(!(PINB & _BV(5))) return 2;            // 2 kolumna
    if(!(PINB & _BV(6))) return 3;            // 3 kolumna
    if(!(PINB & _BV(7))) return 4;            // 4 kolumna
    PORTB = 0b11111101;                    // 2 wiersz
    asm volatile("nop");
    if(!(PINB & _BV(4))) return 5;
    if(!(PINB & _BV(5))) return 6;
    if(!(PINB & _BV(6))) return 7;
    if(!(PINB & _BV(7))) return 8;
    PORTB = 0b11111011;                    // 3 wiersz
    asm volatile("nop");
    if(!(PINB & _BV(4))) return 9;
    if(!(PINB & _BV(5))) return 10;
    if(!(PINB & _BV(6))) return 11;
    if(!(PINB & _BV(7))) return 12;   
    PORTB = 0b11110111;                    // 4 wiersz
    asm volatile("nop");
    if(!(PINB & _BV(4))) return 13;
    if(!(PINB & _BV(5))) return 14;
    if(!(PINB & _BV(6))) return 15;
    if(!(PINB & _BV(7))) return 16;
    return 0;
}

Klawisze

Tutaj nie ma nic do gadania :) Zwykłe, zwyczajne klawisze. Nie mają wbudowanych rezystorów podciągających, więc należy pamiętać o wpisaniu jedynek do rejestru PORT. Linię wspólną należy podłączyć do masy. Do sprawdzenia czy przycisk na linii PB0 został wciśnięty, stosuje się jedno z poniższych poleceń:

if(bit_is_clear(PINB,0)) {...}
if(!(PINB & 0b00000001)) {...}
if(!(PINB & _BV(0))) {...}

 

DIPswitch

Dokładnie to samo co klawisze powyżej, ale nie trzeba ich cały czas wciskać, a jedynie przesunąć suwak. Bardzo wygodne jeżeli nie trzeba tego robić zbyt często ;) Polecam DIPswitch umieścić w podstawce DIL16, ponieważ przełączniki po pewnym czasie odmawiają posłuszeństwa i łatwiej je wtedy wymienić.

Linijka LED (LEDBAR)

LEDBAR jest bardzo fajnym elementem. Zamiast podłączać 10 diod osobno, mamy już wszystko w formie scalonej. Jeszcze by tego brakowało aby i rezystory scalić do środka :) W zależności od tego, którą stroną włożymy LEDBAR w podstawkę, uzyskujemy linijkę ze wspólną anodą połączoną z zasilaniem (zapalanie zerami) lub ze wspólną katodą połączoną z masą (zapalanie jedynkami). Rezystory 220R zostały dobrane dla diod żółtych. Dla innych kolorów należy je dobrać w sposób właściwy ;)

Kabelki i taśmy

Przykładowy wyświetlacz ma 8 segmentów i 8 anod, co daje 16 połączeń. Celem tego wszystkiego jest maksymalne zaoszczędzenie czasu przy zachowaniu dużej elastyczności. Dobrym pomysłem było kupienie metra taśmy 10-żyłowej i wykonanie z niej kabelków oraz taśm 4-żyłowych. Wykonałem je bardzo szykbo przylutowując kabelki do niepociętego rzędu goldpinów. Całość zalałem klejem kropleką, aby piny się nie wysuwały. Z drugiej strony przylutowałem drugi rząd goldpinów i również je przykleiłem. Tak powstało coś w rodzaju 40-żyłowej taśmy, którą następnie pociąłem na pojedyncze kabelki. Aby wszystko było eleganckie, nałożyłem koszulki termokurczliwe (termokurczak).

Konwerter USB - RS232


Strona przeniesiona na nowy adres:
extronic.pl


Sterownik efektów świetlnych LISTER 5

|



Mój pierwszy układ mikroprocesorowy, który robi coś fajnego. Wcześniej na mikrokontrolerze robiłem lampkę RGB w butelce. Wadą tej lampki było to, że procesor siedział w środku i po zamknięciu butelki nie mogę zmienić programu. Wprawdzie z butelki wystają tylko dwa kabelki zasilające (Vcc, GND), a w przypadku zewnętrznego sterownika będą cztery (Vcc, R, G, B) to jego zastosowanie przynosi same zalety.

Nazwa sterownika wzięła się od niewielkiej liczby dostępnych wejść/wyjść w ilości 5 sztuk, a LISTER to Leon Instruments Sterownik. W końcu motto strony to "elektronika dla zawodowców" więc niech będą chociaż pozory jakiejś nazwy handlowej :) a teraz przejdźmy do konkretów...

W układzie siedzi malutki procesorek ATtiny25 taktowany wewnętrznym rezonatorem RC o częstotliwości 8MHz. Każdy z pięciu pinów posiada tranzystor wzmacniający wydajność prądową wyjścia (w widocznym prototypie 100mA), ale każdy z nich może być jednocześnie wejściem. Stan wyjścia jest sygnalizowany żółtą diodą. Nic nie stoi na przeszkodzie, by zmienić rolę pinu w trakcie programu. Napisałem próbny mały programik polegający na łapaniu migającej diody, tzn na naciśnięciu przycisku pod mrugającą diodą i wtedy zaczyna mrugać kolejna. Działa jak złoto.

Elementy elektroniczne, zestawy prototypowe, Arduino

Mikrokontrolery XMEGA

W sterowniku można zastosować inny procesor AVR a obudowie DIL8. Może to być ATtiny13, ATtiny45, ATtiny85 lub inny maluszek.


W założeniu układ jest przeznaczony do sterowania diodami RGB ze wspólną anodą, ale nie tylko. W planach zamierzam zrobić kolejną lampkę RGB w bardzo zmysłowej butelce ;) Schematów i płytek nie zamieszczam, bo to ciągle wersja robocza, a teraz sesja na uczelni i czasu nie mam na dokończenie tego cuda.


Na malutkiej płyteczce o rozmiarach 3x4cm mieszczą się 32 elementy i 100 pól lutowniczych. Narysowanie tej płytki było sztuką. Miejsca zostało tak mało, że nawet loga i numeru wersji nie było gdzie wstawić.


Obudowa wyszła trochę kiepskawo, no ale trudno.


Przykładowy efekt



Miernik panelowy ICL7106

|

Strona przeniesiona na nowy adres:
extronic.pl