Grep – przydatne komendy

  • Wyszukiwanie wszystkich plików w folderze zawierających tekst. Wyszukiwanie w określonych typach plików:
    grep -rl --include="*.php" 'tekst' folder/
    
  • Wyszukiwanie tekstu w pliku z prezentacją linii:
    grep -nr 'tekst' plik.php
    
  • Masowa zamiana tekstu we wszystkich plikach z danym rozszerzeniem w folderze.
    Można także wybrać pliki pod kątem jednego tekstu, a pozamieniać inne. Odsyłam do ‘man sed’.

    grep -rl --include="*.php" 'tekst1' folder/ | xargs sed -i 's/tekst1/tekst2/g'
    

Programowanie PIC – pierwsze problemy

Same procesorki PIC nie są najgorsze, mimo że nie wyróżniają się jakoś specjalnie od AVR. Dużo więcej problemów sprawia natomiast środowisko programistyczne. Zainstalowałem MPLAB X IDE v.1.85 wraz z kompilatorem C XC8 (v 1.20).
Ogólnie w porównaniu do AVR jest dużo gorzej. Kompilator w wersji darmowej nie pozwala wybrać optymalizacji, co oznacza że:
1) Nasz kod wynikowy będzie prawdopodobnie dużo za duży;
2) Nie wiemy, czy poprawnie zachowywać się będą funkcje typu “delay()”;

Kolejny problem: brak jednoznaczności. Wiele przykładowych kodów znalezionych w internecie nie zadziała. Brak “typowych” bibliotek jak inttypes.h, lub delay.h. Brzmi to może śmiesznie, ale uruchamiając pierwszy program typu “Hello World” migający diodą, brakuje takich funkcji.

Napotkałem dziwne problemy z ustawianiem bitów. Wydają się nie działać kody tego typu:

T2CON |= (1<<TMR2ON)|(1<<T2CKPS1);

, natomiast kod taki:

T2CON = 0x06;

już tak. O co chodzi?
Nie spodziewałem się, że będzie można wykonywać operacje na pojedynczych bitach. Tymczasem taki zapis jest poprawny:

TMR2ON =1;

Zauważyłem, że niektóre rejestry (dokładnie np. STRA) nie zerują się po resecie.

Nie mogę się też połapać, jak ustawiać w programie bity konfiguracyjne procesora. Można znaleźć trzy składnie.
Pierwsza:

#FUSES NOWDT

Druga:

#pragma config WDTEN  = OFF

I trzecia:

__config    _WDT_OFF

Której używać?

Jeśli macie sugestie, jak rozwiązać moje problemy, proszę piszcie w komentarzach.

Początek programowania PIC

pic
Dzisiaj po raz pierwszy zaprogramowałem procesor z rodziny PIC!
Użyty układ to PIC16F690.
Programator brenner8 mini zakupiłem na aukcji internetowej za śmieszne pieniądze. Mikroprocesor otrzymałem w postaci próbki od firmy Microchip. Parę słów o nim:

  • 4KB Pamięci programu
  • 256B RAM
  • 256B EEPROM
  • 17 portów I/O
  • 2 timery 8-bit
  • 1 timer 16-bit
  • 12 kanałowy 10-bit przetwornik AC (ADC)
  • Watchdog
  • USART
  • 2 komparatory analogowe
  • Programowane źródło odniesienia! (w pewnym sensie przetwornik D/A)
  • Oddzielny moduł PWM, do 4 wyjść
  • Interfejs I2C (TWI w AVR)
  • Programowanie w układzie (ICSP) (ISP w AVR)
  • Interfejs SPI
  • Wewnętrzny oscylator
  • Brown-out Reset (BOR) – odpowiednik BOD w AVR)
  • Zasilanie 2.0-5.5V

Jak widać, jest to w pewnym sensie odpowiednik ATMEGA48.

Układ podpięty do programatora “zaskoczył” od razu.

UPDATE: Kolega albertb zwrócił uwagę, że pamięć tego MCU odpowiada 8KB flash w AVR. Jest to więc bardziej odpowiednik ATMEGA88. Proszę pamiętać, że nie da się dokładnie porównać obu rodzin.

Mini płytka testowa ATMega8 AVR dla początkujących – jeszcze kilka słów

Płytka testowa jest bezpośrednią reakcją na informacje prezentowane na blogu mikrokontrolery.blogspot.com odnośnie startu z mikrokontrolerami AVR. Chciałem zaprezentować praktyczną i satysfakcjonującą realizację minimalistycznego podejścia do tematu nauki ich obsługi. Płytka wymaga znajomości podstaw elektroniki oraz umiejętności lutowania. Moim celem nie było zaprojektowanie układu, który wykona przedszkolak. Chciałem po pewnym czasie spędzonym z lutownicą mieć możliwość podłączenia do mikroprocesora maksymalnie łatwo jakiś peryferii, aby potem zająć się jedynie obsługą programową oraz oglądaniem efektów.

Bez lutowania można się obejść wtedy przez naprawdę długi czas. Ważne jedynie jest przygotowanie sobie odpowiednich “klocków” do zabawy. A są to w moim przypadku:

  • Wspomniana płytka testowa
  • Programator USBAsp z kabelkiem IDC10
  • Konwerter USB/RS232 zakończony kabelkiem z 4 oddzielnymi gniazdami goldpin (Vcc, GND, RxD, TxD)
  • Płytka stykowa
  • Różne kabelki zakończane wtykami i/lub gniazdami goldpin
  • Różne moduły

Dlaczego Atmega8A?

  • Bardzo dobry stosunek możliwości/cena (jak nie jeden z najlepszych wśród AVR)
  • Szeroki zakres zasilania (2,7-5,5V), nie ma problemów z konwersją napięć przy peryferiach na 3,3V.
  • Taktowanie do 16MHz. W końcowych rozwiązaniach trzeba dbać o oszczędność energii, ale w celach testowych zawsze lepiej mieć zapas mocy, a potem dopieszczać program.

Trwają prace nad podobną płytką, tylko z MCU w obudowie TQFP.

Drobna uwaga: płytka nie zawiera zabezpieczenia przed odwrotnym podpięciem zasilania. Jeśli będzie trzeba, dodam takowe w postaci diody Schottkiego oraz bezpiecznika polimerowego.

Mini płytka testowa ATMega8 AVR dla początkujących – moduły

Początek: Kliknij

Poniżej prezentuję przykładowe zdjęcia użycia płytki testowej.

board_lcd
Podłączenie wyświetlacza LCD 16*2

board_keypad
Podłączenie klawiatury membranowej 4×4

board_encoder
Podłączenie enkodera

Przykładowe moduły. Modułami nazywam drobne układy, które mogą współpracować z MCU i są wykonane tak, aby ułatwić ich podłączenie.

usb_supply
Kabel zasilający układ z USB.

led_ir
Dioda nadawcza IR wraz z rezystorem ograniczającym. Można podłączyć bezpośrednio pod 2 piny MCU.

ds1307_rtc
Zegar RTC na DS1307. Podłączany poprzez I2C (TWI).

24lc08_eeprom
Pamięć 24lc08 (1KB). Podłączana poprzez I2C. Wystarczą 4 przewody: GND, VCC, SDA, SCL.

Możliwości jest o wiele więcej. Szczególnie polecam zakupy na portalach aukcyjnych, wyszukując pod hasłem “arduino” gotowe moduły, które można wykorzystać do nauki. Aktualnie posiadam dalmierz ultradźwiękowy HC-SR04 oraz klawiaturę membranową.

Jeśli będzie zainteresowanie, opiszę jak wykonać i wykorzystać różne moduły.

Mini płytka testowa ATMega8 AVR dla początkujących – montaż

board_top
Kontynuacja informacji o płytce testowej.

Wykaz części oraz orientacyjny koszt (nie zawsze da się kupić po 1 sztuce)

  • podstawka DIL28 (0,20zł)
  • procesor – polecam ATMEGA8A (4,20zł)
  • kondensator 10-100uF/16V (0,08zł)
  • dioda LED 3mm, kolor dowolny (tu: niebieska) (0,30zł)
  • Tact Switch 3x6mm, h=4.3mm (0,16zł)
  • dławik 10uH φ3x7mm (0,10zł)
  • Wtyk IDC 10pin prosty (0,30zł)
  • Gniazdo goldpin proste (0,50zł)
  • Wtyk goldpin prosty (0,40zł)
  • 2x Kondensator SMD 18pF, obudowa 1206 lub 0805 (0,10zł)
  • 3x Kondensator SMD 100nF, obudowa 1206 lub 0805 (0,15zł)
  • Rezystor SMD 10K, obudowa 1206 (0,03zł)
  • Rezystor SMD 1K (ograniczenie prądu LED’a, można użyć dowolnego w zakresie 560R-100K, ja użyłem 30K i i tak jasno świeci), obudowa 1206 (0,03zł)
  • 2xRezystor 470R (może być pomiędzy 0-1K) (0,05zł)

Dodatkowo:

  • Kilka przewodów do zworek; odcinek 5cm 8-żyłowej skrętki w zupełności wystarczy (<0,01zł)
  • Laminat o wymiarach 75x35mm (0,58zł)

Podsumowując, koszt wykonania płytki to 7,19zł.

Niech nikogo nie przerażą użyte elementy SMD. Dzięki ich wykorzystaniu, płytka jest sporo mniejsza, jest mniej wiercenia, a wykonanie układu jest tańsze. Wszystko da się polutować zwykłą lutownicą za 30zł, używając zwykłej grubej cyny 1mm. Wystarczy pęseta, jakaś lupa i trochę staranności. W razie potrzeby można wykonać prowizoryczny topik w płynie, w postaci gęstego roztworu kalafonii w denaturacie lub izopropanolu.

Elementy SMD, dłuższe zworki oraz wybrane złącza Pinów (u mnie PortB oraz PortC) lutujemy od strony druku. Popzostałe elementy tradycyjnie.
Widok płytki od spodu
Schemat montażowy

Mini płytka testowa ATMega8 AVR dla początkujących – opis

board_lcd
Przedstawiam Wam zaprojektowaną przeze mnie płytkę pod mikroprocesor ATMega8 (ATMega8A, ATMega48/88/168/328) w wersji DIP. Płytka powstała w celu ułatwienia nauki mikroprocesorów z wykorzystaniem płytki stykowej.
Możliwości i cechy:

  • Niska cena (kilka zł)
  • Niewielkie wymiary
  • Złącze IDC/KANDA daje wygodę programowania. Płytka powstała przede wszystkim dlatego, że miałem już dosyć podpinania pojedynczych kabelków złącza ISP pod płytkę stykową. Tutaj wpinasz taśmę w gniazdo, i wszystko od razu działa. Płytka może być zasilana z tego gniazda, a dodatkowo testowany układ.
  • Wyprowadzone wszystkie piny I/O procesora. Nie ma ograniczeń. Dodatkowo, pominąłem piny zasilające, dzięki temu oszczędzamy sporo miejsca na płytce stykowej, związanej z niewygodnym rozłożeniem zasilania po dwóch stronach układu scalonego. Piny zostały zgrupowane w 3 złącza.
  • Obsługa różnych modeli procesorów. Działa z ATMEGA8, ATMEGA8A, ATMEGA48/88/168/328, i bardzo możliwe, że z jakimiś jeszcze.
  • Złącze RS232. Bardzo ważne i przydatne. W standardzie TTL, czyli na napięciach takich jak procesor. Dzisiaj mało który komputer ma złącze RS232, ale znowu wystarczy kupić za $0.99 na eBay konwerter USB-RS232, i wszystko śmiga. Łatwo debugować program, nie trzeba podpinać i obsługiwać wyświetlacza. Piny Rx i Tx zabezpieczone poprzez rezystory, więc w razie zwarcia nic się nie stanie. Dodatkowo układ można zasilać z przejściówki USB.
  • Poprawne zasilanie. Płytka posiada kondensatory filtrujące 100nF przy końcówkach zasilających.
  • Filtrowanie części analogowej. AVCC zasilane poprzez dławik 10uH, własny kondensator filtrujący. Dodatkowy kondensator podłączony do wejścia Aref.
  • Wyjście zasilania części analogowej. Podpinając układ pod ADC, możesz wykorzystać filtrowane zasilanie wyprowadzone na płytce za pomocą dodatkowego gniazda.
  • Wygodna współpraca nawet z najmniejszą płytką stykową. Płytka widoczna na początku kupiona została na e-bay za niecały $1 wraz z przesyłką, która posiada 170 pól stykowych. W zupełności wystarczy do zmontowania wielu układów. Bez mojej płytki testowej po wpięciu procesora mamy na start zajęte 14 z 17 rzędów pinów po każdej stronie. Z moją płytką nie musisz wpinać nawet jej w styki, albo możesz wpiąć np. 5 pinów PortB.1-PortB.5, a resztę wykorzystać po swojemu. Na fotografii wstępnej widać, że bez problemu podłączyłem wyświetlacz LCD 16*2. Dodatkowo spokojnie mieści się np. zegarek RTC na DS1307, i jeszcze jest miejsce.
  • Możliwość wymiany kwarcu. Domyślnie MCU pracuje na wew. oscylatorze, ale jak trzeba, można włożyć dowolny zewnętrzny w przewidziane gniazdo. Kondensatorki 18pF są już na swoim miejscu.
  • Opisane złącza. Kilka naklejek na płytkę, a zaoszczędzisz wiele czasu zaglądania do noty katalogowej. Nazwy pinów I/O, a także drugorzędna funkcja. Tyle, ile się zmieściło.
  • Przycisk RESET. Przydatny podczas testów. Poprawne wpięcie Tact-switch’a w płytkę stykową jest praktycznie niewykonalne i bardzo frustrujące. Tu jest już na miejscu. Sam pin Reset podciągnięty do “plusa” poprzez rezystor 10K.
  • Łatwość wykonania płytki. Płytka jest jednostronna, o dość szerokich ścieżkach (jak na dzisiejsze czasy, nawet bardzo). Drukarka laserowa, śliski papier i za 20 minut masz gotową płytkę. Dłużej zajmie podpinanie kabelkami procka na płytce stykowej, aby wszystko było poprawnie. Na płytce minimalna ilość zworek.
  • Prezent. Dla chętnych udostępnię różne aplikacje układów które łatwo uruchomić używając tej płytki stykowej (ale można i bez niej). Zaprezentuję różne moduły dołączane do procesora i przykładowe programy w C.

board_top_desc
Opis płytki na zdjęciu

board_breadboard
Jak prezentuje się płytka razem z płytką stykową

pcb_normal
Schemat (przepraszam, że tak nieestetycznie narysowany)

board_side
Widok od boku.

Pobierz PDF’a z mozaiką ścieżek gotową do termotransferu: atmega8_test_board

Odnajdywanie sieci Windows (Vista, 7)

Jeśli występują problemy z wyszukiwaniem komputerów w sieci, należy upewnić się, że następujące usługi w systemie są odpowiednio skonfigurowane:

  • Klient DNS
  • Publikacja zasobów odnajdowania funkcji
  • Odnajdywanie SSDP
  • Host urządzenia UPnP

Oraz:

  • serwer
  • rozpoznawanie sieci NLA

Włączyć te usługi najszybciej jest za pomocą następujących poleceń (uruchamianych w konsoli z uprawnieniami administracyjnymi):

sc config dnscache start= demand
sc config fdrespub start= demand
sc config ssdpsrv start= demand
sc config upnphost start= demand

sc config lanmanserver start= auto
sc config nlasvc start= auto

Zamiast “demand” można dać “auto”, byle nie “disabled”.

AVR-GCC Operacje na pinach I/O w języku C

Przykłady na PORTC, pin nr 3:

Konfiguracja pinów:

  1. Cały port jako wejścia:
    DDRC = 0x00;
  2. Cały port jako wyjścia:
    DDRC = 0xFF;

 
Sterowanie wyjściami:

  1. Wyzerowanie bitu:
    PORTC &= ~_BV(3);
  2. Ustawienie bitu:
    PORTC |= _BV(3);
  3. Zmiana stanu:
    PORTC ^= _BV(3);

 
Odczyt stanu wejść:

  1. Czy na wejściu jest 1:
    bit_is_set(PINC,3)
  2. Czy na wejściu jest 0:
    bit_is_clear(PINC,3)