moja pierwsza matrycka5x5


witam jestem nowy ,świeżak:)))
mama takie pytanie ,podjąłem się zrobienia na razie takiej małej matrycki
to jest 5x5 . ta na początek
doszedłem do tego jak np.wyświetlić literkę,znaczek itp.
ale problem w tym że chciałbym mieć możliwość zmiany
wyświetlanych znaków , to jest ręcznie lub w okresie jakiegoś czasu
poniżej zamieszczam kod.
proszę o jakąś poradę, jestem nowy tak jak mówiłem ,znalazłem tą stronkę
i bardzo mi odpowiada :)) jest super;)
proszę o jakieś pierwsze odpowiedzi
dziękuję serdecznie
ten kod wyświetla akurat znak " X "

$regfile = "m8def.dat"
$crystal = 8000000
 
Config Portd = Output : Portd = 16
Config Portc = Output : Portc = 0
 
Dim C As Byte : C = 0
Dim A As Byte : A = 0
 
Do
Portc = 0
 
Incr A
 
If A = 5 Then A = 0
Portc = Lookup(a , Slupki)
 
Incr C
If C = 5 Then C = 0
Portd = Lookup(c , Tabela)
 
Waitms 4
 
Loop : End
 
Slupki:
Data 1 , 2 , 4 , 8 , 16
 
Tabela:
Data 14 , 21 , 27 , 21 , 14




Portret użytkownika mirley

Re: Program matryca

Jeśli jesteś nowy to: Kod umieszcza się w znaczniku do kodów, w przypadku bascoma jest to przycisk "bas", a jak chcesz zmienić dział w którym napisałeś to przy okazji edycji postu powinno się to dac zrobić.

Co do programu to jest wporządku ale tylko na początek. Modyfikacje które powinieneś wykonać to:
1. Uruchmienie timera z przerwaniem co 4ms aby pozbyc się waitms
2. Nie potrzebujesz w ogóle zmiennej C, wystarczy że dwie tabelki będą miec lookup według zmiennej A

Incr A
If A = 5 Then A = 0
Portc = Lookup(a , Slupki)
Portd = Lookup(a , Tabela)

3. Zamist tabelki "Tabela" ja dałbym zmienna tablicową 5 bajtów i potem zajął się Rs232, którym przesyłał te 5 bajtów odpowiadających za znak

-

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 evil0

matrycka

dzięki wielki kolego:)
następnym razem zastosuje się do wskazówek odnośnie wpisywania kodu.
ale mam jeszcze jedno pytanko ,o nie bardzo rozumiem tego z tym timerem
tzn nie bardzo wiem jaką ma mieć wartośc jak go obliczyć ,wiem że trzeba jaąś wartość wpisać(nie uważałem na tej lekcji))
napisałeś też o dodaniu zmiennej tablicowej , nie bardzo kumam , a co do Rs232 to jeszcze trochę muszę się podszkolić:))
czy istnieje jaki inny sposób na ten mój wynalazek:))
jakieś obejście na razie tego sposobu na Rs232.
jak widać mam w tej chwili trochę ograniczone wiadomości:))
dzięki za te cenne porady i wiadomości ,postaram się nie nudzić za barzo swoimi pomysłami
pozdrawiam serdecznie
evil0

Portret użytkownika mirley

Re: Timer

Timer jest w miare prosty:

Konfiguracja (na początku programu najlepiej przed deklaracją zmiennych) timera 0 z preskalerem 256 i procedurą obsługi przerwania Prztimer0

Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0

procedura obsługi przerwania, na końcu programu, poza pętlą do loop. Bedzie sie wykonywała z czestotliwością 8000000(kwarc)/256(preskaler)/250(ilość impulsów timera, bo na początku wpisujemy 6 a liczy on do 256) = 125Hz. Procedura wykona się co 8ms, potem możesz sobie dzielniki na zmiennej wykonać

Prztimer0:
  timer0 = 6
  'rozkazy tutaj będa sie wykonywac co 8ms
 
return

Zamiast tabeli na końcu programu która jest stałą możesz dać na początku

Dim tab(5) as byte

a pote do każdej z komórek możesz przypisac wartość tak:

tab(1)= .....
tab(2)= ....
'itd

a wypisywanie zmodyfikujesz:

Incr A
If A = 5 Then A = 0
Portc = Lookup(a , Slupki)
Portd = tab(a)

plus jest taki że w każdym momencie programu możesz zmienić zawartość tablicy tab a znak sie automatycznie zmieni. Więc jak oprogramujesz rs232, a jest to banalne w bascomie (poczytaj o poleceniu inkey, ischarwaiting itp). To wysylając z komputera 5 wartości i zapisując je do Tab uzyskasz możliwość sterowania wskazaniem z kompa

-

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 evil0

timer

ok . łapie już ,ale jeszcze jedno
mam rozumieć że pętla

do:loop

bedzie pusta tak ?
wszyskie te polecenia wykonywane są w przerwaniu timera0 ,tak?
i jak rozumiem zmienna tab(5) może mieścić tylko 5 wartości czyli przykładowo 5 różnych znaków
gdzie umieścić te polecenie
tab(1)..
tab(2)...

itd
przepraszam ciężko ze mną trochę
podziwiam twoją cierpliwość i wiedzę
masz tu ze mna mękę
jeszcze raz wielkie Dziękuję
pozdrawiam

Portret użytkownika mirley

Re: timer

$regfile = "m8def.dat"
$crystal = 8000000
 
Config Portd = Output : Portd = 16
Config Portc = Output : Portc = 0
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Dim C As Byte : C = 0
Dim A As Byte : A = 0
Dim fl_8ms as bit
Dim tab(5) as byte
 
'początkowa wartośc tablicy
tab(1) = 14 
tab(2) = 21
tab(3) = 27
tab(4) = 21
tab(5) = 14
 
Do
 
'tutaj potem wylądyje obsługa rs232 lub czegos podobnego
 
if fl_8ms = 1 then
  fl_8ms = 0
 
  Incr A
  If A = 5 Then A = 0
  Portc = Lookup(a , Slupki)
  Portd = tab(a)
 
end if
 
Loop : End
 
Prztimer0:
  timer0 = 6
  'rozkazy tutaj będa sie wykonywac co 8ms
  set fl_8ms
  'tylko ustawiamy zmienną flagę od której zalezy do loop
return
 
Slupki:
Data 1 , 2 , 4 , 8 , 16

Popatrz na ten program, cała zmienna tablicowa tab (5 bajtów), przechowuje cały twój jeden znak wyświetlany na matrycy. Wystarczy że podczas odbierania danych np z rs232 ustawisz sobie wartości w tej tablicy a zmieni sie automatycznie znak wyświetlany.

Co do przerwania to akurat nic by się nie stało jakby multipleksowanie było bezpośrednio w przerwaniu, jednak pamiętaj na przyszłość aby obsługa timera miala mozliwe najprostszy kod. Pamiętaj że się on czesto wykonuje i może zapchac procesor jesli przerwania występują częściej niz potrzeba czasu na ich wykonanie

-

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 evil0

timer

Dziękuję bardzo ,biore się popołudniu do roboty
dam znać jak i co poszło:)
pozdrawiam.

Portret użytkownika evil0

timer

mirley.
chodzi o t że te znaki są pojedyńczo wyświetlane
i to są pojedyńcze bity
chodzi o to żeby to było załóżmy 5 znaków
ewentualnie liter
i tak jak poprzednio pisałem , czy tylko 5 zmiennych może być wpisanych czy więcej
to jest przykładowo zmienna 14 potem 27 wyświetli kolejno pojedyńczo kawałek znaku
nie cały (w tym przypadku znak X )
o to chodzi:))

Portret użytkownika mirley

Re: Matryca

Masz matrycę skladającą się z 5 wierszy, lub kolum, jak tam wolisz bo ie wiem jak dokładnie na schemacie podłączyłeś. W każdym bądź razie aby wyświetlić jeden znak potrzebujesz 5 zmiennych bajtowych z których każda określa jeden wiersz lub jedną kolumną (zależy od schematu). Żeby wyswietlać 2 znaki to trzeba by było miec 10 zmiennych, ale to bez sensu. Lepiej to zakodować ale nad tym trzeba pomysleć

-

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 evil0

matryca

dzięki kolego.
narazie daję spokój sobie z tym zadaniem
to mnie przerasta!!
rzeczywiście trzeba pomyśleć:)):))
pozdrawiam

Portret użytkownika evil0

matryca :(

witam Mirku.
wstyd powracać do tematu ale odnośnie tej a'la matrycki
myślałem o czymś takim ,żeby (nie wiem czy się da)
można było zmienić coś na tym wyświetlaczu
za pomocą przycisku,ustawić jakiś bit do obsługi przycisku
i za jego pomocą zmieniać dane wysyłane z portu na matrycke
tylko jak to ustawić , jak podać znak w całości?
nie mam już pomysłu a wiedzą jestem jeszcze słaby.
ktoś powiedział"żeby pisać,trzeba pisać"
nie poddaje się i w miarę wolnej chwili trenuję:)
odnośnie wątku to co o tym myślisz?
czy jest to możliwe,myślałem o czymś w rodzaju kostki do gry lub co na podobe
z góry dzięki za zainteresowanie
i pozdrawiam

Portret użytkownika mirley

Re: Przycisk

Na początek zmień konfiguracje pinów, zamiast same output trzeba gdzieś dać wejście:

Config Portd = &B00011111 : Portd = 16 ' piny d5-d.7 jako wejścia
Config Portc = &B11111111 : Portc = 0   

Kolejne cyfry w wartości &B11111111 odpowiadają za funkcje kolejnych pinów 7.....0, wstawienie 0 zamiast 1 w liczbie &B11111111 powoduje ustawienie danego pinu za wejście.

W fragmencie widocznym poniżej dopisujesz przycisk i modyfikujesz linijkę z port D:

if fl_8ms = 1 then
  fl_8ms = 0
 
  Incr A
  If A = 5 Then A = 0
  Portc = Lookup(a , Slupki)
  Portd = tab(a) or &B11100000
 
  if pind.7 = 0 then    'tu musisz sobie wpisac pin, powinien on byc na pocztku ustawiony jako wejście
    incr licz_sw    'nowa zmienna typu byte
    if licz_sw = 15 then
      licz_sw = 0
 
      'tutaj to co ma sie stać po wcisnięciu przycisku
 
    end if
  else
    licz_sw = 0
  end if
 
end if

Najprostsza kostka do gry:

w miejscu reakcji przycisku napiszesz coś podobnego ja niżej:

n = rnd(5)
select case n
  case 0:  
    tab(1) = 14 
    tab(2) = 21
    tab(3) = 27
    tab(4) = 21
    tab(5) = 14
  case 1:  
    tab(1) = 14 
    tab(2) = 21
    tab(3) = 27
    tab(4) = 21
    tab(5) = 14
  case 2:  
    tab(1) = 14 
    tab(2) = 21
    tab(3) = 27
    tab(4) = 21
    tab(5) = 14
  case 3:  
    tab(1) = 14 
    tab(2) = 21
    tab(3) = 27
    tab(4) = 21
    tab(5) = 14
  case 4:  
    tab(1) = 14 
    tab(2) = 21
    tab(3) = 27
    tab(4) = 21
    tab(5) = 14
  case 5:  
    tab(1) = 14 
    tab(2) = 21
    tab(3) = 27
    tab(4) = 21
    tab(5) = 14
end select

Wartośći w kolejnych case musisz sobie zmienic tak żeby wyświetlać odpowiednie znaki na kostce

-

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 gosc

matrycka

dziękuję za wyczerpującą odpowiedz
wpisałem wszystkie zmiany w/g powyższego przykładu
DZIAŁA, wszystko super. dalej myślę sam
dzieki raz jeszcze
pozdrawiam