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

Podłączenie dodatkowych wyś. 7-seg. do ZL3AVR

kikada 19 Lut 2009 23:52 3084 12
REKLAMA
  • #1 6176399
    kikada
    Poziom 11  
    Czy wyświetlacze muszą być sterowane tranzystorami czy wystarczą same porty uC :?:
    Problem jest taki : płytka testowa ZL3AVR multipleksowanie działa bez zarzutu , /wszystkie 4 katody/ Foto1
    Podłączenie dodatkowych wyś. 7-seg. do ZL3AVR
    sterowane poprzez tranzystory,
    po podpięciu do drugiego wyświetlacza, wyświetlają się różne rzeczy, tylko nie to co powinno Foto2
    Podłączenie dodatkowych wyś. 7-seg. do ZL3AVR
    Drugi wyświetlacz, podłączony jest bezpośrednio do portów uC

    Gdzie szukać przyczyny :?:
    PS
    Program jest ten sam.

    Poprawiłem tytuł - regulamin p.11
    Poprawiłem treść wiadomości - regulamin p.15
    [zumek]
  • REKLAMA
  • #2 6176471
    Marcin_xx1
    Poziom 21  
    Witam, najprawdopodobniej masz odwrócone multipleksowanie czyli świeca trzy wyświetlacze zamiast jednego, musisz zrobić poprawkę w programie i nie zapomnij dodać oporników bo przeciążasz porty.
  • #3 6176537
    deseng
    Poziom 22  
    Tranzystory muszą być z dwóch powodów:
    - wydajność prądowa. Mogłoby być bez tranzystorów, gdybyś miał wyświetlacze o niskim poborze prądu (<3mA/segment),
    - odwrócenie fazy sygnału sterującego. W oryginale, stan niski na wyjściu portu włącza dany wyświetlacz, a wysoki wygasza. Po usunięciu tranzystorów jest odwrotnie - niski wyłącza, a wysoki włącza. A więc bez zmian w programie jest tak, że masz włączone 3 cyfry, które wyświetlają to samo, a jedna jest wygaszona.
  • REKLAMA
  • #4 6176603
    kikada
    Poziom 11  
    Witam.
    ad 2 myślę iz mam takowe wyswietlacze tzn z małym poborem prądu, na " sztywno podłaczam 2 wyswietlacze po 4 cyfry i procek wyrabia , nawet sie nie grzeje:):)
    ad 1 tez tak mysle ze coś jest odwrócone ale nieza bardzo wiem jak to odwrócić
    oto kod:
    KOD:
     $crystal = 16000000
    $regfile = "m8535.dat"
    
    Config Porta = Output
    Config Pinc.0 = Output                                      'wyswietlacz nr 1
    Config Pinc.1 = Output                                      'wyswietlacz nr 2
    Config Pinc.2 = Output                                      'wyswietlacz nr 3
    Config Pinc.3 = Output                                      'wyswietlacz nr 4
    
    
    Config Timer0 = Timer , Prescale = 1
    
    Declare Sub Pobr_znaku(cyfra As Byte)
    
    
    On Timer0 Mult_wysw
    
    Dim A As Byte ,
    Dim B As Byte ,
    Dim C As Byte ,
    Dim D As Byte ,
    
    
    Dim Nr_wysw As Byte
    
    
    
    Dim Wart As Byte
    
    W1 Alias Portc.0
    W2 Alias Portc.1
    W3 Alias Portc.2
    W4 Alias Portc.3
    
    
    Enable Interrupts
    Enable Timer0
    
    Load Timer0 , 125
    
    Do
    A = 4
    B = 6
    C = 9
    D = 1
    
    Wait 5
    
    Wart = 35
    Wart = Makebcd(wart)
    
    
    A = Wart And &B00001111
    Shift Wart , Right , 4
    B = Wart
    Wait 5
    Loop
    
    End
    
    Sub Pobr_znaku(cyfra As Byte)
    
    If Cyfra < 10 Then
    Porta = Lookup(cyfra , Kody7seg)
    Else
    Porta = 0
    End If
    End Sub
    
    Mult_wysw:
    Load Timer0 , 125
    
    
    Set W1
    Set W2
    Set W3
    Set W4
    
    Select Case Nr_wysw
    
    Case 0:
    Call Pobr_znaku(a)
    Reset W1
    
    Case 1:
    Call Pobr_znaku(b)
    Reset W2
    
    Case 2:
    Call Pobr_znaku(c)
    Reset W3
    
    Case 3:
    Call Pobr_znaku(d)
    Reset W4
    
    
    End Select
    
    Incr Nr_wysw
    If Nr_wysw = 4 Then
    Nr_wysw = 0
    
    End If
    
    Return
    
    
    Kody7seg:
    
    Data 19 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144


    kod jest wg ksiązki M.Wiązani po moich "poprawkach"

    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • #5 6176645
    Marcin_xx1
    Poziom 21  
    nie znam bascoma wiec ci nie poprawie ale skoro masz książke to ten kod jest opisany zprawdz która część odpowiada za sygnały na portach do multipleksowania i po prostu je odwróć (zaneguj).
  • REKLAMA
  • #6 6176763
    deseng
    Poziom 22  
    Też nie znam Bascoma, ale patrząc na program i trochę zgadując - zamień miejscami wszystkie instrukcje Set i Reset.
  • #7 6177070
    _Robak_
    Poziom 33  
    moze lepiej sprawdzic ile pradu bierze wyswietlacz he ? ;) Moja atmega raz dostala 7V i tez dzialala ale lpt w kompie juz nie przezyl ;)
  • #8 6179101
    kikada
    Poziom 11  
    działa .odwrócenie Set i Reset zadziałało :):):)

    ad Robak
    odpowiedz nie na temat !!!!!

    Dodano po 3 [godziny] 44 [minuty]:

    witam !
    zmodyfikowałem program o dodatkowe 4 wyświetlacze, ale pojawił sie dziwny błąd .
    ma byc wyświetlona liczba 28011964 i jest.. ale po chwili wyświetla się
    28011900 która po chwili sie zmienia na prawidłową

    gdzie szukac błędu??????

    ps w powyższym programie jest zmienna WART = 35 , nie rozumiem skoro liczby do wyświetlenia są pobierane z tablicy kody_cyfr
  • #10 6185961
    dawid512
    Poziom 32  
    Cytat:
    Ps. Tu wg mnie powinno być nie :
    Config Pinc.0 = Output
    tylko:
    Config PORTC.0 = Output itd


    Jeśli chodzi o Config to bascom traktuje tak samo pin jak i port. Najlepiej jest operować na DDRn.
  • REKLAMA
  • #11 6186044
    ZbeeGin
    Poziom 39  
    Najlepiej jednak zapamiętać, że:
    - przy konfiguracji jednej końcówki (pinu) piszemy CONFIG PINx.y = INPUT | OUTPUT
    - przy konnfiguracji całego portu (wielu pinów) piszemy CONFIG PORTx = INPUT | OUTPUT | maska_bitowa

    I jest to dość logiczne rozwiązanie, gdyż nazwy się same kojarzą.
  • #12 6195782
    kikada
    Poziom 11  
    Do moderatora : jak wstawić kod w znaczniki "Code". [c_p]??? w które miejsce należy skopiować listing ?

    Ad1: zmiennej Wart , wywaliłem ją , działa :):):) dzięki psoova

    Ad2 : co do konfiguracji pinów i portów korzystam z pomocy książki M. Wiązani i manuala bascoma w tłumaczeniu ZbeeGin

    jeśli nie ma dla was tajemnic, zaproponujcie jak wyświetlać za pomoca dwóch zmiennych R "red" i G "green" zamiast ośmiu "A - H"
    przeszukałem elektrodę ale to co znalazłem nie potrafię jeszcze zaaplikować do mojego układu

    zdjęcie nr3
    Podłączenie dodatkowych wyś. 7-seg. do ZL3AVR

    listing na 8 wyświetlaczy:

    "Code". [ '-------------------------------------------------------------
    ' M8535.BAS
    ' sterowanie multipleks wyswietlacza
    '-------------------------------------------------------------



    $crystal = 16000000
    $regfile = "m8535.dat"




    Config Porta = Output
    Config Pinc.0 = Output 'wyswietlacz nr 1
    Config Pinc.1 = Output 'wyswietlacz nr 2
    Config Pinc.2 = Output 'wyswietlacz nr 3
    Config Pinc.3 = Output 'wyswietlacz nr 4
    Config Pinc.4 = Output 'wyswietlacz nr 5
    Config Pinc.5 = Output 'wyswietlacz nr 6
    Config Pinc.6 = Output 'wyswietlacz nr 7
    Config Pinc.7 = Output 'wyświetlacz nr 8

    Config Timer0 = Timer , Prescale = 8

    Declare Sub Pobr_znaku(cyfra As Byte)

    On Timer0 Mult_wysw

    Dim A As Byte ,
    Dim B As Byte ,
    Dim C As Byte ,
    Dim D As Byte ,
    Dim E As Byte
    Dim F As Byte ,
    Dim G As Byte ,
    Dim H As Byte

    Dim Nr_wysw As Byte



    Dim Wart As Byte

    W1 Alias Portc.0
    W2 Alias Portc.1
    W3 Alias Portc.2
    W4 Alias Portc.3
    W5 Alias Portc.4
    W6 Alias Portc.5
    W7 Alias Portc.6
    W8 Alias Portc.7

    Enable Interrupts
    Enable Timer0

    Load Timer0 , 1

    Do
    A = 4
    B = 6
    C = 9
    D = 1
    E = 1
    F = 0
    G = 8
    H = 2







    Loop

    End

    Sub Pobr_znaku(cyfra As Byte)

    If Cyfra < 10 Then
    Porta = Lookup(cyfra , Kody7seg)
    Else
    Porta = 0
    End If
    End Sub

    Mult_wysw:
    Load Timer0 , 125


    Reset W1
    Reset W2
    Reset W3
    Reset W4
    Reset W5
    Reset W6
    Reset W7
    Reset W8

    Select Case Nr_wysw

    Case 0:
    Call Pobr_znaku(a)
    Set W1

    Case 1:
    Call Pobr_znaku(b)
    Set W2

    Case 2:
    Call Pobr_znaku(c)
    Set W3

    Case 3:
    Call Pobr_znaku(d)
    Set W4

    Case 4:
    Call Pobr_znaku(e)
    Set W5

    Case 5:
    Call Pobr_znaku(f)
    Set W6

    Case 6:
    Call Pobr_znaku(g)
    Set W7

    Case 7:
    Call Pobr_znaku(h)
    Set W8



    End Select

    Incr Nr_wysw
    If Nr_wysw = 8 Then
    Nr_wysw = 0

    End If

    Return


    Kody7seg:

    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144p]
  • #13 6196334
    psooya
    Poziom 38  
    Dwie tablice:
    dim R(3) as byte
    dim G(3) as byte
    Tu będziesz miał wartości do wyświetlenia. Chyba oto chodzi.
    Pozdrawiam
    Ps. tylko tu nie pamiętam czy dim zmienna(x) to x = ilość elementów tablicy a adresuje się od 0 do 3 (dim R(4) as byte ) czy pisze sie 3 elementy licząc od 0 do 3 (dim R(3) as byte i adresuje tak samo czyli R(0), R(1)...)
    Wg mnie najsensowniej jest jednak podawać ilość elementów a adresować od 0 czyli dim R(4) as byte. Niech mnie ktoś tu poprawi albo kolega zaglądnie do książki czy helpa baskoma bo ja go nie posiadam a pisze z pamięci.
REKLAMA