Monday, April 23, 2012

PKP

Dzisiaj trochę rantu na naszym rodzimym koniu do bicia - PKP.
Pociągami jeżdzę sporadycznie i niewiele się w tym temacie zmienia. Są jednak pozytywy.
Ostatnio jechałem EIC do Poznania i byłem bardzo pozytywnie zaskoczony jakością taboru. Czysto, klimatyzacja, gniazdka 230V, bar w pociągu - normalnie żyć nie umierać.
Z technicznego punktu widzenia jedyne co przypomina stare składy to skrzeczący jak przez stary radiowęzeł personel pociągu informujący o stacjach, podróży itp.

Jeśli chodzi o organizację nadal tragedia :(. Jechałem z kolegą, który miał bilet kupiony normalnie w okienku, ja zaś jako nowoczesny podróżny miałem kupiony on-line.
Przy powrocie z Poznania okazało się, że zdążymy na wcześniejszy pociag (też EIC) dzięki czemu będę 2h wcześniej w domu. Jak się okazało konduktor bez problemu może zabrać mojego kolegę z normalnym biletem wcześniejszym pociagiem i wystawić miejscówkę. Ja za to mam jakiś magiczny bilet, który jest niezmienialny i musiałem czekać 2h lub wydać 130 PLN na nowy bilet. Jak widać w PKP bycie nowoczesnym się nie opłaca.

Drogie PKP - jak już coś robicie (sprzedaż on-line) - nie róbcie z ludzi, którzy wam oszczędzają i czas i kolejki przy kasach pasażerów drugiej kategorii.

Monday, February 20, 2012

Analizator antenowy w/g VK5JST i problem Ohma

Postanowiłem sobie zbudować analizator antenowy w/g koncepcji VK5JST z rozszerzeniami kolegi SP2JJH. Wszystko udało się bez większych problemów, analizator ruszył od pierwszego włączenia. Niestety wszystko psuła jedna mała "rzecz". Na żadnym posiadamym przeze mnie wyświetlaczu nie wyświetlał się prawidłowo symbol Ohma czyli litera Omega.
Pewnie owe chińskie produkty mają inną tablicę kodową, gdyż zdecydowanie był to ichni krzaczek :)

Zajmuje się hobbystycznie też programowaniem mikrokontrolerów, ale jak dotąd nie miałem okazji bawić się PIC'ami a tylko AVR'ami, MSP430 oraz procesorami ARM Cortex-M0. Analizując z pomocą Arduino co tam mają pod adresem 0xF4, którego używa oryginalny program w każdym LCD jaki miałem był ten sam "krzaczor". Ponieważ chciałem aby rozwiązanie było przenośne postanowiłem wykorzystać dostepną pamięć CGRAM. Wycieczka do AVT po programator PIC i zacząłem zabawę.

Każdy wyświetlacz ma  pierwsze 8 rejestrów dostepnych jako zapisywalne przez użytkownika dla jego własnych symboli. Co do szczegółów odsyłam do Wikipedii gdzie jest szczegółowy opis sterownika HD44780.

Największym problemem okazało się skonfigurowanie środowiska MPLAB 8 z kompilatorem CC5X używanym przez VK5JST. Dwie godziny potem środowisko było gotowe i kompilator prawidłogo kompilował oryginalny kod.
Cała reszta to przyjemność programowania :) Co mi się podoba w MPLAB i CC5X:

  • Jeśli wcześniej zadeklarujemy małe makro  np: pragma bit LED_0 @ PORTB.0 to potem zmiana stanu tego portu to poprostu LED_0=1 ! Żadnych &= ~() czy |= na całym rejestrze. Bardzo przyjemna i czytelna sprawa.
  • Pomimo "dziwnego" interfejsu MPLAB 8 - bardzo szybko można zacząć pracować bez dziesiątek wizardów, innych utrudniaczy, czy importowania dziesiątek bibliotek.
A jak wyglądają owe zmiany. Tutaj znajdziecie źródła z moimi poprawkami oraz plikiem wsadowym hex do PIC'a ant-anl-0.04.zip. Napisałem do Vadima, więc może niedługo znajdzie się to w oficjalnym kodzie.
Dla tych co nie chcą dłubać przez cały kod:
  1. Deklaracja tablicy zawierającej opis graficzny litery Omega w pliku lcd_nmix.c
    const char ohm[8] ={0b00000,0b00000,0b01110,0b10001,0b10001,0b01010,0b11011,0b00000};
    
    Każdy bajt opisuje jakie pixele mają być włączone dla każdej z 8 poziomych linii znaku graficznego 5x8 pixeli. Tak więc znaczenia ma tylko pierwsze 5 bitów.
  2. Kod zapisujący znak Omega do pamięci CGRAM w lcd_nmix.c:
    void lcd_add_ohm(void)
    {
    LCD_RS=0;
    lcd_write(0x40);
    LCD_RS=1;
    delay_us(40);
    // send ohm character
    for(k=0;k<8;k++) { lcd_write(ohm[k]);}
    //switch back to DRAM
    LCD_RS=0;
    cd_write(0x80);
    LCD_RS=1;
    delay_us(40);
    
  3. Wywołanie powyższej funkcji w inicjacji wyświetlacza lcd_init(void) w lcd_nmix.c
  4. Zmiana adresu z pod jakiego brać symbol Ohma w aa_defs.h:
    #define LCD_OHM 0x00
I to wszystko. Tak więc programowanie PIC'ów nie takie straszne i w sumie poza drobnymi niuansami różnic pomiędzy 8-bitowcami nie ma.


Followers