logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMega8][ASM]Sterowanie matrycą 7x8led

POTER 27 Cze 2008 21:24 2655 23
REKLAMA
  • #1 5291971
    POTER
    Poziom 13  
    Witam wszystkich od kilku dni próbuję napisać program do obsługi małej matrycy złożonej z diod led które połączyłem multipleksowo ,, kolumny jaki i wiersze są sterowane wysokimi stanami,,, udało mi się wyświetlić napis "ok" teraz kieruję do bardziej zaawansowanych kolegów pytanie jak posługiwać sie tablicą ascii ?? nie mogę tego załapać

    chciałbym napisać program abym mógł wyświetlać tekst ( wiem ze matryca 7x8 to nie jest cudo ale to jest początek mojego pisania asm) aby tekst sie mógł przesuwać...

    za odpowiedzi wielkie dzięki :D:D

    Poprawiłem tytuł.
    Proszę poprawić treść - Zdania zaczynamy od wielkiej litery , i.t.d.
    [zumek]
  • REKLAMA
  • #2 5292284
    Balu
    Poziom 38  
    No świetnie i gdzie masz problem?
    Deklarujesz tablicę we flashu trzyamjąca "wzorce" fontów.
    i potem masz stringa w ramie, adresujesz
    
    ldi zl, low(wzorzec<<1)
    ldi zh, high(wzorzec<<1)
    
    adiw Z, numer_literki_w_tablicy
    lpm
    

    i już masz odczytany bajt z tablicy

    Oczywiście to jest przykład do wyśw. 7-seg, do matrixa potrzebujesz odpowiednio więcej byteów odczytać:)

    W ogóle to niewdzięczny procek do takiej macierzy :)
    Tzn do tak małej ok, ale jak większa to niewdzięczny:)

    Ja to robiłem tak, że miałem w ramie całą macierz i wywalałem z ramu na latche (ale moja tablica była 2x10x8x8led) z płynnym przesuwaniem:)

    I miałem właśnie tyle ramu zajętego przez "bufor" wyśw. A przy ew. przesuwaniu odświeżałem ram przesuwając odpowiednio co potrzeba:) i doczytywałem kolejną literkę z flasha:)
  • #3 5292461
    POTER
    Poziom 13  
    Aha no oki będę próbował .. a teraz jeszcze tak sobie myślę jak zrealizować przesuwanie bo dzięki poleceniu rol, ror można przesuwać dane w rejestrach czy za pomocą tej funkcji udało by sie zrobić przesuwanie tekstu ?? i każdy rejestr przesunąć w lewo i dalej pobierać dane i na wyjście


    xxxxxxx p r16 0b00000001 czy tak można??
    xxxxxxx o r17 itd....
    xxxxxxx r r18
    xxxxxxx t r19
    xxxxxxx ; r20
    xxxxxxx d r21
    xxxxxxx ; r22

    port c wyjścia sterowanie kolumn

    chyba to odpada co ???
  • REKLAMA
  • #5 5293226
    POTER
    Poziom 13  
    Ja tyko tak sobie myślę może to jest źle.. to tak mam ten wyświetlacz i portem np c mam sterowanie kolumn i do tego 1 rejestr można wykorzystać ( zasada taka jak w 7 segmentowych, kolumn ,na i wyświetlenie , następna i wyświetlenie itd) no a wiersze to myślałem dać po 1 rejestrze do nich ładować w jakiś ( jeszcze nie wiem jak) sposób,, i później wczytywać na 1 kolumnę od lewej najmłodsze pozycje z rejesetru następna kolumna to z wyższej pozycji rejestru itd a przesuwanie dac za pomoca poleceń ror i rol nie wiem czy dobrze to wytłumaczyłem jak cos nie tak no narysuje nie wiem czy takie rozwiaząnie jest dobre może jest jakiś łatwiejszy sposób ???
  • #7 5293275
    POTER
    Poziom 13  
    No wiem to jest wymyślone prze zemnie bo nigdzie nie czytałem o tym wiec tak trochę ciężko mi to opisać... no dobrze to chyba lepiej będzie po twojemu teraz mam pytanie jak umieścić tablicę ascii w pamięci ( w jakiej formie ona ma być) bo ja to tak rozumiem

    konfiguracja itd
    odczyt napisanego tekstu i analiza liter lub cyfr
    odczyt kodu cyfry z pamięci ( tablica ascii)
    wyświetlenie

    czy tak ?? czy coś źle może jakiś przykład ??? miałby kolega ( ja dopiero zaczynam wiec za dużo nie wyczaruję narazie)

    DZIĘKI ZA PODPOWIEDZI POZDRO:D:D
  • #8 5293345
    Balu
    Poziom 38  
    No popatrz deklarujesz Sobie tablicę i w niej trzymasz cały alfabet
    powiedzmy, że jeden znak to 8 bajtów.
    No to go.
    Wpisujesz Sobie adres tablicy do Z,
    potem masz w jakim rej. kod ascii literki, no to najprościej odejmij od niego 'a' czy 'A' jakie tam te literki chcesz i następie masz już sam "numer " lliterki w tablicy, teraz jeszcze pamiętaj, że numer*8 (PRZESUWANIE) to jest twój konkretny znak i tyle musisz dodać do Z.
    Przerzucasz to do ramu a potem z ramu czytasz
    A jak ta tablica powinna wyglądać?
    np. tak:
    
    ZNaki:
    .db
    00000000,
    00000010,
    00000110,
    00000010,
    00000010,
    00000010,
    00000111,
    00000000
    
  • #9 5302996
    POTER
    Poziom 13  
    Ok , ta tablica w przykładzie jest dla cyfry 1 ??? i tak wpisuję dla każdej cyfry lub litery których chcę używać w moim programie ?? dobrze rozumiem ??? 2 moje pytanko to: czy każda taka tablica ( część tablicy jak na przykładzie) jest jakoś podpisana ??

    ze np mam tekst i po kolei program pisane litery np ABC to wczytuje A i z tablicy pobiera dane potem B itd ?? czy coś po kręciłem ??

    POZDRAWIAM :D:D
  • REKLAMA
  • #10 5303767
    Balu
    Poziom 38  
    LOL.
    No masz podpisany początek tablicy.
    Masz cały alfabet we flashu, wiesz że każda litera zajmuje 8 bajtów, więc to co chcesz wpisać *numer litery* mnożysz razy 8 i masz:)
  • #11 5314089
    POTER
    Poziom 13  
    Sorki ale nie czaje z tym dodawaniem, odejmowaniem i mnożeniem, tablice kumam i to ze do z adres sie podaje a co dalej ?? co od czego muszę odjąć bo nie mogę tego sobie wyobrazić jak to leci na komórkach pamięci :(:(:(

    :cry:
  • #12 5315150
    Balu
    Poziom 38  
    Załóżmy, że używasz tylko małych liter.

    No to go:
    masz w r16 literke
    (Mogę nie pamiętać mnemoników za co przepraszam :) -domyślisz się raczej:))
    No to
    subi r16, 'a' ;masz numer literki
    teraz mnożysz to x8 żeby skoczyć pod odpowiedni adres
    lsl r16
    lsl r16
    lsl r16;mmasz pomnozone;) no i teraz tym co masz w rej. adresujesz flash... zwróc uwagę, że to jest przykład 8 bitowy (w jednym rejestrze adres, a powinien być w dwóch : - wiecie co macie robić?:) )
  • #13 5315804
    POTER
    Poziom 13  
    ja to jakoś inaczej widzę nie wiem czemu

    mam taka matryce X000XX
    XX0XXX
    XX0XXX
    XX0XXX
    XX0XXX
    X000XX LITERKA I

    dla niej wzór w tablicy wygląda tak : I .db 0,33,63,33,0,0
    adres 1 literki w tablicy daje do z ( początek tablicy żeby było wiadomo od
    kąd ma zacząć) no i przypadnie ze jest to adres komórki w programie
    np 40 to cała ta litera zajmuje od 80 do 86 czyli muszę dodawać 6 do każdej literki określonej cyfra z tablicy ascii tak ?? no nie czaje czemu mnożysz np u ciebie 8 a u mnie 6
    no i jeżeli cyfra zajmuje 6 bajtów to licze początek tablicy to 80 A ma numer 65 to od 80-65= 15 teraz chcę b czyli 8 bajtów za adresem A sie zaczyna B no i 15*8 =120 a jak do 80 dodam 8 jest 88:(:(:( jeżeli możesz to pokaż to na tej tablicy mojej adres zaczyna sie np od 80
  • REKLAMA
  • #15 5315830
    POTER
    Poziom 13  
    nie no teraz to już całkiem mi sie pomieszało jak to leci dla zwykłego 2 wymiarowego jak możesz to np dla adresu początkowego tablicy 80

    w ascii:
    A=65
    B=66
    C=67


    no i tak jak u mnie literaz zajmuje 6 bajtów to jak to leci ??
  • Pomocny post
    #16 5315834
    Balu
    Poziom 38  
    No jak 6 bajtów to tak jak pisałeś :)
    ldi r16, 'C'
    subi r16, 'a' ; masz numerek literki w macierzy
    teraz mul *nie pamiętam składni* r16, LICZBA_WIERSZY
    (mul sux:P)
    No i jesteś na początku tej literki w flashu teraz adres do Z i lpm;)
  • #17 5315879
    POTER
    Poziom 13  
    Już wiem co i jak a teraz mam takie pytanie w jaki sposób odczytywać z tekstu np " ALA" ze to ma iść po kolei do adresu A tu tez odnośnik do adresu L odnośnik... A ??



    P.S ten matriX to 3 wymiary tak jak by kostkę rubika zrobić z ledów pełną w środku ??


    WIELKIE DZIĘKI
  • #18 5315895
    Balu
    Poziom 38  
    Nie rozumiem, masz gdzieś stringa we flashu i po kolei robisz petle az nastepny znak odzytany z flasha to 0x00 lub 0xff (lepiej to pierwsze) i wtedy koniec pętli...

    Matrix = macierz = 6 wierszy (adresy) 8 kolumn (bity)
    Tobie chodzi o borg 3d?
  • #19 5317492
    POTER
    Poziom 13  
    Chodziło o borga3d... no wiem ze jak mam zaczęte pobieranie literki ( po kolei jej części sobie lecą) to na koniec najlepiej dać taką liczbę która nie jest używana w literkach np 0x00 i po niej porównywać rejestr wartości pobieranych z tablicy i jak trafi na liczbę końca czyli to 0x00 to koniec zczytywania np literki A

    teraz chodzi mi o to w jaki sposób mam wywoływać program zczytywania
    czyta z tablicy "A" koniec czytania | tutaj początek czytania L

    jak zapisać zdanie żeby program jego części sobie wywoływał i wyświetlał ??
  • #21 5319751
    POTER
    Poziom 13  
    Aha no to da rade za pomocą skoków?? do podprogramu ??

    rcall wyświetlA
    nop
    rcall wyświetlL
    nop
    rcal wyświetlA


    ?? czy tak??
  • #22 5319760
    Balu
    Poziom 38  
    Nooo tak:> Coś w ten deseń tylko nie skok dla każdej literki inny, tylko przed skokiem wstaw parametr do jakiegoś rejestru / pamięci:) parametr - litekra:)
    A potem go wykorzystaj:)

    Dodano po 22 [sekundy]:

    I po co te nopy?
  • #23 5322068
    POTER
    Poziom 13  
    W sumie to nie potrzebne ale tak dla dystansu.... Oki DZIEKI Wielkie jak coś to zapytam :D
  • #24 5619396
    furch
    Poziom 10  
    Tu masz sterowanie jednej matrycy 5X7 z przesuwaniem, projekt w C winavr. Oparty o tiny2313 tekst do wyswietlenia deklaruje sie w pamieci eeprom. Program posiada definicje znaków a-z,A-Z,0-9 i kilka innych.
    Schematu połączeń nie kreśliłem.
    Załączniki:
REKLAMA