Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problem z LED, Atmel2051 przez rejestr przesuwny w Bascom

emiki 03 Kwi 2006 23:04 2661 7
  • #1 03 Kwi 2006 23:04
    emiki
    Poziom 10  

    Witam

    Zwracam się z prośbą o pomoc w zaprogramowaniu mikrokontrolera. Sprawa wygląda następująco: Posiadam mikrokontroler AT89C2051 Rejestr przesuwny HEF4094 oraz dekoder SN74LS247N i wyświetlacz Kingbridgh DA08-11EWA. Schemat układu w załączniku. Chce sobie zrobic z tego wyświetlacza stoperek ktory bedzie mi odliczal od 99 do 0 co sekunde. Rejest przesuwny obdługuję następująco:

    Np wyświetlająć 01
    P1.4 = 0
    P1.5 = 0
    P1.7 = 0
    P1.6 = 0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.6=1
    P1.7=1
    P1.7=0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.6=0
    P1.7=1
    P1.7=0

    P1.5=1
    P1.5=0
    P1.4=1
    end

    tyle to wiem. Tylko teraz mam problem ze stowrzeniem programu co pozwoli zobaczyć wszystkie mozliwe kombinacje by mi moc odliczyc od 99 do 0. A sadze ze istnieje jakis prostszy sposob nic 100 razy przepisanie tego co napisalem wyzej. ;p. Dlatego jezeli ktos by dysponowal czasem to bardzo bym prosil o prosty programik (Koniecznie Bascom) ktory by mi odliczyl od 99 do 0 i na koniec wyslal na jeden z wolnych portow stan 1. Z gory dziekuje

    0 7
  • #2 04 Kwi 2006 01:00
    Hornet60
    Poziom 18  

    Witam
    Na wstępie powiem ci że nie da rady zrobić dokładnego stopera na takim zestawie (bascom i wyświetlacz z transmisją szeregową)...
    Jeżeli już musisz mieć ten wyświetlacz podłączony szergowo, a możesz coś zmodyfikować to ja użyłbym jednego układu do konwersji bcd (zaoszczędziło by to miejsca w procku i strat w czasie [długi program])...
    Jeżeli ma pozostać tak jak jest to mogę doradzić ci tylko tyle:

    Dim Dana As Byte
    Dim N As Byte
    Dim N1 As Byte

    Sub Send(dana As Byte)
    P1.4 = 0
    P1.5 = 0
    For N = 0 To 7
    N1 = 7 - N
    P1.6 = Dana.n1
    P1.7 = 1
    P1.7 = 0
    Next R
    P1.5=1
    P1.5=0
    P1.4=1
    End Sub

    Masz tu zdefiniowaną procedurę wysyłania bajtu czyli 2 cyfr na wyświetlacz... reszty ci nie napisze bo widze, że jesteś leń (tak samo jak ja) i nie zajżałeś do helpa (ja zajżałem:D)... podpowiem ci tylko, że możesz użyć komendy Makebcd(), reszte wykombinuj sobie sam ;P
    Pozdrawiam

    0
  • #3 04 Kwi 2006 22:51
    emiki
    Poziom 10  

    Moze jakies propozycje co do ukladu. Procesorek ten sam, a docelowo cztery wyswietlacze musi obsluzyc.(MM:SS)

    0
  • #4 04 Kwi 2006 23:25
    psooya
    Poziom 36  

    Witam ja powiem ze sie da i to bardzo dokłądnie to wykoanć
    Potrzeba ci jeden Timerek generujacy przerwanie co sekunde. i drugi timerek to wyświetlania w multplesie. Choć faktycznie te dwa timery moga zaburzyć nieco prace tego całego układu. podłacz sobie jeden ls247 i 4 ledy w MPXie zajmie ci to jeden port. 4 linie to BCD i 4 to załącznie pokoleji LEDów. dobrze by to było zrobić jednym timerem w którym było by obsługa licznika MM:SS oraz LEDów. wtedy było by to dokłanie odliczane. najgorzej bedzie przeliczyć wartość ładowaną do timera
    Pozdrawiam powiodzenia
    Inna opcja tez może być jest prostrza i tańsza (SORY ZA JAKOSĆ) tez jestem leniem

    0
  • #5 04 Kwi 2006 23:36
    Hornet60
    Poziom 18  

    A musi być wyświetlany aktualny wynik na wyświetlaczu sekund setnych? Jeżeli to ma być stoper to chyba liczy się wartość końcowa, np po naciśnięciu jakiegoś przycisku stopu... Ja zrobiłbym w ten sposób że władowałbym w chwili startu psełdo 88 na wyświetlacz setnych części sekundy i zostawił takie coś do momentu przyciśnięcia stopu, to znacznie oszczędzi czasu... Sekundy możesz puścić aktualnie bo to nie problem i nie powinno zakłucić pracy programu i timingów... Ale jeżeli bardzo chcesz takie zbajerowane wyświetlanie aktualnej liczby sekund setnych to nie ładowałbym już tego rejestru przesuwnego i podłączył dekoder bezpośrednio do wyprowadzeń poroca... najlepiej to kupić jeden wyświetlacz do tego przeznaczony np tu: http://www.allegro.pl/item95205965_uzywane_led_4_cyfry_14_19mm_zegar_red_wa_3szt.html takie rozwiązanie byłoby najlepsze bo jednym kodem bcd załatwiasz cały układ (za 3 wyświetlacze 4,90 - śmieszne pieniądze...)

    0
  • #6 04 Kwi 2006 23:38
    psooya
    Poziom 36  

    fragment kodu obsługi LEDów
    Wyswietl:
    Load Timer0 , 255
    Reset W1
    Reset W2
    Reset W3
    Select Case Numer_wys

    Case 0:
    Portd = Lookup(jednosci , Kody)
    Set W1

    Case 1:
    Portd = Lookup(dziesiatki , Kody)
    If Setki = 0 Then
    If Dziesiatki = 0 Then
    Portd = 255
    End If
    End If
    Set W2

    Case 2:
    Portd = Lookup(setki , Kody)
    If Setki = 0 Then Portd = 255

    Set W3

    End Select
    Incr Numer_wys

    If Numer_wys = 3 Then Numer_wys = 0
    Return



    Kody:
    Data &B10000010 , &B11111010 , &B01000011 , &B01100010 , &B00111010
    Data &B00100110 , &B00000110 , &B11110010 , &B00000010 , &B00100010

    Dodano po 2 [minuty]:

    kody sa ustawine na moją potrzeba wiec jak bedziesz to kminił to musisz sobie obliczyć "kody" ale Help ci pomoze

    0
  • #7 06 Kwi 2006 00:58
    emiki
    Poziom 10  

    To ma byc z dokladnoscia do 1s, takze o wyswietlaniu setnych sekund nie ma nawet rozmowy ;p. Ostatnia cyfra to sekunda i mniej wiecej z taka dokladnoscia to ma byc

    0
  • #8 06 Kwi 2006 01:07
    Hornet60
    Poziom 18  

    emiki napisał:
    Chce sobie zrobic z tego wyświetlacza stoperek ktory bedzie mi odliczal od 99 do 0 co sekunde.


    Aaaa no to wszystko jasne... ja myślałem że chodzi ci o to żeby w ciągu jednej sekundy zliczał od 99 do 0, wyświetlając aktualną liczbę na wyświetlaczu... W takim razie nie ma problemu nawet w bascomie :)

    0