Wyświetlacz LCD na RS-232


7.75
Ocena: None Średnia: 7.8 (4 głosujących)

Układ jest uniwersalnym wyświetlaczem LCD sterowanym za pośrednictwem portu RS-232. Dzięki zastosowaniu mikrokontrolera ATTINY2313 oraz konwertera poziomow MAX232 układ może być bezpośrednio podłączony do komputera. Sterowanie wyświetlaczem odbywa się za pomocą programu przesyłającego kody ASCI oraz specjalne instrukcje sterujące położeniem kursora i włączaniem podświetlania, na port RS-232 (zamiast specjalnego programu może być dowolny terminal). Dodatkowo układ może wspołpracować z innym mikrokontrolerem i służyć mu jako wyświetlacz sterowany tylko za pomocą jednej linii sygnałowej. Jest to przydatne szczegolnie gdy chcemy zamontować wyświetlacz kilkanaście metrow od głownego systemu mikroprocesorowego. Ponieważ układ wyświetlacza posiada dwukierunkowy interfejs szeregowy, istnieje możliwość podłączenia klawiatury i przesyłanie rozkazow sterujących pracą urządzenia (od wyświetlacza do urządzenia) za pomocą dodatkowego przewodu.

Działanie:

Schemat ideowy układu został przedstawiony na rysunku poniżej:

Sercem układu jest mikrokontroler U1 (ATTINY2313) wraz z rezonatorem kwarcowym X1 (16MHz) i dwoma kondensatorami C1 (22pF) i C2 (22pF). Potencjomatr P1 (10k) umożliwia regulację kontrastu wyświetlacza LCD W1 (16x2). Tranzystor T1 (BC556) wraz z rezystorami R1 (3,3k) i R2 (3,3k) umożliwia sterowanie podświetlaniem LCD. Rezystor R3 (47R) ogranicza prąd obwodow podświetlania wyświetlacza W1. Kondensatory C7 (100uF) i C8 (100nF) filtrują napięcie zasilania mikrokontrolera. Układ U2 (MAX232) jest konwerterem napięć, dostosowuje on stany logiczne występujące na porcie RS-232 do standardow obsługiwanych przez mikrokontroler. Kondensatory elektrolityczne C3 - C6 (1uF) są konieczne do poprawnej pracy układu U2. Złącza RxD_G oraz TxD_Vcc umożliwiają podłączenie zasilania i przewodow sygnałowych portu RS-232. Ponieważ port szeregowy jest dwukierunkowy istnieje możliwość podłączenie klawiatury i sterowania drugim mikrokontrolerem lub programem komputerowym. Do tego celu służy złącze GP1(wymaga modyfikacji programu). Do zaprogramowania mikrokontrolera służy złącze Prog a dodatkowo jego dwa piny (nie podłączone do wyświetlacza W1) mogą być wykorzystane w dowolny sposob (po zaprogramowaniu mikrokontrolera)

Budowa:


Wyświetlacz można zbudować w oparciu u płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym można pobrać tutaj. Montaż należy rozpocząć od wlutowania trzech zworek. Kondensatory elektrolityczne C3- C7 należy zamontować w pozycji leżącej, tak aby zmieściły się pod wyświetlaczem LCD, znajdującym się nad całą płytką drukowaną. Złącza Prog i GP1 mogą być w wersji "kątowej", ułatwi to podłączenie po zamontowaniu wyświetlacza. Rezonator kwarcowy musi być w wersji niskiej z tego samego powodu co leżące kondensatory. Pod mikrokontroler i układ U2 należy zastosować podstawki. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj

Wykaz Elementów:

2x Złącze Śrubowe ARK2(podwójne)
2x Listwa Goldpin 1x4 (GP1)

2x 3,3k
1x 47R
1x Potencjometr Montażowy 10k

2x 22pF
1x 100nF
4x 1uF Elektrolit
1x 100uF Elektrolit

1x Rezonator Kwarcowy 16MHz
1x BC556
1x Mikrokontroler ATTINY2313 + Podstawka
1x Konwerter Napięć MAX232
1x Wyświetlacz LCD 16x2

Programowanie:

Mikrokontroler został zaprogramowany w wersji demo programu BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 9600
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B10111111
 
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5       'mirley test board
Config Lcd = 16 * 2
Cls
Cursor On Blink
 
'Typ wyswietlacza LCD Kmax*Wmax
Const Kmax = 16
Const Wmax = 2
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Znak As Byte
Dim S As String * 1
Dim K As Byte , W As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
K = 1
W = 1
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
Inputbin Znak
If Znak <> 0 Then
  Select Case Znak
 
    Case 1:
    '****************************  podswietlanie
    Toggle Portd.6
    '****************************
 
   'Case 2....7 
 
    Case 8:
    '**************************** kasowanie ostatniego (backspace)
      Decr K
      If K = 0 Then
        K = Kmax
        Decr W
        If W = 0 Then W = Wmax
      End If
      Locate W , K
      Lcd " "
      Locate W , K
    '**************************** kasowanie ostatniego (backspace)
 
    'Case 9....12
 
    Case 13:
    '**************************** enter
      Incr W
      If W > Wmax Then W = 1
      K = 1
      Locate W , K
    '**************************** enter
 
   'Case 14....26
 
    Case 27:
    '**************************** kasowanie calosci(ESC)
      Cls
      K = 1
      W = 1
      Locate W , K
    '**************************** kasowanie calosci
 
   'Case 28....31
 
    Case 32 To 126:
    '**************************** znaki standardowe
      S = String(1 , Znak)
      Locate W , K
      Lcd S
 
      Incr K
      If K > Kmax Then
        K = 1
        Incr W
        If W > Wmax Then W = 1
      End If
    '**************************** znaki standardowe
 
    'Case 127....160
 
    Case 161 To 244:
    '**************************** locate
    K = Znak And &B00011111
    W = Znak And &B01100000
    Shift W , Right , 5
    If K <= Kmax And W <= Wmax Then
      Locate W , K
    End If
    '**************************** locate
    'locate -> Wysylamy wartosc 1kkwwwww (kk-numer kolumny, wwwww-numer wiersza)
            'gdzie kk = (01....11)  wwwww = (00001.....10100)
 
    'Case 245....255
 
  End Select
End If
Loop
End
'************ Petla glowna Koniec **************

Obsługa:

Do osługi wyświetlacza konieczny jest komputer z programem typu terminal, lub własnym programem sterującym. Można także wykorzystać drugi mikrokontroler i wysyłać odpowiednie informacje za jego pomocą.

Kody sterujące (wysyłane wartości liczbowe):
1 - Zmiana stanu podświetlania
2...7 - nieużywane
8 - Backspace (kasuje ostatnio wpisany znak)
9...12 - nieużywane
13 - enter (przejście do następnej linii)
14...26 - nieużywane
27 - kasowanie całego tekstu
28...31 - nieużywane
32...126 - standardowe znaki według kodu ASCI
127...160 - nieużywane
161...244 - pozycja, wartość binarna 1kkwwwww (gdzie kk = (01...11) - numer kolumny, wwwww = (00001...10100) - numer wiersza)
245...255 - nieużywane

Zdjęcia Projektu:

ZałącznikWielkość
Schemat58.2 KB
Płytka13.07 KB
Płytka (odbicie lustrzane)13.21 KB
Płytka (6 na stronie)65.58 KB
Montowanie17.25 KB
Kod Źródłowy2.77 KB
Program po kompilacji (BIN)970 bajtów
Program po kompilacji (HEX)2.68 KB



Portret użytkownika Piotr

Wyświetlacz 20 x 2

Witam.
Mam problem z wyświetlaczem 20 x 2.
Po zmianie kodu w dwóch miejscach, nie mam napisu w dolnej linii po włączeniu.
Mam tylko jedną górną linię w takiej postaci : TESTER PORTU RS232BA
Druga linia próbuje połączyć się z pierwszą, ale brakuje jej miejsca.
Mój wyświetlacz to : WH2002L-YYK-ET.
Przy wyświetlaczu 16 x 2 było wszystko OK.
ps. Jak wgram kod od wyświetlacza 16 x 2 do obsługi tego 20 x 2 to też nie wyświetlają się dwie linie.
Czy on potrzebuje jakąś inną konfigurację ?.
Dzięki za pomoc

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 9600
Config Serialin = Buffered , Size = 20
Enable Interrupts
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B10111111
 
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5       'mirley test board
Config Lcd = 20 * 2           --------------  ZMIANA
Cls
Cursor Off
Lcd "TESTER PORTU RS232"
Lowerline
Lcd "BAUD 9600"
Wait 1
Cls
Cursor On Blink
 
'Typ wyswietlacza LCD Kmax*Wmax       ------------------ZMIANA
Const Kmax = 20
Const Wmax = 2
 
'********** Konfiguracja uC Koniec  ************

Portret użytkownika mirley

Re: LCD

Daodaj na początku jeszcze dwie dodatkowe linie do wyswietlenia aby zobaczyc czy przypadkiem pamięć dla tego LCD nie jest zoorganizowana inaczej niż zwykle:

Lcd "TESTER PORTU RS232"
Lowerline
Lcd "BAUD 9600"
Thirdline
Lcd "linia 3"
Fourthline
Lcd "linia 4"

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika EDC

Odp.Wyświetlacz 20 x 2

Sprawdź jaką masz wersję Bascom.
W nowej, zamiast gwiazdki powinno się wpisywać iks.
Producent mógł tez użyć innego chipsetu i trzeba dopisać wtedy jeden parametr.

CONFIG LCD = 20 x 2 , CHIPSET=KS077 ' <-opcjonalnie i na próbe

Można o tym poczytać tutaj.

Co do kodu...to chyba względem oryginału dodano bufor Serialin..to oznacza przerwania. Sprawdź czy Hwstack potrafi pomieścić wypychane rejestry ;)
Teraz nawet w helpie piszą żeby zawsze umieszczać wartości dla Hwstack, Swstack i Framesize w kodzie programu.

Miłego dnia

-

BARTek
Moja strona

Portret użytkownika Piotr

Wyświetlacz 20 x 2

Wersję Bascoma mam 2.0.5.0.
Nie przyjmuje iks-ów w konfiguracji LCD [ wywala błąd ].
Po wpisaniu CHIPSET=KS077 nic się nie dzieje.
Nie mam pojęcia jaki tam jest chipset.
Po wpisaniu tego co podał mirley mam to co na zdjęciu;

Wcześniej przy wpisanych dwóch liniach pierwsza łączyła się z drugą :
TESTER PORTU RS232BA
Teraz druga jest OK, tylko do nich " włażą " 3 i 4.
Jakiś postęp jest :)
Jest to wyświetlacz ze starej kasy fiskalnej Posnet, może ktoś miał z nim styczność ?.

Portret użytkownika EDC

Odp.Wyświetlacz 20 x 2

Spróbuj wpisać 16*4 w Configu ale te Const Kmax = 20 ,Const Wmax = 2 zostaw.

Jak ja za dużo wpiszę do takiego 20 * 4 to z pierwszej linii przeskakuje do trzeciej, wiec tutaj po 16 znakach powinno pisac dalej w górnej linii.

-

BARTek
Moja strona

Portret użytkownika mirley

Re: LCD

Spróbuj tez polecenia Locate y, x i ustaw odpowiedni znak i kolumne przed wpisaniem tekstu. Trzeba wyczaic jakie adresy tam są....

Aha spróbuj nie używać polecenia lowerline bo ono może zły adres ustawiac.... Wpisz loacate 1,1 a potem poprostu wypisz tekst o długości 20 znaków

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Piotr

Wysłanie słowa

Trochę mnie nie było ale :
Najpierw po wpisaniu

Lcd "TESTER PORTU RS232"
Lowerline
Lcd "BAUD 9600"
Thirdline
Lcd " "    ----------- bez tekstu
Fourthline
Lcd " "    ----------- bez tekstu

wszystko zagrało jak należy, potem wpisałem tylko pierwsze dwie linie i też wszystko było w porządku.
Krótko mówiąc wróciłem do pierwotnej wersji i wszystko jest OK [ może to wina mojego Bascoma, że coś źle kompiluje ? ].

Mam pytanie, czy dużo roboty jest z dopisaniem kodu do wysłania słowa np. HELLO z tego układu po naciśnięciu guzika ? przy parametrach :
M6 M5 M4 M3 M2 M1 CR LF
gdzie:
M6 ... M1 - napis np HELLO
CR - Carriage Return (powrót karetki)
LF - Line Feed (nowa linia)

ps. nie wytrzymałem i musiałem sprawdzić to co podał mirley.

Locate 1 , 1 : Lcd "TESTER PORTU RS-232 "
Locate 2 , 2 : Lcd "BAUD 9600 "

i jest super. Dzięki.

Portret użytkownika EDC

Odp. Wysyłanie słowa

Jeśli transmisja ma się w obydwie strony odbywać z dwoma bitami stopu to możesz to ustawić w IDE.
Lepiej jest konfigurację zawsze umieszczać w kodzie.
Potem to juz nieskomplikowane. W najprostszej wersji tworzysz zmienną tekstową. Wpisujesz do niej Hello i wysyłasz zmienną. Każda zmienna tekstowa typu string ma w sobie znak końca (terminator NULL) wiec wysyłana będzie do momentu aż się skończy :) Nie całe 10 znaków, tylko HELLO lub co tam wpiszesz

Dim Napis As String * 10
 Napis = "HELLO"
 
 IF Przycisk = 0 Then
  Print Napis
 End If

CR i LF jest nadawany za stringiem automatycznie chyba że sobie tego nie życzysz.

-

BARTek
Moja strona

Portret użytkownika Piotr

Wysyłanie słowa

Dzięki BARTek, ale muszę się przyznać, że w Bascomie jestem jeszcze w pieluchach :-).
Trzeba by tu też gdzieś dopisać jakiś przycisk do wywoływania tego napisu, żeby to wszystko ze sobą zagrało, możesz też pomóc.

Zakładając, że przycisk podłączę od masy do nóżki 6 attiny.
Przy zwarciu go, kod taki jak niżej zadziała ?:
[ no i gdzie to umieścić w kodzie ? ]

Dim Napis As String * 10
 Napis = "HELLO"
 
 IF Portd.2 = 0 Then
  Print Napis
 End If

Portret użytkownika EDC

Odp. Wysyłanie słowa

No więc tak.. pisanie od nowa a przerabianie to zawsze coś innego. Trzeba patrzeć co już jest zrobione. W tym kodzie na początku są określane funkcje poszczególnych pinów. Po wyrażeniu Config Port jedynkami albo zerami ustalasz czy dany pin jest wejściem czy wyjściem. Musisz więc zmienić funkcję na wejście.
Po wyrażeniu Config Port i ustaleniu funkcji masz wyrażenie Portx= Tam jedynka albo zero oznacza w zalezności od tego czy pin jest wejściem czy wyjściem, albo ustalenie stanu wysokiego albo niskiego dla wyjścia albo właczenie podciągania dla przycisku.
Chodzi o to że jak pin jest wejściem i zwierasz go do masy to żeby odróżnić te stany coś musi ustawiac na nim stan wysoki. I robi to jedynka czyli właczenie rezystora podciągajacego dla pinu.
Czyli tutaj:

Config Portd = &B11111111 : Portd = &B10111111

Musisz zamienić funkcję na wejście czyli z jeden na zero
Config Portd = &B11111011 : Portd = &B10111111
Przycisk Alias Pind.2

Na podciąganiu jedynka była wiec nic się nie zmienia.(mam nadzieję że wiesz że piny w porcie, tak jak w zapisie binarnym liczymy od prawej strony i liczymy od zera. Czyli zero w Config Portd znajduje się na drugim miejscu)
Dodajesz też przyjazną nazwę dla Pind.2

Teraz dodaj gdzieś w pętli taki zapis

Debounce Przycisk , 0, Send_it, Sub

..a całkiem na końcu, już po wyrażeniu Loop i End i Koniec programu dopisz taki Sub

Send_it:
 Print Napis
Return

Debounce nie pozwoli na ciągłe nadawanie. Będzie można nadać tylko raz przy jednym naciśnięciu nawet jeśli przytrzymasz przycisk

-

BARTek
Moja strona

Portret użytkownika Piotr

Wysyłanie słowa

A gdzie to ma być w kodzie ?:

Dim Napis As String * 10
 Napis = "HELLO"
 
 IF Przycisk = 0 Then
  Print Napis
 End If

rozumiem,że teraz port z przyciskiem musi być podciągnięty do zasilania przez rezystor

Portret użytkownika EDC

Odp. Wysyłanie słowa

Proszę, wersja "DeLux" Wysyła trzy różne słowa.
Dzięki podciąganiu wewnetrznym rezystorem w który wyposażone sa mikrokontrolery Tiny nie potrzeba tego zewnętrznego.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
$baud = 9600
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B10111111
 
 Przycisk Alias Pind.2
 Dim Napis As String * 10 , N As Byte
 
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5       'mirley test board
Config Lcd = 16 * 2
Cls
Cursor On Blink
 
'Typ wyswietlacza LCD Kmax*Wmax
Const Kmax = 16
Const Wmax = 2
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Znak As Byte
Dim S As String * 1
Dim K As Byte , W As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
K = 1
W = 1
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
Inputbin Znak
If Znak <> 0 Then
  Select Case Znak
 
    Case 1:
    '****************************  podswietlanie
    Toggle Portd.6
    '****************************
 
   'Case 2....7
 
    Case 8:
    '**************************** kasowanie ostatniego (backspace)
      Decr K
      If K = 0 Then
        K = Kmax
        Decr W
        If W = 0 Then W = Wmax
      End If
      Locate W , K
      Lcd " "
      Locate W , K
    '**************************** kasowanie ostatniego (backspace)
 
    'Case 9....12
 
    Case 13:
    '**************************** enter
      Incr W
      If W > Wmax Then W = 1
      K = 1
      Locate W , K
    '**************************** enter
 
   'Case 14....26
 
    Case 27:
    '**************************** kasowanie calosci(ESC)
      Cls
      K = 1
      W = 1
      Locate W , K
    '**************************** kasowanie calosci
 
   'Case 28....31
 
    Case 32 To 126:
    '**************************** znaki standardowe
      S = String(1 , Znak)
      Locate W , K
      Lcd S
 
      Incr K
      If K > Kmax Then
        K = 1
        Incr W
        If W > Wmax Then W = 1
      End If
    '**************************** znaki standardowe
 
    'Case 127....160
 
    Case 161 To 244:
    '**************************** locate
    K = Znak And &B00011111
    W = Znak And &B01100000
    Shift W , Right , 5
    If K <= Kmax And W <= Wmax Then
      Locate W , K
    End If
    '**************************** locate
    'locate -> Wysylamy wartosc 1kkwwwww (kk-numer kolumny, wwwww-numer wiersza)
            'gdzie kk = (01....11)  wwwww = (00001.....10100)
 
    'Case 245....255
 
  End Select
End If
 
 Debounce Przycisk , 0 , Send_it , Sub
 
Loop
End
'************ Petla glowna Koniec **************
 
Send_it:
 Incr N
  If N > 3 Then N = 1
 
  Select Case N
   Case 1
    Napis = "Hello"
   Case 2
    Napis = "World"
   Case 3
    Napis = "Piotr"
  End Select
 
 Print Napis
Return

-

BARTek
Moja strona

Portret użytkownika Piotr

Odp. Wysyłanie słowa

Dzięki BARTek za kod.
Czyli teraz po zwarciu 6 nogi attiny bezpośrednio z masą powinienem odebrać te napisy np. w Hyper Terminalu.
---------------------------------------------------
Edit:
Próbuję na różne sposoby i nie jestem w stanie odebrać tego. Nie wiem gdzie jest błąd :-(

Portret użytkownika EDC

Odp. Wysyłanie słowa

Nie napisałeś czy w ogóle potrafisz coś wysłać na ten wyświetlacz z portu komputera. Masz w ogóle komunikację w tamtą stronę?
Żeby komunikacja przebiegała pomyślnie wszędzie po drodze musżą być tak samo ustawione parametry. Na dodatek jeśli w kodzie programu nie umieścisz innych dyrektyw to komunikacja odbywa się na zasadach i parametrach wpisanych w ustawieniach Bascom. Czyli tutaj

Zauważ że u mnie jakieś dzikie Baudrate ale to co masz wpisane w kodzie jest ważniejsze. Za to bity stopu jeśli nie wpiszesz w kodzie to na pewno sa brane stąd. Więc ustaw wszedzie tak samo.
Czyli w ustawieniach Bascom i w komputerze musisz mieć tak samo. Jeśli chcesz dwa bity stopu to musisz to mieć też ustawione w komputerze. Jeśli korzystasz z przejściówki na FTDI to znajdziesz właściwości portu w Managerze Urządzeń.
Potem w terminalu też musi być tak samo. Wszędzie musi być tak samo.
Terminal Putty, mimo że nie lubiłem, też da się polubić. Klikasz Serial, wybierasz opcje i klikasz Open. Można zapisac konfiguracje żeby za każdym razem nie musieć wybierać.

Dopiero jak bedziesz miał otwarty terminal to naciskaj przycisk. Na wszelki wypadek sprawdź miernikiem czy masz tam 5v przy niewciśniętym przycisku, bo jak pisałem, wciśniety ciągle też nie będzie nadawał.

EDIT. ..a tak się to robi w kodzie

'dla pewnosci Baudrate i Stopbits = 2 tutaj i w ustawieniach Windowsa
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0

...jeśli te dwa bity są Ci potrzebne

-

BARTek
Moja strona

Portret użytkownika Piotr

Odp. Wysyłanie słowa

W tej chwili jak piszę na komputerze to także jest to wyświetlane na LCD.
Przy włączonym ECHO w terminalu to co piszę mam na LCD i wraca także na monitor.
Poustawiałem wszystko co pokazałeś w Bascom-ie.

Przy wyjętym attiny przy zwarciu nogi 2 i 3 wysłane dane wracają na komputer.
Komunikacja do i od procesora sprawna [ błąd kabla i MAX-a wyeliminowany ].
Na 6 nodze attiny mam 5V.
Po zwarciu jej do masy martwa cisza.
Sprawdzałem kilka programów RS, ostatnio tego

Portret użytkownika EDC

Odp. Wysyłanie słowa

Skoro Tiny chce z Tobą wojowac to wgraj mu to :D

$regfile = "attiny2313.dat"
$crystal = 16000000
'$baud = 9600
 
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
 
Dim Napis As String * 10 , N As Byte
 
 Napis = "Test "
 
 Do
 
  Print Napis ; N
 
  Incr N
  Wait 1
 
 Loop
 End

Powinien nadawać sam co sekundę

..a tu wersja TURBO ponieważ instrukcja Inputbin może zajmuje mikrokontroler to teraz tylko jesli będa znaki w buforze się te wprowadzanie uruchomi.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 16000000
'$baud = 9600
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 20
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B10111111
 
 Przycisk Alias Pind.2
 
Dim Napis As String * 10 , N As Byte
 
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5       'mirley test board
Config Lcd = 16 * 2
Cls
Cursor On Blink
 
'Typ wyswietlacza LCD Kmax*Wmax
Const Kmax = 16
Const Wmax = 2
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Znak As Byte
Dim S As String * 1
Dim K As Byte , W As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
K = 1
W = 1
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Enable Interrupts
 
Do
 
If Ischarwaiting() > 0 Then
 
Inputbin Znak
If Znak <> 0 Then
  Select Case Znak
 
    Case 1:
    '****************************  podswietlanie
    Toggle Portd.6
    '****************************
 
   'Case 2....7
 
    Case 8:
    '**************************** kasowanie ostatniego (backspace)
      Decr K
      If K = 0 Then
        K = Kmax
        Decr W
        If W = 0 Then W = Wmax
      End If
      Locate W , K
      Lcd " "
      Locate W , K
    '**************************** kasowanie ostatniego (backspace)
 
    'Case 9....12
 
    Case 13:
    '**************************** enter
      Incr W
      If W > Wmax Then W = 1
      K = 1
      Locate W , K
    '**************************** enter
 
   'Case 14....26
 
    Case 27:
    '**************************** kasowanie calosci(ESC)
      Cls
      K = 1
      W = 1
      Locate W , K
    '**************************** kasowanie calosci
 
   'Case 28....31
 
    Case 32 To 126:
    '**************************** znaki standardowe
      S = String(1 , Znak)
      Locate W , K
      Lcd S
 
      Incr K
      If K > Kmax Then
        K = 1
        Incr W
        If W > Wmax Then W = 1
      End If
    '**************************** znaki standardowe
 
    'Case 127....160
 
    Case 161 To 244:
    '**************************** locate
    K = Znak And &B00011111
    W = Znak And &B01100000
    Shift W , Right , 5
    If K <= Kmax And W <= Wmax Then
      Locate W , K
    End If
    '**************************** locate
    'locate -> Wysylamy wartosc 1kkwwwww (kk-numer kolumny, wwwww-numer wiersza)
            'gdzie kk = (01....11)  wwwww = (00001.....10100)
 
    'Case 245....255
 
  End Select
End If
End If
 
 Debounce Przycisk , 0 , Send_it , Sub
 
Loop
End
'************ Petla glowna Koniec **************
 
Send_it:
 Incr N
  If N > 3 Then N = 1
 
  Select Case N
   Case 1
    Napis = "Hello"
   Case 2
    Napis = "World"
   Case 3
    Napis = "Piotr"
  End Select
 
 Print Napis
Return

-

BARTek
Moja strona

Portret użytkownika Piotr

Odp. Wysyłanie słowa

No i gra gitara :-)
Tylko czemu przy tamtym kodzie milczy ?.

-----------------------------------------------
EDIT:

Mistrzu jesteś wielki.
DZIAŁA.
PODZIĘKOWANIA WIELKIE !!!

Pozdrowienia
WESOŁYCH ŚWIĄT DLA WSZYSTKICH.

Portret użytkownika EDC

Odp. Wysyłanie słowa

Zobacz zedytowaną poprzednią wiadomośc.
Jakby co dopisz jeszcze u góry

$regfile = "2313def.dat"
$crystal = 16000000
$hwstack=40
$swstack=16
$framesize=32

-

BARTek
Moja strona

Portret użytkownika Piotr

Odp. Wysyłanie słowa

Widziałem
Ja swoją też zedytowałem.
Jeszcze raz wielkie dzięki !!!

Portret użytkownika Adibo

czy to bedzie wysylac kod sterujacy ?

Witaj trochę przerobiłem ten program dodałem to i tamto bo chciałem żeby wolne piny wyposażyć w przyciski przez które
dałoby się wysyłać jakiś kod sterowania do jakiegoś urządzenia. Obawiam się tylko czy trochę się nie napowtarzałem
przy konfigu wejść. program sie kompiluje ale na razie nie mam jak sprawdzić czy wysyła co trzeba.Jak byś mógł spoglądnąć okiem speca.... A no i jeszcze dodalem kody 2,3,4 sterujace miganiem kursora.czy to bedzie ok ew co bys zmienił.
Ja programowalem USB ISP programatorem i tam averdudka nie chula. wiec kombinacje z 2Mhz . ale tylko tak mam 16Mhz faktycznego taktu.... po to mam te napisy na poczatku zeby mi 1 sekunda grała na oko.

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 2000000
 
 
 
'$hwstack = 40
'$swstack = 16
'$framesize = 32
'Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
$baud = 9600
Config Serialin = Buffered , Size = 20
Enable Interrupts
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B10111111
 
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5       'mirley test board
Config Lcd = 16 * 2
Cls
Cursor On Blink
 
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.5 = Input
Config Pinb.6 = Input
Config Pinb.7 = Input
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
Set Portb.6
Set Portb.7
Przycisk1 Alias Pind.2
Przycisk2 Alias Pind.3
Przycisk3 Alias Pind.4
Przycisk4 Alias Pind.5
Przycisk5 Alias Pinb.6
Przycisk6 Alias Pinb.7
 
'Typ wyswietlacza LCD Kmax*Wmax
Const Kmax = 16
Const Wmax = 2
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Znak As Byte
Dim S As String * 1
Dim K As Byte , W As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Cls
Lcd " RS232 terminal"
Locate 2 , 1
Lcd "   by Mirley"
Wait 1
Cls
Lcd "  Adibo version"
Locate 2 , 1
Wait 1
Lcd "   READY... :)"
Wait 1
Cls
K = 1
W = 1
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
If Ischarwaiting() > 0 Then
Inputbin Znak
 
If Znak <> 0 Then
  Select Case Znak
 
    Case 1:
    '****************************  podswietlanie
    Toggle Portd.6
    '****************************
 
    Case 2:
    '***************************  brak kursora
    Cursor Off Noblink
    '***************************
 
    Case 3:
    '***************************  kursor kreska
    Cursor On Noblink
    '***************************
 
    Case 4:
    '***************************  kursor czarny prosokat miga
    Cursor Off Blink
    '***************************
 
   'Case 5....7
 
    Case 8:
    '**************************** kasowanie ostatniego (backspace)
      Decr K
      If K = 0 Then
        K = Kmax
        Decr W
        If W = 0 Then W = Wmax
      End If
      Locate W , K
      Lcd " "
      Locate W , K
    '**************************** kasowanie ostatniego (backspace)
 
    'Case 9....12
 
    Case 13:
    '**************************** enter
      Incr W
      If W > Wmax Then W = 1
      K = 1
      Locate W , K
    '**************************** enter
 
   'Case 14....26
   'kody do wysylania na tx
   ' 21 przycisk 1
   ' 22 przycisk 2
   ' 23 przycisk 3
   ' 24 przycisk 4
   ' 25 przycisk 5
   ' 26 przycisk 6
 
    Case 27:
    '**************************** kasowanie calosci(ESC)
      Cls
      K = 1
      W = 1
      Locate W , K
    '**************************** kasowanie calosci
 
   'Case 28....31
 
    Case 32 To 126:
    '**************************** znaki standardowe
      S = String(1 , Znak)
      Locate W , K
      Lcd S
 
      Incr K
      If K > Kmax Then
        K = 1
        Incr W
        If W > Wmax Then W = 1
      End If
    '**************************** znaki standardowe
 
    'Case 127....160
 
    Case 161 To 244:
    '**************************** locate
    K = Znak And &B00011111
    W = Znak And &B01100000
    Shift W , Right , 5
    If K <= Kmax And W <= Wmax Then
      Locate W , K
    End If
    '**************************** locate
    'locate -> Wysylamy wartosc 1kkwwwww (kk-numer kolumny, wwwww-numer wiersza)
            'gdzie kk = (01....11)  wwwww = (00001.....10100)
 
    'Case 245....255
 
 
  End Select
End If
End If
 
 
Debounce Przycisk1 , 0 , Przyc1 , Sub
Debounce Przycisk2 , 0 , Przyc2 , Sub
Debounce Przycisk3 , 0 , Przyc3 , Sub
Debounce Przycisk4 , 0 , Przyc4 , Sub
Debounce Przycisk5 , 0 , Przyc5 , Sub
Debounce Przycisk6 , 0 , Przyc6 , Sub
Loop
End
'************ Petla glowna Koniec **************
 
Przyc1:
Printbin 21
Cls
Lcd "1"
Waitms 200
Cls
Return
 
Przyc2:
Printbin 22
Cls
Lcd "2"
Waitms 200
Cls
Return
 
Przyc3:
Printbin 23
Cls
Lcd "3"
Waitms 200
Cls
Return
 
Przyc4:
Printbin 24
Cls
Lcd "4"
Waitms 200
Cls
Return
 
Przyc5:
Printbin 25
Cls
Lcd "5"
Waitms 200
Cls
Return
 
Przyc6:
Printbin 26
Cls
Lcd "6"
Waitms 200
Cls
Return
'***************koniec procedur przycisków********

Portret użytkownika mirley

Re: Wysw rs232

1. Konfiguracja pinów ma byc tylko w tych dwóch liniach:

Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B10111111

Jeżeli chcesz zrobić wejścia na porcie d na pinach 2-7 wpisz:
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B00000011 : Portd = &B10111111

Linijki te załatwiaja też ustawianie linii w odpowiedni stan.

Co do obsługi przycisków w kodzie, używając Debounce wstawiasz dodatkowe waity do pętli głównej, pomijając już że obsługa przycisku ma waity i to aż po 200ms.... Do taktowania przycisków wypadało by użyć np timera z przerwaniem co 4-20ms i zmiennej licznika. W obecnym kodzie jeśli przyciski będą trzymane to układ może gubić znaki odbierane po rs232. Chyba że założymy że w momencie wciśnięcia przycisku nic się nie bedzie z kompa wysyłać do ukłądu.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Piotr

Prędkość transmisji od 2400 do 9600

Witam.
Czy da się tutaj zrobić, żeby układ działał na prędkościach od 2400 do 9600 [ nie tak jak teraz tylko 9600 ]
Ewentualnie żeby odczytać prędkość 2400 wystarczy zmienić tylko to : $baud = 9600, czy coś innego odpowiada w programie za prędkość transmisji.

Portret użytkownika mirley

Re: Wysw RS

Zmień $baud = 9600 na 2400 i powinno być ok... zmiana prędkości w czasie działania programu wymagała by grzebania w rejestrach od rs232. Pewnie da się to zrobić ale przeważnie nie jest to do niczego potrzebne

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.