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

Porty - niby proste a jednak (bascom)

Roman Szemik 23 Sty 2006 21:17 1493 8
  • #1 23 Sty 2006 21:17
    Roman Szemik
    Poziom 14  

    Witam wszystkich czytających a przede wszystkim dzielących się doświadczeniem.

    Mój problem dotyczy wyśietlania cyfr na wyświetlaczy 7-o segmentowym, ale bez sterujących anodami tranzystorów (oszczędność miejsca)anody bezpośrednio podpięte do pinów mikrokontrolera. Z tranzystorami cel osiągnąłem i cyferki wyświetlają się jak ta lala, natomiast bez tranzystorów natrafiłem na ciekawy problem.

    Segmenty wyświetlacza LED a-g podpięte odpowiednio do pinów b0-b6
    za pośrednictwem rezystorów, anody do portu d3

    Na anodę podaję jedynkę (d3=1).
    Jeżeli wszystkie segmenty mają stan wysoki to wyświetlacz nie świeci (poprawnie)
    Jeżeli wszystkie segmenty mają stan niski to świecą (poprawnie)

    Nareszcie dochodzę do sedna sprawy. Jeśli chcę zaświecić segment b (zero na pinie b1 0,08V) nie wiem dlaczego zaświeca się również segment f(pinb.5 4,92V) i na odwrót, napięcie mierzone do minusa. Reszta kombinacji działa poprawnie.
    Płytka wykonana dobrze, mikrokontroler ATMEGA16 zmieniałem z AT90S8535 i reakcja ta sama (układy na pewno dobre).
    Program pisany w Bascom.

    Jeśli anodą steruje tranzystor nie ma takiego problemy i każdy segment mogę zaświecać osobno.
    Prąd na każdy segment jest wielkości 7mA.

    Jeśli ktoś spotkał się z podobnym problemem to proszę o pomoc.

    Pozdrawiam.

    0 8
  • Arrow Multisolution Day
  • #2 23 Sty 2006 21:32
    hunterhouse
    Poziom 26  

    z pojedynczego pinu mikrokontrolera możesz pobrać 20mA wieć łączenie wspólnej elektrody bezpośrednio pod procka jest niedopuszczalne, tam musi być tranzystor. jeśli chodzi o elektrody od poszczególnych segmętów to oczywiście można je łączyś bezpośrednio pod port ale przez rezystor.

    teraz co do swiecenia sie 2 segmętów zamiast 1 to dziwne (choć jak piszesz z tranzystorami problem przestaje istnieć)
    być może wewnętrzne zabezpieczenie przeciązeniowe pinów ma w tym jakiś wkład.
    oprucz tego radze sprawdzić czy problem pojawia się też bez procka (podając stany logiczne kabelkami prosto z zasilacza)
    można też sprawdzić omomieżem czy nie ma tam jakiś mikro zwarć albo pruszy któe mogą mostkować połączenia.

    0
  • Arrow Multisolution Day
  • #3 24 Sty 2006 06:09
    Roman Szemik
    Poziom 14  

    I wkradła się mała kaczka dziennikarska.
    Pisząc o prądzie 7mA miałem na myśli nie prąd każdego segmentu lecz prąd anody przy wiświetlaniu cyfry osiem.
    Wyświetlacz jest o podwyższonej jasności i dlatego też prądy są takie małe.
    Pozdrawiam

    0
  • #4 24 Sty 2006 13:05
    PioTherm
    Poziom 15  

    Witam,
    Teoretycznie spotkałem się już ze schematami gdzie wyświetlacze siedmiosegmentowe były sterowane bezpośrednio z końcówek procka,
    jednak w praktyce polecałbym stosować tranzystory sterujące, tak jak napisał kolega wyżej. Zmniejsza to wtedy ryzyko upalenia procesora. Jeśli nie zastosujesz tranzystorów procek jest nieźle "katowany" i zwiększa się niestabilność jego pracy, co może objawiać się właśnie problemem takim jak powyżej. Do sterowania wystarczą Ci zapewne małe tranzystory serii BC, które zawsze da się gdzieś upchnąć. Do tego jest to proste i sprawdzone rozwiązanie :D

    0
  • #5 24 Sty 2006 23:22
    desa
    Poziom 13  

    jesli mozesz to wrzuc listing programu poniewaz moze masz jakis blad w programie tzn. moze blednie ustawiny try portu. poniewaz moze po portu masz wylaczone rezystoryki podciagowe na porcie i to mzoe byc przyczyna tego ze poprostu pojawia sie stan nieokreslony na pinie.

    0
  • #6 25 Sty 2006 06:25
    Roman Szemik
    Poziom 14  

    Nawiasem mówiąc lub pisząc nie zastosowałem rezystorów podciągających na wyjścia (dodatkowych).
    A programik wygąda następująco:

    config portb=output
    config portd=output
    portb=255
    portd=255

    do
    portd=255 'port do którego podpięta jest anoda wyświetlacza
    portb1=0 'pin który zasila segment b
    loop

    lub odwrotnie (tutaj też świecą dwa segmenty zamiast jednego)
    do
    portd=255
    portb.5=0
    loop

    Teoretycznie powinien świecić tylko segment b, lecz nie wiem dlaczego segment f podpięty do pinub.5 również świeci.
    Jasność segmentu b i f jest taka sama i o połowę mniejsza niż gdybym zaświecał inne segmenty, a nadmienię iż inne świecą jaśniej i nie dublują się.

    Kłopot jest tylko i wyłącznie na tych dwóch segmentach. Myślałem iż jest to wina wewnętrznego komparatora który jest wbudowany w układ lecz jest on podpięty pod inne wyprowadzenia.

    Proszę o pomoc. Dziękuję

    0
  • Pomocny post
    #7 25 Sty 2006 11:16
    desa
    Poziom 13  

    mam jescze jedno pytanie programujesz to odzelnym proramatorem?? czy przez ISP?? spoboj odwrócic porty, spoboj uzywac polecen set i reset np. "reset PORTB.5 " oraz tutaj masz cos o charakterstyce portu:

    Port PB jako uniwersalny port wejścia wyjścia.

    Wszystkie 8 linii portu są równorzędne, gdy używane są jako zwykłe wejścia-wyjścia. Bity DDBn w rejestrze DDRB określają kierunek działania końcówki portu. Gdy bit jest ustawiony (stan 1) końcówka pełni rolę wyjścia, gdy jest wyzerowany (stan 0) końcówka pełni rolę wejścia. Jeśli dodatkowo określony bit w rejestrze PORTBn jest ustawiony (stan 1) a końcówka pełni rolę wejścia, włączany jest rezystor podciągający. By wyłączyć rezystor podciągający należy w rejestrze PORTB wyzerować odpowiedni bit, lub też skonfigurować linię portu jako wyjście:

    DDBn PORTBn Tryb pracy Podciąganie Komentarz
    0 0 Wejście Nie Trójstanowe (Hi-Z)
    0 1 Wejście Tak Z linii PBn może wypływać prąd, gdy końcówka będzie ściągnięta do masy.
    1 0 Wyjście Nie Stopień wyjściowy typu Push-Pull, stan 0
    1 1 Wyjście Nie Stopień wyjściowy typu Push-Pull, stan 1

    0
  • #8 27 Sty 2006 13:38
    Roman Szemik
    Poziom 14  

    Eureka! Krzyczał Napoleon wymyśliwszy dynamit wyskakując z wanny (a może to nie była wanna?)
    Myślałem, analizowałem wszystkie wypowiedzi i doszedłem do wniosku iż takie zachowanie procka jest nie - mo - żli - we. Postanowiłem wziąć pod lupę płytkę z wyświetlaczem i zauważyłem coś niepokojącego. Mikroskopijne zwarcie pomiędzy segmentami.
    Po usunięciu miedzianego włosa wyświetlacz pracuje i może pracować sterowany bezpośrednio z portów (o podwyższonej jasności oczywiście) test 5 godzin przy prądzie 10mA. Może przy okazji sprawdzę dlaczego nie było problemu z wyświetlaczem kiedy anody były sterowane przez tranzystor. Może ktoś powie - wszystko jest trudne zanim stanie się proste.
    Pozdrawiam i dziękuję za naprowadzanie.

    0
  • #9 27 Sty 2006 14:10
    M. S.
    Poziom 34  

    No właśnie lupę poleciłbym wszystkim elektronikom. Jej walory doceniłem kiedy mój wzrok się nieco pogorszył. Od tego czasu moje układy nie dają mi już aż tak popalić. Panowie elektronicy - po montażu płytki lupy w dłoń i pod światło!

    0