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

(AT89C2051) Sterowanie segmentowymi LED i termometry I2C

04 Mar 2004 21:24 5485 13
  • Poziom 10  
    Czesc,

    Chcialbym "zmontowac" pierwszy uklad ktory mialby jakies praktyczne zastosowanie. Jako ze zarowno w elektronice jak i programowaniu mikroprockow stawiam pierwsze niepewne kroki wiec najprostszy problem jest dla mnie wyzwaniem ;) Ukladem ktory sobie wymyslilem bedzie termometr elektroniczny oparty na AT89C2051 lub 4051. Pojawily sie jednak dwa problemy.
    1) chcialem zeby termometr mial dwa czujniki temperatury - dla temp. wewnatrz i na zewnatrz, ale nie wiem jak rozwiazac sprawe adresowania. Jezeli zakupie dwa czujniki tego samego producenta to beda mialy ten sam adres .. da sie to jakos obejsc i zmienic adres czujnika ? Wiem ze mozna nabyc czujniki dwoch producentow o roznych adresach, ale to za proste rozwiazanie, wolalbym wiedziec jak uporac sie z dublujacym sie adresem
    2) temperatura musi byc na czyms wyswietlana. Szkoda mi wyswietlacza LCD na w miare prosty uklad, zastosowalbym dwa 7-segmentowe LEDy, ale nie wiem jak nimi sterowac. Dwa wyswietlacze segmentowe (lub jeden podwojny) to 14 diod do obslugi, a tyle pinow na to przeznaczyc nie moge. Czy jest jakis, nie wiem, sterownik wyswietlaczy led ? Idealnie byloby gdyby pracowal w oparciu o I2C, chociaz kazde rozwiazanie bedzie dobre.
  • Tłumacz Redaktor
    2 - moze expander I2C na 8bit - układ pcf8574? masz dostatecznei duzo wyjsc aby zrobić dwa wyświetlacze multiplexowane.
  • Specjalista PLD
    Co do wyswietlania, to w takiej sytuacji gdy procek ma malo portow, mozesz wziac uklad n.p. MAX 7221 produkcji MAXIM. Uklad ten jest sterowany ze standardowej szyny SPI ( Microwire ) . Wprawdzie 89c2051 nie ma takiej szyny, ale latwo ja oprogramowac. Specyfikacje tej kostki znajdziesz latwo na stronie producenta. Jednak moim zdaniem do sterowania 2 wyswietlaczy LED troche szkoda takiej kostki. Lepiej zrobic to w ukladzie tradycyjnego sterowania multiplexowanego. Polega ono na tym, ze anody segmentow o jednakowych literkach ze wszystkich wyswietlaczy laczymy razem ( czyli segment a zwyswietlacza 1 z segmentem a wyswietlacza 2, segment b zwyswietlacza 1 z segmentem b wyswietlacza 2, i tak dalej. Otrzymujesz w ten sposob osiem wejsc ( anody od "a" do "h" ) do wysterowania. Katody poszczegolnych wyswietlaczy sterujesz tak by tylko jeden wyswietlacz na raz byl aktywny. I wtedy podajesz na anody tresc do wyswietlenia na tym aktywnym wyswietlaczu. Po jakichs 10 ms przelaczasz katode na kolejny wyswietlacz i podajesz na anody tresc do wyswietlenia na tym wyswietlaczu. Calkiem proste gdy sobie to namalujesz. Rzecz polega na oszukaniu oka, ktore "mysli" ze widzi przez caly czas wszystkie cyfry, tymczasem kazda cyfre widzi tylko co jakis czas. Jesli utrzymasz predkosc przelaczania katod i tresci ( anod, ergo segmentow ) zludzenie ciaglosci bedzie dosc dobre i nie zauwazysz mrugania.
    Co do adresowania kostek termometrow, to zwykle maja one trzy piny, na ktorych ustalasz adres danej kostki na szynie, i jesli kazda kostka bedzie miala inny adres ( w zakresie od 0 do 7 ) bedzie mozna z kazda z nich gadac bez problemow. Oczywiscie konkretna implementacja zalezy od konkretnego ukladu. RTFM dla wybranej kostki, a wszystko bedzie jasne.
    Pozdrawiam, Y E G O
  • Poziom 28  
    nie zapominaj o mozliwosci multiplexowania
    dla 3 cyfr masz 10 portow
    i zostaje ci jeszcze mnustwo innych na obsluge i2c i przyciskow
    obsluge led wsadz sobie w przerwanie
    a termometry tylko i2c
    jak uzyjesz 1 wire to musisz wylaczac led na czas pomiaru
    inaczej niewyrobi z czasami
  • Poziom 39  
    bobeer napisał:
    jak uzyjesz 1 wire to musisz wylaczac led na czas pomiaru inaczej niewyrobi z czasami

    Nieprawda, wystarczy zsynchronizować odczyt 1-wire z przerwaniami :)
    Więcej info znajdziesz w tym pliku: https://www.elektroda.pl/nauka/dyplomowe/zegar_cyfrowy_termo.zip
    Jest to zegar z termometrem 1-wire, przejrzyj dokładnie zawarty w archiwum program (zegar.c).
  • Specjalista - oświetlenie sceniczne
    też nie rozumiem Bobeera :)
    proste, jesli chcesz tylko uzyskać temperature z dallasa to na przemian co sekunde wystarczy mu wysłąć rozkazu konwersacji temperaury i jej odczytu. albo odczytywać co sekunde, a zaraz po odczycie dać rozkaz do zmierzenia temperatury.

    co do wyświetlaczy. Szkoda wywalać kase na PCF8574... jeśli już brakuje portów to polecam jakieś rejestry z serii 74, np bardzo lubiany przezemnie układzik z tej rodziny to 74HC595- jest tani a daje tyle radości... :D
  • Poziom 42  
    W EdW 2/2004 ukazał się taki projekt:
    Cytat:
    Dwupunktowy termometr
    Termometr umożliwia pomiar temperatury w dwóch punktach, np. na zewnątrz mieszkania i wewnątrz lub w dowolnych innych miejscach. Zakres mierzonych temperatur zawiera się w przedziale -55 do +99oC, przy czym dokładność ±1oC jest wystarczająca w domowych pomiarach. Wyświetlanie temperatury przez wyświetlacz matrycowy jest miłe dla oka, gdyż nie ma „kwadratowych” cyfr jak w zwykłym wyświetlaczu 7-segmentowym. Termometr umożliwia zapamiętywanie temperatury minimalnej oraz maksymalnej zarówno dla mierzonej temperatury zewnętrznej, jak i wewnętrznej. Temperatury max oraz min są zapamiętywane w pamięci EEPROM, dzięki czemu po włączeniu zasilania mogą być odtworzone.


    Projekt na 89C2051 + dwa czujniki DS.
    Podejrzyj jak autor to zrobił a program napisz sam
  • Poziom 28  
    lechoo napisał:
    bobeer napisał:
    jak uzyjesz 1 wire to musisz wylaczac led na czas pomiaru inaczej niewyrobi z czasami

    Nieprawda, wystarczy zsynchronizować odczyt 1-wire z przerwaniami :)
    Więcej info znajdziesz w tym pliku: https://www.elektroda.pl/nauka/dyplomowe/zegar_cyfrowy_termo.zip
    Jest to zegar z termometrem 1-wire, przejrzyj dokładnie zawarty w archiwum program (zegar.c).

    zapomnialem ze chodzilo mi o bascoma
    kiedys probowalem cos takiego wykombinowac, i raczej z marnym skutkiem.
    masz racje ze sie da to zsynchronizowac, ale procek (51) naprawde niemoze miec juz nic wiecej do roboty w czasie rzeczywistym jak obsluga tego led i 1wire
    bo czasu to chyba na styk

    (zamiast podawac linka do 1.5Mwego pliku czabylo wkleic ten kod)
  • Poziom 39  
    Cały bajer polega na tym, żeby tuż przed obsługą 1-wire zaczekać na obsłużenie przerwania, po czym mamy wystarczająco sporo czasu aby dokonać odczytu lub zapisu jednego bitu. Przed operacją na kolejnym bicie znowu czekamy na kolejne przerwanie, i tak w kółko aż odczytamy (lub zapiszemy) cały bajt. W baskomie faktycznie to może być mały problem, chyba że sobie sam napiszesz procedurki obsługi 1wire z synchronizacją z przerwaniami. W moim programie do tej synchronizacji użyłem zmiennen bitowej 'przerwanie' która jest zerowana podczas obsługi przerwania. W programie obsługi 1wire w krytycznym miejscu najpierw ustawiam sobie tą zmienną, po czym czekam aż zostanie wyzerowana i wtedy dokonuję operacji odczytu/zapisu bitu. W załączniku zamieszczam sam program z obszernymi komentarzami.
  • Specjalista PLD
    '51 potrafi duzo wiecej przy uwaznym programowaniu. Obsluga 2 zapchlonych termometrow na pewno nie jest go w stanie zapchac. Spokojnie mozna dolozyc klawiature, wyswietlacz i jeszcze komunikacje szeregowa. To co kolega Sigreg chce obsluzyc obciazy procesor w jakichs 20 do 30 %. Przez reszte czasu procek bedzie sie nudzil :( . Oczywiscie niechlujnym programem mozna zapchac nawet Craya, ale jesli postaramy sie nie pisac bzdur w programie to '51 zupelnie wystarczy do calkiem sporych zadan. problemy z wydajnoscia pojawiaja sie gdy mamy zagadnienie typu real time z dosc ciasnym rezimem czasowym. W tym ten procek nie jest dobry :!: Nie wiem jaki kod produkuje Bascom, bo nigdy go nie uzywalem, ale mysle, ze jesli jest on tak popularny, to nie jest chyba az tak zly zeby procek sie pod nim czolgal. :D

    Pozdrawiam, Y E G O
  • Poziom 18  
    jest oczywiście taki sterownik. nazywa sie to dekoder kodu BCD na kod 7-segmentowy. sluzy właśnie do obsługi wyświetlaczy led. ja sie tym bawie od dawna i zawsze działa. po za tym nie spotkałem jeszcze nikogo kto sam zrobiłby taki dekoder. wszystko mioesci sie w prostym scalaku ul7447.
    pozdr
  • Poziom 39  
    Po co jakiś 7447 (który na dodatek źle wyświetla 6 i 9), skoro można to wszystko zrobić programowo?
  • Poziom 19  
    Mam pytanie dotyczące podłączania transkoderów 74LS47 do AT89C2051:
    Czy można je podłączyć (w moim przypadku do portu P1) mikrokontrolera bez dodatkowych rezystorów pull-up/pull-down ?
    Czy też należy jakieś rezystory stosować (ew jakie i na których liniach portu) ?
  • Specjalista - oświetlenie sceniczne
    pull-up'y powinne być na portach p1.0, p1.1 (4,7k)
    przy okazji ciekawostka z tym związana. Nie zastosowałem tych rezystorów i do tych portów podpiołem wyświetlacz LCD- o dziwo LCD działał poprawnie. Może przyczyna tkwi w jego wewnętrznej konstrukcji, może sam "podciągł" wejscia