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

Sterowanie wświetlaczem 7-segmenowym Atmegą8

ElektroShock 01 Lut 2011 13:30 1326 14
REKLAMA
  • #1 9086932
    ElektroShock
    Poziom 12  
    Witam
    Od niedawna zajmuje się mikro-kontrolerami AVR.Udało mi się napisać kilka prostych programów (sterowanie diodami ,przetwornik C/A itp.) Teraz chciałbym zrobić zegar cyfrowy a w tym celu postanowiłem najpierw zaznajomić się z zasadą pisania prostszych programów sterującymi pojedynczym segmentem.Chciał bym aby ktoś sprawdził program ,który za pomocą którego ma odbywać się odliczanie od 0 do 9.
    Wyświetlacz to wspólna katoda projekt wzorowałem na książce Marcina Wiązania "Programowanie mikro-kontrolerów w języku BASCOM" Jest tam opisany układ ze wspólna anodą więc zmodyfikowałem program i schemat aby segmenty były sterowanie stanem niskim.Oto program:

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portd = Output
    
    Declare Sub Wysw7seg(byval Cyfra As Byte)
    
    Dim I As Byte
    
    Dim Kod_cyf As Bye
    
    Kropka Alias Portd.7
    
    Do
    
    Toggle Kropka
    
    For I = 0 To 9
    
    Call Wysw7seg(i)
    
    Waitms 15
    
    Next I
    Loop
    End
    
    Sub Wysw7seg(byval Cyfra As Byte)
    If Cyfra < 10 Then
    
    Kod_cyf = Lookup(cyfra , Kody7seg)
    
    Kod_cyf.7 = Kropka
    
    Portd = Kod_cyf
    
    Else
    Portd = Portd And &B01111111
    
    End If
    End Sub
    
    Kody7seg:
    
    'kody cyfr
    Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001
    Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000


    Proszę pamiętać o używaniu znaczników code. - arnoldziq
  • REKLAMA
  • #2 9088968
    Krauser
    Poziom 26  
    W linii
    Portd = Portd And &B01111111
    powinno być Or (suma logiczna) ponieważ chcemy ustawić "1" na wszystkich wyjściach, aby wygasić wszystkie segmenty.W petli for opóźnienie 15ms to za mało i zobaczysz 8 zamiast zmieniających się cyfr.
  • REKLAMA
  • #3 9093227
    ElektroShock
    Poziom 12  
    No niestety dalej to samo:( segment nr b nie świeci się mimo że jest podłączony do mikro kontrolera,reszta tylko się pali w cyfrę "6" i nic się nie zmienia ze segmentami.Dziękuje za zaangażowanie :) .Aha i kropka się również nie pali .Może kupie nowy segment.
  • #4 9094598
    Krauser
    Poziom 26  
    Sprawdź w to na bardziej prostackim programie z taką pętlą:
    
    Do 
    PORTD = &B11000000
    Waitms 1000
    PORTD = &B11111001 
    Waitms 1000
    PORTD = &B10100100
    Waitms 1000 
    Loop 
    End 
    
  • #5 9097664
    ElektroShock
    Poziom 12  
    Mam wgrać samą bez niczego innego tą ,którą napisałeś? Jak tak to nic się nie dzieje porty nie są aktywne i nawet nie ma ciągłego świecenia.

    Dodano po 6 [minuty]:

    Ok sorry wgrałem trzy pierwsze wiersze z mojego programu + Twoja Pętla jest odliczanie ale nie w naszych arabskich cyfrach tylko jak u predatora :D Chyba wiem co jest nie tak któraś wartość logiczna... gdzieś zamiast "1" powinno być '0" tylko gdzie?
  • REKLAMA
  • #6 9097708
    piotrva
    VIP Zasłużony dla elektroda
    a możesz popodpinać po prostu wyprowadzenia wyświetlacza drucikami do zasilania :D mam nadzieję, że na odpowiednich pinach wyświetlacza masz :
    1. na segmentach rezystory, min. 330 om
    2. na wspólnych katodach(lub anodach) odpowiednio wysterowane tranzystory
  • #7 9097747
    ElektroShock
    Poziom 12  
    piotrva to jest tylko jeden segment w tej chwili na test.
  • #8 9097796
    piotrva
    VIP Zasłużony dla elektroda
    raczej jeden wyświetlacz, bo jeden segment to raczej nie, bo masz 7 kreseczek :D
    tak czy siak sprawdź po odłączeniu uP czy sam wyświetlacz działa, skoro masz co do tego wątpliwości
  • #9 9097974
    ElektroShock
    Poziom 12  
    tak przepraszam mój błąd pojedynczy wyświetlacz:) Co do rezystorów to one mają jakiś wpływ oprócz tego,że ograniczają prąd i segmenty nie palą tak po oczach jak u mnie :) bo w tej chwili nie mam ich podłączonych wcześniej były ale rozmontowałem tamten układ bo wszystko już działa mogę sobie tworzyć cyfry z segmentów tylko się pali się w ogóle segment nr b? Co może byę tego powodem?
  • REKLAMA
  • #11 9098132
    ElektroShock
    Poziom 12  
    wyświetlacz to rozumie ale procesor ? I co z tym segmentem 'b' może nie świecić przez brak rezystora?
  • Pomocny post
    #12 9098486
    Krauser
    Poziom 26  
    Jeśli masz wyświetlacz ze wspólną anodą, czyli załączasz stanem niski to rezystory (330R - 1k) są konieczne. Jeśli chodzi o uszkodzenie procesora to należałoby policzyć sumaryczny prąd wszystkich wyjść i ta suma nie może bodajże przekroczyć 300mA aczkolwiek są również inne zastrzeżenia. Więcej informacji można znaleźć w specyfikacji mikrokontrolera.
  • #13 9098558
    ElektroShock
    Poziom 12  
    Wychodzi na to ,że wspólna anoda jednak bo segmenty zapalają się przy "jedynce" ale z drugiej strony na wspólny punkt jest podłączony minus,ale nie ważne Krauser program pomocny ale zlicza od 0 do 2 i tak cały czas mimo to ,że wgrywam mu kolejne cyfry do zapalania dlaczego tak się dzieje? I czemu ten segment b w ogóle się nie zapala?

    Dodano po 1 [godziny] 34 [minuty]:

    Segment b zaczął w końcu świecić :) teraz tylko dlaczego program zlicza tylko do 2 ?
  • #15 9103064
    ElektroShock
    Poziom 12  
    Dobra mniejsza już o procesor podłączyłem rezystory i jest ok powiedźcie mi jak zrobić ,żeby program zliczał do ilu chcę a nie do 2

    Dodano po 4 [godziny] 14 [minuty]:

    Dziękuje wszystkim biorącym udział w dyskusji:) Problem rozwiązany , temat uważam za zamknięty.
REKLAMA