Każdy elektronik amator na pewno próbował kiedyś na własną rękę tworzyć płytki drukowane. Metoda termotransferu nie zawsze wychodzi, no i trzeba wiercić... Posiadając frezarkę CNC można bardzo prosto i szybko wytworzyć taką płytkę za pośrednictwem bardzo prostej wtyczki do programu Eagle. Wtyczka dostępna jest na ftp://ftp.cadsoft.de/eagle/userfiles/ulp/gcode_02.zip oraz na moim dysku google https://drive.google.com/file/d/0B-MlcGl3cPlodjhzT0xzcVFza1U/view?usp=sharing. Wtyczkę kopiujemy do folderu ULP znajdującym się w głównym katalogu programu Eagle. Gdy mamy gotową płytkę, wystarczy wybrać w Eagle z menu File -> Run ULP. Tam odnajdujemy wtyczkę gcode_02.ulp. Naszym oczom ukaże się coś takiego:
Interfejs tej wtyczki jest dziecinnie prosty i każdy powinien sobie z nim poradzić. Mamy tutaj 3 sekcje: frezowanie ścieżek (z opcją czyszczenia powierzchni), wiercenie, wycinanie płytki po konturze. Najlepiej jest wygenerować sobie 3 pliki osobno do każdej z tych czynności. Ja posiadając prostą frezarkę bez miernika wysokości narzędzia oraz bez automatycznej wymiany narzędzia właśnie tak robię. Wygenerowane pliki wrzucamy do maszyny i zaczyna się zabawa...
Wyfrezowana płytka wygląda po skończonej pracy bardzo ładnie, wszystko jest idealnie równe. Na filmiku można zobaczyć, że miałem tępego freza, niestety nie miałem pod ręką innego freza grawerskiego. Ale nawet tępym można wykonać precyzyjnie płytkę, wystarczy tylko ja później przejechać papierem ściernym. Wykonuję płytki tą techniką i jestem bardzo zadowolony. Warto zainteresować się tematem frezarek CNC. tych którzy chcą się wgłębić w temat zapraszam na forum - http://www.cnc.info.pl. Frezarkę do PCB można poskładać bardzo ale to bardzo tanio, konstrukcje zmontowane ze sklejki nadają się do tego idealnie. Poniżej filmiki z każdego etapu produkcji takiej płytki.
Zegar czasu rzeczywistego jest spotykany w praktycznie każdym urządzeniu. Dzięki zastosowaniu bateryjki, która podtrzymuje proces odmierzania czasu możemy go nastawić praktycznie raz na zawsze. Po odłączeniu urządzenia od zasilania i ponownym go włączeniu jesteśmy zawsze "na czasie". Układ DS1307 komunikuje się z mikroprocesorem po magistrali I2C. Do chipu wymagane jest podłączenie tak zwanego kwarcu zegarkowego o częstotliwości 32.768kHz. Niżej mały podgląd standardowej aplikacji tego układu:
Na rysunku widać na liniach SDA i SCL interfejsu I2C rezystory podciągające zwykle o wartości 4,7k. Warto zwrócić uwagę na bateryjkę, gdy będziemy ją wsadzać w gniazdo, żeby nie pomylić polaryzacji, chociaż przyznam się szczerze, że kiedyś fazie testów podłączyłem ją odwrotnie, układ wydaje się być na to odporny.
Na długie lata wystarczy bateryjka taka jaka można spotkać na płytach
głównych komputerów PC, czyli CR2032 o napięciu 3V. Tutaj pełny
datasheet układu DS1307: http://datasheets.maximintegrated.com/en/ds/DS1307.pdf. Odnajdziemy w nim informacje w jaki sposób się z nim komunikować. Dowiemy się tam, że tryb write następuje po wybraniu adresu 11010000 a tryb read po wybraniu 11010001 co daje odpowiednio liczby 208 i 209. Później już po kolei możemy wpisywać lub odczytywać dane z zegara takie jak sekundy, minuty, godziny, dni, dni tygodnia, miesiące, lata itd. Możemy ustawic czas 12 lub 24-godzinny. Domyślnie jest to 24h. Układ sam koryguje lata przestępne więc nie musimy się niczym przejmować po tym jak ustawimy raz na początku godzinę i datę. Skoro bateria będzie trzymać kilka lat proponuję, aby najpierw wrzucić program który ustawia datę, a później program tylko do odczytu danych z DS1307. Tak więc ustawmy zegar !
Teraz gdy zegar mamy już ustawiony wczytujemy program do odczytu i wyświetlania godziny, daty i dnia tygodnia. Użyłem wyświetlacza z poprzedniego wpisu na blogu, czyli VFD sterowany poprzez UART. Poniżej kod programu:
Dim Sekundy As Byte Dim Minuty As Byte Dim Godziny As Byte Dim Dzien As Byte Dim Dzientyg As Byte Dim Miesiac As Byte Dim Rok As Byte
Dim Ssekundy As String * 2 Dim Sminuty As String * 2 Dim Sgodziny As String * 2 Dim Sdzien As String * 3 Dim Sdzientyg As String * 2 Dim Smiesiac As String * 2 Dim Srok As String * 2
If Dzien = 1 Then Sdzien = "Pon" If Dzien = 2 Then Sdzien = "Wto" If Dzien = 3 Then Sdzien = "Sro" If Dzien = 4 Then Sdzien = "Czw" If Dzien = 5 Then Sdzien = "Pia" If Dzien = 6 Then Sdzien = "Sob" If Dzien = 7 Then Sdzien = "Nie"
Teraz można się cieszyć funkcjonalnym zegarem. W kodzie programu użyłem kilka razy funkcji STR oraz FORMAT aby wygodniej wyświetlać informacje na wyświetlaczu, chodzi o to żeby liczby jak i nazwy dni miały stałą liczbe znaków, przykładowo zamiast 1.4.2014 będzie wyświetlać się zawsze 01.04.2014. Warto także wspomnieć, że funkcja PRINT bez znaku średnika na końcu zawsze wysyła na końcu znak CR (carriage return) co w niektórych przypadkach jest wręcz złośliwe, zwłaszcza, gdy chcemy wyświetlić znak na 20 (ostatnim) miejscu linii wyświetlacza. Efekt można podziwiać poniżej:
Witam w moim pierwszym wpisie na blogu. Dziś zajmiemy się wyświetlaczami ze sklepowych kas fiskalnych. Wyświetlacze VFD zawsze budziły dreszczyk emocji wśród elektroników hobbystów, a już na pewno takich którzy mieli okazje programować mikrokontrolery. Wszyscy dobrze wiedzą też, że takie wyświetlacze oparte chociażby o popularny sterownik HD44780 nie są tanie. I tutaj dochodzimy do sedna. Nie dość że można tanio kupić wyświetlacz VFD z kasy fiskalnej to zazwyczaj jest on bardzo duży i ma standardowo 2x20 znaków. Świetnie ! Musimy też wiedzieć, że do takich wyświetlaczy zazwyczaj wykorzystuje się interfejs RS232, większość mikroprocesorów także posiada sprzętowy UART. Wszystko fajnie, tylko jak to podłączyć? Bez żadnej ingerencji w taki wyświetlacz potrzebowalibyśmy konwertera napięć TTL/RS232. Tylko, że to bez sensu. Po co konwertować napięcia TTL z mikroprocesora na RS232 skoro w wyświetlaczu jest kolejny konwerter tylko, że w drugą stronę? Logicznym wyjściem z sytuacji jest ominięcie konwertera napięć w wyświetlaczu. Ja zrobiłem to w ten sposób i działa znakomicie. Zwykle jest tak, że nie wiemy, jaki wyświetlacz nam się trafi, ale łączy je wspólna cecha czyli sposób wysyłania do nich informacji. Dzięki temu możemy dostosować do swoich mikroprocesorowych potrzeb każdy wyświetlacz. Generalnie pierwszym etapem jest odnalezienie pinów zasilających wyświetlacz. Można to zrobić na podstawie specyfikacji technicznej znalezionej w internecie. osobiscie przerobiłem dwa wyświetlacze. jeden z nich to IEE PC322 http://www.ieeinc.com/specs/PDK_0003_INOPML_REVC.pdf a drugi to VFD WD-202 http://www.eposintl.com/manual/Magnum%20%28WD%20202%29%20Customer%20Display%20Manual.pdf. Niestety, w obydwu przypadkach nie znajdziemy informacji o zasilaniu. Dlatego odnajdujemy charakterystyczne punkty na płytce, czyli masę układu, kondensatory filtrujące, w razie potrzeby szukamy datasheetu pierwszego lepszego układu na płytce, szukamy pinów zasilania i sprawdzamy czy zgadza się ze znalezionym przyłączem zasilania. Kolejnym krokiem jest odnalezienie pinu RxD. UWAGA - w niektórych specyfikacjach napisane jest na odwrót (TxD zamist RxD). Weryfikujemy wszystko po znalezieniu układu konwertera napięć RS232/TTL. U mnie wyglądało to tak:
Dosyć łatwo poznac te układy na płytce wyświetlacza, zapewne będą one zawierać liczbę 232 w swojej nazwie. Znaleźliśmy konwertery. Co teraz? Sprawdzamy który pin to wyjście RxD. Dla wyświetlacza WD-202 jest to nóżka numer 9. Teraz odłączamy nóżkę układu i do miejsca gdzie nóżka była przylutowana możemy podawać sygnał z mikroprocesora. Oczywiście nie tak od razu. Dla pewności proponuję podać sygnał poprzez rezystor 10kOhm i wsatwić diodę zenera 3,6V. Całość tej niewielkiej modyfikacji widać na zdjęciu wyżej przedstawiającym układ ICL232CB oraz jego okolice. Tutaj mały schemat:
Od strony procesora naturalnie podłączyć do TxD. Teraz wysyłając znaki poprzez UART bez problemu wyświetlimy teksty. Najpierw jednak konfiguracja. Teraz dużą pomocą będzie specyfikacja wyświetlacza. Mamy tam tabele znaków, tryby wpisywania tekstu, Wszystko co potrzeba. Komendy wysyłamy najczęściej binarnie lub hexadecymalnie. Przykładowy kod w popularnym BASCOM'ie:
$regfile = "m16def.dat" $crystal = 4000000 $baud = 9600 Printbin 12 'czyszczenie wyświetlacza w hex jest to liczba 0C Print "testowy napis" Print " druga linia" Do Loop End
Program czyści wyświetlacz i wyświetla prosty napis, warto wspomnieć, że po każdym Print w Bascom'ie wysyłany jest znak CR (carriage return), dlatego automatycznie przechodzi do nowej linii. Efekty możemy podziwiać na wyświetlaczu:
Uważam, że takie rozwiązanie jest bardzo wygodne w późniejszym projektowaniu, ponieważ wykorzystujemy tylko jedna linie procesora do sterowania wyświetlaczem tekstowym, nie trzeba stosować specjalnych bibliotek do wyświetlaczy. Cena jest zadowalająca, ten ze zdjęcia kosztował 40 zł, a użyteczna powierzchnia wyświetlania ma 176x39mm.