Witam, czas pobawić się z matrycami LED (wpadły mi właśnie w ręce ),mam taki prosty schemacik i program znaleziony w sieci. Program coś tam działa,mogę wyświetlić tekst z przesuwaniem od prawej do lewej,jednak napisany jest jakoś bez składu. ' ***************************************************************************** ' * ' * Title : Dot Matrix Display text.bas ' * Version : 1.0 ' * Last Updated : 30.11.2008 ' * Target Device : ATMEGA 8 @ 20Mhz ' * Author : wwww .avrprojects.net ' * Program code : BASCOM AVR ' * Hardware req. : scrolling sign board, ATTiny Board ' * Description : shows characters on the dot matrix display that are placed in the variable Str_text ' * ' * ' * ' ***************************************************************************** $regfile = "M8def.dat" '$crystal = 16000000 $hwstack = 32 ' default use 32 for the hardware stack $swstack = 32 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte Dim X As Word Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2 Dim Scroll_speed As Byte Declare Sub Show_text Declare Sub Set_text Declare Sub Test_display Config Portb = Output Config Portd = Output Goto Main '**************** 'set text Sub Set_text C = 1 For Digit = 1 To Str_len Str_temp = Mid(str_text , Digit , 1) Char = Asc(str_temp) X = Char * 5 For I = 1 To 5 Reeks(c) = Lookup(x , Text_data) X = X + 1 C = C + 1 Next I Reeks(c) = 0 C = C + 1 Next Digit End Sub Set_string 'show text Sub Show_text ' If Str_len > 4 Then 'For L = 0 To Col_len Do C = 1 For R = 1 To Scroll_speed 'scrolling speed Set Portb.0 Toggle Portb.1 Toggle Portb.1 Toggle Portb.2 Toggle Portb.2 Char = C + L Portd = Reeks(char) Waitms 3 C = C + 1 Reset Portb.0 For I = 1 To 30 '19 Toggle Portb.1 Toggle Portb.1 Toggle Portb.2 Toggle Portb.2 Char = C + L Portd = Reeks(char) Waitms 3 Incr C Next I C = 1 Next R Incr L If L > Col_len Then L = 0 Loop 'Next L Else For L = 0 To Col_len C = 1 For R = 1 To Scroll_speed 'scrolling speed Set Portb.0 Toggle Portb.1 Toggle Portb.1 Toggle Portb.2 Toggle Portb.2 Portd = Reeks(c) Waitms 3 C = C + 1 Reset Portb.0 For X = 1 To 30 '19 Toggle Portb.1 Toggle Portb.1 Toggle Portb.2 Toggle Portb.2 Portd = Reeks(c) Waitms 3 C = C + 1 Next X C = 1 Next R Next L End If End Sub Show_text Sub Test_display Portd = 255 For X = 1 To 30 'liczba wierszy Set Portb.0 Toggle Portb.1 Toggle Portb.1 Toggle Portb.2 Toggle Portb.2 Next X End Sub Test_display '--------------------- Main: Call Test_display Waitms 100 'Str_text = " monday 31 november 2008" Str_text = " * TEST * # $ % & <>?" Str_len = Len(str_text) Col_len = Str_len * 6 Scroll_speed = 8 'tempo przesuwania im mniejsze to szybciej Call Set_text Do Call Show_text Loop End 'end program Text_data: Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 ' Data 0 , 0 , 0 , 0 , 0 'space Data 0 , 0 , 95 , 0 , 0 '! Data 0 , 7 , 0 , 7 , 0 ''' Data 20 , 127 , 20 , 127 , 20 '# Data 36 , 42 , 127 , 42 , 18 '$ Data 39 , 21 , 107 , 84 , 114 '% Data 54 , 73 , 86 , 32 , 80 '& Data 0 , 0 , 11 , 7 , 0 '' Data 0 , 28 , 34 , 65 , 0 ' ( Data 0 , 65 , 34 , 28 , 0 ') Data 42 , 28 , 127 , 28 , 42 '* Data 8 , 8 , 62 , 8 , 8 '+ Data 0 , 88 , 56 , 0 , 0 ', Data 8 , 8 , 8 , 8 , 8 '- Data 0 , 96 , 96 , 0 , 0 '. Data 32 , 16 , 8 , 4 , 2 '/ Data 62 , 81 , 73 , 69 , 62 '0 Data 0 , 66 , 127 , 64 , 0 '1 Data 114 , 73 , 73 , 73 , 70 '2 Data 34 , 65 , 73 , 73 , 54 '3 Data 24 , 20 , 18 , 127 , 16 '4 Data 39 , 69 , 69 , 69 , 57 '5 Data 60 , 74 , 73 , 73 , 48 '6 Data 1 , 113 , 9 , 5 , 3 '7 Data 54 , 73 , 73 , 73 , 54 '8 Data 6 , 73 , 73 , 41 , 30 '9 Data 0 , 54 , 54 , 0 , 0 ': Data 0 , 91 , 59 , 0 , 0 '; Data 8 , 20 , 34 , 65 , 0 '< Data 20 , 20 , 20 , 20 , 20 '= Data 0 , 65 , 34 , 20 , 8 '> Data 2 , 1 , 81 , 9 , 6 '? Data 50 , 73 , 121 , 65 , 62 '@ Data 124 , 18 , 17 , 18 , 124 'A Data 65 , 127 , 73 , 73 , 62 'B Data 62 , 65 , 65 , 65 , 34 'C Data 65 , 127 , 65 , 65 , 62 'D Data 127 , 73 , 73 , 65 , 65 'E Data 127 , 9 , 9 , 1 , 1 'F Data 62 , 65 , 73 , 73 , 58 'G Data 127 , 8 , 8 , 8 , 127 'H Data 0 , 65 , 127 , 65 , 0 'I Data 32 , 64 , 65 , 63 , 1 'J Data 127 , 8 , 20 , 34 , 65 'K Data 127 , 64 , 64 , 64 , 64 'L Data 127 , 2 , 12 , 2 , 127 'M Data 127 , 2 , 4 , 8 , 127 'N Data 62 , 65 , 65 , 65 , 62 'O Data 127 , 9 , 9 , 9 , 6 'P Data 62 , 65 , 65 , 33 , 94 'Q Data 127 , 9 , 25 , 41 , 70 'R Data 38 , 73 , 73 , 73 , 50 'S Data 1 , 1 , 127 , 1 , 1 'T Data 63 , 64 , 64 , 64 , 63 'U Data 7 , 24 , 96 , 24 , 7 'V Data 127 , 32 , 24 , 32 , 127 'W Data 99 , 20 , 8 , 20 , 99 'X Data 3 , 4 , 120 , 4 , 3 'Y Data 97 , 81 , 73 , 69 , 67 'Z Data 0 , 127 , 65 , 65 , 0 '[ Data 2 , 4 , 8 , 16 , 32 '\ Data 0 , 65 , 65 , 127 , 0 '] Data 4 , 2 , 1 , 2 , 4 '^ Data 64 , 64 , 64 , 64 , 64 '_ Data 0 , 0 , 7 , 11 , 0 '' Data 32 , 84 , 84 , 84 , 56 'a Data 127 , 40 , 68 , 68 , 56 'b Data 0 , 56 , 68 , 68 , 68 'c Data 56 , 68 , 68 , 40 , 127 'd Data 56 , 84 , 84 , 84 , 24 'e Data 8 , 126 , 9 , 9 , 2 'f Data 8 , 84 , 84 , 84 , 60 'g Data 127 , 16 , 8 , 8 , 112 'h Data 0 , 68 , 125 , 0 , 0 'i Data 32 , 64 , 68 , 61 , 0 'j Data 0 , 127 , 16 , 40 , 68 'k Data 0 , 65 , 127 , 64 , 0 'l Data 124 , 4 , 120 , 4 , 120 'm Data 124 , 8 , 4 , 4 , 120 'n Data 56 , 68 , 68 , 68 , 56 'o Data 124 , 20 , 20 , 20 , 8 'p Data 8 , 20 , 20 , 20 , 124 'q Data 124 , 8 , 4 , 4 , 8 'r Data 72 , 84 , 84 , 84 , 36 's Data 0 , 4 , 63 , 68 , 68 't Data 60 , 64 , 64 , 32 , 124 'u Data 28 , 32 , 64 , 32 , 28 'v Data 60 , 64 , 60 , 64 , 60 'w Data 68 , 40 , 16 , 40 , 68 'x Data 12 , 80 , 80 , 80 , 60 'y Data 68 , 100 , 84 , 76 , 68 'z Data 0 , 8 , 54 , 65 , 0 '{ Data 0 , 0 , 119 , 0 , 0 '| Data 0 , 65 , 54 , 8 , 0 '} Data 2 , 1 , 2 , 4 , 2 '~ Data 42 , 85 , 42 , 85 , 42 ' Można dodać do ULN2803 74HC259 i zamiast 8 nóżek do sterowania potrzebne będą 3.
|
|||
matryce LED
trochę poprawiłem kod aby był bardziej czytelny
Problem jest jeszcze w słabym i nierównomiernym świeceniu ledów w matrycy, rezystory zmniejszyłem do 47ohm ale nadal do niczego.
Odp. matryce LED
Chyba coś tu pomieszałeś.
Patrząc na to jak działał oryginał. Napisany tak nie po kolei, ale na początku następował skok do Label Main co jest tylko znacznikiem miejsca. Lądujesz więc tam przeskakując trochę kodu. Potem nastepuje test Wyświetlacza. Polega to na wystawieniu stanów wysokich na wszystkich pinach z lewej strony wyswietlacza i przeciągnięciu stanu niskiego przez wszystkie 30 kolumn na dole wyświetlacza.
Potem nastepuje załadowanie wartości dla każdej z liter stringa. Pięć bajtów na jedną literę i zapamietanie ilości liter.
Jak juz to wszystko ma to program zacina się na stałe w pętli Do Loop i juz robi tylko wyswietlanie bardzo szybko.
Teraz pomyśl. Jeśli dla trzech cyfr na multipleksowanie zwykłego 7 segment wyświetlacza to tak naprawdę co 4ms wysyłasz na port tyko jeden Bajt. Pamiętaj - co 4ms 1 bajt na 3 znaki. Teraz musisz wyświetlić 6 znaków i każdy ze znaków to 5 bajtów.
Wszystko się da zrobić ale trzeba zrozumieć działanie.
Jeśli oryginał był na 8MHz a Ty masz 16MHz...
BARTek
Moja strona
matryce LED
Może i trochę namieszane (nie do końca rozumię działanie),pominąłem całkowicie sprawdzanie matrycy, ale tak też działa, przesuwa napis w tempie wybranym w programie.
W orginale pracował na zewnętrznym 20MHz z tym ,że nie można było zadeklarować rezonatora bo wtedy wogle głupiał, natomiast miałem ustawiony procesor na zewnętrzny 16MHz.
Odp. Matryce LED
Zerknij jak ja to rozumiem. Te tablice znaków umieściłem na osobnej kartce i nazwałem znaki_matrycy.bas
Nie trzeba tego wtedy załączać do kodu na stronie.
Nie mam tego na czym potestować więc musisz doprowadzić do takiego stanu że będzie się poprawnie wyświetlać to co chcesz z zadeklarowaną prędkością. Próbuj na 16MHz ale wiedz że one spokojnie chodzą tez na 20MHz a widziałem nawet projekt gdzie była taktowana zewnętrzym generatorem na 5V (bo kwarca już nie pociągnie) który dawał jej 32MHz :D
Pracuję ostatnio nad czymś nowym intensywnie i tak mnie trochę mniej wszędzie :P
Miłego dnia.
BARTek
Moja strona
matryce Led
Coś nie mogę tego ogarnąć, nie działa mi to Twoje.
O co chodzi z
po prostu ja na końcu mam wleić znaki ASCII?, test_data:
czemu pozbyłeś się podprogramu "Main:"
potrzebuję także później timera dla DS-ów od temp. więc te 16MHz lepiej niech będzie.
Odp. matryce LED
Ten listing po prostu trzymaj w tym samym folderze co program a Bascom sam go dołączy. Tak sie pozbywasz czegoś co tylko trzeba przewijać. Tak samo się dołącza pliki dla fontów. Po co na to patrzeć jak może być z boku. O prezentacji kodu na stronie internetowej nie wspomnę. Wystarczy to napisać raz i zmieniać tylko kod.
Nazwij to znaki_matrycy.bas
Pisałem o tym w pierwszym poście. Main to nie jest podprogram. Przyjrzyj się uważnie. Nie ma tam Return ani End Sub. Main to jest znacznik w kodzie. Program po teście wyświetlacza skacze tam tylko raz. Przeanalizuj na spokojnie. Pisze oczywiście o pierwszym kodzie zanim coś zmieniłeś.
BARTek
Moja strona
matryca LED
Trochę dodałem do tego co napisałeś bo nie chciało przewijać tekstu i zmieniłem czasy (nie działało z kwarcem),teraz jest dobrze.
Teraz dorobię Timer do obsługi 3 DS18B20 (każdy na osobnym wejściu).
Jednak jestem nadal w punkcie wyjścia, jak przewinąć napis TEMP_1,(tutaj wartość z DS-a 1),TEMP_2,(wartość z DS-a 2),TEMP_3,(wartość z DS-a 3)
Jak znajdziesz czas to zerknij na
http://www.elektroda.pl/rtvforum/viewtopic.php?p=10750835#10750835
Odp. matryce LED
Myślę że nie jesteś w punkie wyjścia bo teraz wiesz skąd i kiedy wołana jest procedura wyświetlania.
Teraz trzeba by w pętli pomiędzy Start i Koniec podokładać logikę. Na przykład:
Do Str_text wpisać na końcu cztery spacje żeby po przewinięciu całego tekstu wyświetlacz był ciemny.
Po wyswietleniu tekstu program wraca do pętli głównej. Wtedy odczytujesz kolejny czujnik i jego wartośc umieszczasz w Str_text albo jakiej tam chcesz osobnej zmiennej tekstowej. Wołasz Suba który zamienia stringa na kolejne bajty i znów wyświetlasz.
Teraz masz w pętli głównej po prostu kontrolę na tym kiedy i co wyswietlasz. Trzeba tylko zadbać żeby wyświetlacz był ciemny na czas odczytów jesli trzymać sie koncepcji tego sterowania jakie masz teraz. Tak myślę że trzeba się wyrobić w czasie jakby to miało sie dziać w tle. Nie liczyłem ile czasu jest na to wszystko potrzebne. Dlatego już przy multipleksowanych 7segment różne rzeczy robi się "na raty" żeby się nie zatrzymywać.
A jak z wyświetlaniem wyjedziesz tak że jest na chwilkę ciemny to po prostu w pętli sprawdzasz jedną temperature, przerabiasz ją na znaki tym subem Set_text i wyświetlasz.
BARTek
Moja strona
matryca LED
kilka godzin kombinowania i nic.
nie potrafię nawet przeskoczyć od wyświetlania jednego napisu do drugiego a następnie trzeciego, a gdzie jeszcze wcisnąć między nie temperatury.
Może masz jakąś inną prostszą koncepcję na sterowanie matrycą.
Odp. matryce LED
Zobacz. Nie mam tego u siebie ale myślę że moze w ten deseń coś popróbuj.
W razie czego daj znać jak to się zachowuje .
BARTek
Moja strona
matryca LED
To jest właściwy kierunek,działa jak powinno
Na końcu każdego napisu nie potrzeba spacji ,tekst kończy się po zniknięciu ostatniej litery,warunkiem są teksty różnej długości,wtedy pozostałe(te krótsze) trzeba wypełnić na końcu spacjami (tak jak w LCD czyścimy puste pola)bo inaczej dopisze nam to na końcu tekstu.
Jeszcze jak tu wcisnąć 3xDS18B20 na portB.3/4/5 i wyświetlić temperatury? W jaki sposób dokonać konwersji temperatury aby była możliwość wyświetlenia, czy tak samo jak dla LCD?
Odp. matryce LED
Myślę że tak jak dla Lcd z ta róznicą:
Te działania może trzeba będzie rozbić na linie osobne albo rozdzielić dwukropkami.
Odstępy mozna tez robić
Space(ilosc spacji)
albo spróbowaćSpc(ilosc spacji)
bo zajmuje mniej jak trzeba dać ich dużo.W Bascom jest jeszcze dużo funkcji do działania na stringach. Można podmieniac litery, ale myślę że to zalezy co sie potrzebuje i jak długi jest string.
BARTek
Moja strona
matryca LED
mam w pętli gł.
i po zadaniu wartości dla T1/T2/T3 wyświetla wszystko ładnie tylko jeszcze jak dodać DS-y na trzech wejściach portB (3,4,5),za groma nie wychodzi.Mają być osobno,że po zamianie na inne dalej temperatury zostaną na swoich miejscach (bez adresowania).
Odp. matryce LED
To co Ci będzie niepotrzebne wywal. Napisałem tak bo nie wiem co będzie wygodniejsze. Przed kazdym zawołaniem Suba Pomiar_temp wpisz tylko numer pinu do zmiennej Ktory_ds/ MOżna to potem po testach zautomatyzować przez Incr Ktory_ds i If Ktory_ds = 6 then Ktory_ds = 3, tylko teraz to testujesz wiec nie ma problemu wpisać to z palca.
BARTek
Moja strona
matryca LED
Nie chce to czytać temperatury
Jeszcze Bascom woła o zmianę na single
czy DS-y nie powinny mieć dodatkowo 750ms opóźnienia,temperaturę pokazuje cały czas 0,0
przy wpisaniu na stałe wartości
wyświetlanie jest prawidłowe
Odp. matryce LED
Teraz to ma szansę działać ;)
Edytowano : Poprawiłem zauważone błędy (Numer DS`a) i wprowadziłem wspólną stała dla opóźnień. Możesz dobierać u góry w kodzie a zmienia się samo w czterech miejscach. Do tego przeniosłem obliczanie długości do suba Set_text.
BARTek
Moja strona
matryce Led
trochę to kuleje,mierzy tylko temperaturę1,natomiast po przepięciu DS-a na pinb.4/pinb.5 bez wskazań,a tak wogle to pomiar strasznie powolny.
Jutro do tego przysiądę i pokombinuję, dzisiaj już niestety nie mam czasu.
Odp. matryce LED
Zacznij od zerknięcia na poprawiony kod. Niektóre błędy byś mógł znaleźć sam :P
BARTek
Moja strona
matryca LED
dzięki za radę,tak jak napisałem
Nikt nie mówił,że będzie prosto,naprawdę lubię trochę się pobawić,większa satysfakcja i przy okazji nauka.
matryca LED
Witam, postanowiłem do tego dołożyć zegar no i wyszły kolejne problemy.
W chwili obecnej przewija się czas i data, oraz trzy pomiary temperatury.
Teraz moje pytania:
-czy jest możliwość aby czas w postaci GG:MM (bez sekund)był wyświetlany bez przewijania np. przez 10s,a następnie dalej 3 temperatury (przewinięte) i znowu GG:SS itd.
-czy Mr w 74HC595 służy do czyszczenia rejestru, jeżeli tak to gdzie wstawić reset żeby nie trzeba było na końcach tekstów wstawiać spacji by wyrównać długości.
Jak to się da przebrnąć to już zostaną przyciski do ustawiania czasu.
Dołączam działający kod.
pozdrawiam
witam
mam pytanie czy mozna bez problemu 2 razy powiekszyc matryce
Wyłuskanie znaku z tablicy znaku...?
Możecie mi wytłumaczyć po co jest ten fragment:
podczas wypełniania tablicy kolumn?
Jego opis jest taki:
Dla przykładu litera A ma numer ASCII=65. W takim wypadku X=65*5 da nam indeks znaku=325, nie za bardzo rozumiem po co taka operacja? Przecież po odczycie:
w Char już mamy właściwy numer znaku do odczytu za pomocą Reeks(c) = Lookup(x , Text_data).
Po co więc to mnożenie
forum
To forum chyba umarło, także ciężko uzyskać jakąkolwiek odpowiedź.
Mam nadzieję, że kiedyś zostanie reaktywowane, a informacje nie zmarnują się.
Pozdrawiam
www.umpc.pl
forum
To forum chyba umarło, także ciężko uzyskać jakąkolwiek odpowiedź.
Mam nadzieję, że kiedyś zostanie reaktywowane, a informacje nie zmarnują się.
Pozdrawiam
www.umpc.pl
FORUM
To forum chyba umarło, także ciężko uzyskać jakąkolwiek odpowiedź.
Mam nadzieję, że kiedyś zostanie reaktywowane, a informacje nie zmarnują się.
Pozdrawiam
www.umpc.pl
Re: forum chyba umarło
Umarło bo przeżywa tak ogromny atak botów że nikomu pewnie nie chce się tu wchodzić i odhaczać spamu jako przeczytane wiadomości.
Moja strona w powijakach
Re: Strona
Wywaliłem mozliwość dodawania wpisów przez uzytkowników niezarejestrowanych. Zakładanie konta natomiast musi przejśc przez ręczne sprawdzenie danych .... nie ma innego dobrego sposobu aby z drupala w obecnej wersji połączyć z filtrem antyspamowym.... nie bedę walczył za stara stroną... bo nowa Cierpi na tym najbardziej i nie ma czasu na nowe projekty
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.