Skip to content


Technicznie elektronicznie

W poprzednim poście napisałem, że jednym z moich zeszłorocznych osiągnięć jest progres w zaległych projektach. Konkretnie na myśli miałem fakt, że miesiąc temu kupiłem programator mikrokontrolerów PIC i od tamtej pory dłubie w elektronice. Na razie uczę się najprostszych rzeczy- jak działają poszczególne elementy: diody, tranzystory, sterowniki silników, fotodiody, timery, wyświetlacze itp itd.

KIT2

Pomimo kompletnego braku podstaw jakoś sobie radzę – tak naprawdę przypomina to składanie klocków, szczególnie gdy korzysta się z płytki do prototypowania. Ostatnio udało mi się podłączyć znakowy wyświetlacz LCD (8X2). Jako jednostkę sterującą wykorzystuję mikrokontroler PIC16F690 w obudowie DIP20.

Wbrew pozorom ma on całkiem spore możliwości (szczególnie jeżeli weźmiemy pod uwagę cenę: 2.13 funta):

  • 4kb pamięci dla kodu
  • 512 bajtów RAM (256 RAM i 256 EEPROM)
  • 18 wyjść/wejść
  • 5 MIPSów
  • duży zakres napięć pracy

Programować toto można w asemblerze (dość ubogim jak na mój gust), C oraz BASICu. Podejrzewam że dwa ostatnie troche zwiększają objętość programów (co jest nie bez znaczenia jeżeli mamy do dyspozycji tylko 4kb).

PICkit 2 jest programatorem “in system”, możliwe jest więc programowanie już wmontowanego elementu. Znacznie ułatwia to cały proces – szczególnie że często nie wiadomo dlaczego coś nie działa i trzeba działać metodą prób i błędów – programowanie czipa na programatorze byłoby upierdliwe.

Podłączanie LCD do mikrokontrolera nie było zbyt skomplikowane technicznie – potrzebujemy 6 lini w trybie 4 bitowym lub 10 lini w trybie 8 bitowym (troche prostszym). Gorzej było z oprogramowaniem – inicjalizacja wyświetlacza jest ściśle określona, komendy muszą być wydawane z odpowiednimi opóźnieniami itp itd. Ja skorzystałem z kodu z tej strony. Na początku miałem sporo problemów, ale w końcu udało mi się zainicjalizować wyświetlacz korzystając z tej sekwencji:

   1: movlw    0x03

   2: movwf    LCD_PORT

   3: bcf    LCD_PORT, LCD_RS    ;RS line to 0

   4: call    Pulse_e            ;Pulse the E line high

   5: call    Delay20

   6: movlw    0x03

   7: movwf    LCD_PORT

   8: bcf    LCD_PORT, LCD_RS    ;RS line to 0

   9: call    Pulse_e            ;Pulse the E line high

  10: movlw    0x03

  11: movwf    LCD_PORT

  12: bcf    LCD_PORT, LCD_RS    ;RS line to 0

  13: call    Pulse_e            ;Pulse the E line high

  14:  

  15: movlw    0x02

  16: movwf    LCD_PORT

  17: bcf    LCD_PORT, LCD_RS    ;RS line to 0

  18: call    Pulse_e            ;Pulse the E line high

  19: movlw    0x20            ;Set 4 bit mode

  20: call    LCD_Cmd

  21: movlw    0x2c            ;Set 4 bit mode

  22: call    LCD_Cmd

  23: movlw    0x08

  24: call     LCD_Cmd

  25: movlw    0x01

  26: call     LCD_Cmd

  27: movlw    0x06

  28: call     LCD_Cmd

  29: movlw    0x0c

  30: call     LCD_Cmd

(LCD_Cmd wysyła najpierw wyższy nibble).

Kilka uwag:

  • Jeżeli nic nie widać na wyświetlaczu, powinniście sprawdzić ustawienia rezystora kontrastu (VEE) – możliwe że po prostu ustawionie jest zbyt jasne
  • niezainicjowany LCD wyświetla czarne prostokąty w jednej linii – jesteście już blisko
  • wszystkie nieużywane nogi powinny być podłączone do uziemienia (GND) – w szczególności linia RW (jeżeli jest nieużywana). Ja głowiłem się nad tym 2 dni.

Efekt końcowy w moim przypadku wyglądał następująco:

BB LCD

Posted in TechBlog.


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.