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

Podłączenie wyświetlacza 2x16 przez expander PCF8574 do 90S8515 - jak to zrobić?

Bulik 04 Cze 2003 08:58 4678 34
Najlepsze odpowiedzi

Jak podłączyć i obsługiwać wyświetlacz 2x16 przez ekspander PCF8574 do mikrokontrolera AT90S8515?

Da się to zrobić, ale w wątku uznano, że praktyczniej niż PCF8574 będzie albo użyć gotowych procedur obsługi LCD przez PCF z avrfreaks.net, albo odciążyć 8515 przez mały AT89C2051, który po I2C odbiera 32 bajty (2x16 znaków) i sam steruje wyświetlaczem [#238848][#243721] Dla AT90S8515 padła też mocna propozycja, by zamiast dodatkowych ekspanderów zmapować układy I/O pod pamięć: wyjścia na 74273/74373, wejścia na 74244, z wyborem przez port A i sygnałami odczyt/zapis z portu C [#245580][#245607][#247096]
Wygenerowane przez model językowy.
  • #1 237235
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Witam.
    Podłączyłem 8 wyjść i muszę podłączyć 16 wejść reszta to RS232, I2C i coś jeszcze. Teraz problem stanowi fakt, że nie ma miejsca dla wyświetlacza 2*16. 8O Pytanko: Czy mogę podłączyć go przez expander PCF8574. Jeśli tak to jak to obsługiwać. :oops:

    P/S do TDV.
    :oops: Mam problemy z informacją na Twojego maila. Prosiłeś o mój adres, bo proponowałeś kurs C. mój e-mail. A.Bulak(_at_)kama-vitrum.pl.

    Dzięki za info.
  • #2 237367
    Maciej256
    Poziom 14  
    Posty: 128
    Pomógł: 2
    Ocena: 13
    spróbuj zrobić tak: przełącznik danych za pomocą którego będziesz dołączał do portu albo wyświetlacz albo coś innego. w programie podczas wykonywania operacji na LCD bedziesz przełączał wyjście portu. Nigdy nie próbowałem ale powinno zadziałać
  • #3 237443
    bobeer
    Poziom 28  
    Posty: 1497
    Pomógł: 57
    Ocena: 641
    LCD ma wejscie enable i wzaleznosci 4 albo 8bitowa magistrale
    ktora podczas nieaktywowania LCD mozna wykorzystywac, do transmisji danych do innego urzadzenia
    tak wiec jesli inne urzadzenie jakiego uzywasz tez posiada wejscie Enable i korzysta z magistrali, to kosztem dodatkowego portu dla Enable LCD
    Mozesz podlaczyc wszystko razem
  • #4 237452
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Widzę, że wszyscy uciekacie od tematu PCF-a. Może i dobrze bo im mniej elektroniki tym taniej i niezawodniej. Myślałem o tym temecie bo przyszło mi na myśl sprawa wyświetlacza który można podłączyć i odłączyć od urządzenia. Wykożystując I2C minimalizujemy ilość przewodów. Ale to tylko taki zamysł przyszłościowy. Pomysł z wejściem Enable jast całkiem dobry. Muszę poukładać sobie te klocki i coś może uda się zrobić. A tak na marginesie to czy ktoś wie jak rozszerzyć ilość I/O na tym mikrusie ?
  • #5 237473
    bobeer
    Poziom 28  
    Posty: 1497
    Pomógł: 57
    Ocena: 641
    pcfy dobra rzecz
    niski prad standby
    3bity adresowe + x2 bo jeszcze z rozna koncowka

    ale wg mnie maja tez minusy
    Czasem duuze
    1. tylko 100KHz (iic)
    2. Zazbyt drogie, niejednokrotnie niekalkuluje sie dokladanie takich czarow
    3. maly prad wyjsciowy (latwo pozatym je uszkodzic za duzym pradem)

    czasem lepiej uzyc cd4094
    albo dodatkowy ztrzask
    np HC 593 (niepamietam numeru dokladnie ale hyba to ten 393,593 zatrzaski lathD)
    Pozdrawiam
  • #6 237479
    Czesiek
    Poziom 28  
    Posty: 1124
    Pomógł: 99
    Ocena: 116
    Polecam 4094. Używałem 3 sztuki połączone w szereg i przepisywałem sygnałem STROBE wszystkie równocześnie. Jako wyjścia są OK bo zatrzaskują stan na czas łykania nowych danych. Całość zajmuje tyjko trzy piny mikrokontrolera a uzyskuje się 24 wyjścia.
  • #7 237588
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Superancko.
    Powiedzmy, że mamy już wyjścia na 4094 a jak zrobić wejścia? :D

    Pomyślcie a będzie Wam dane.
  • #8 237625
    bobeer
    Poziom 28  
    Posty: 1497
    Pomógł: 57
    Ocena: 641
    jakis rejestr przesowny z rownloglym wpisem :)
    proste nie ?
  • #9 238785
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Fajnie. :D
    Dla kogo proste to proste. Dla mnie niejasne do końca. Pewnie jakoś dam sobie radę ale jeśli masz coś konkretnego (symbol scalaka) to podpowiedz. Testowanie nie było moją dobrą stroną i wymaga czasu. Może jeszcze jakiś programik jak to obsługiwać w procku.
    Może ktoś wreszcie podeśle mi jakiś kurs C na AVR. Chociaż kawałek. :(
  • #10 238809
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Hmm, miałem małe kłopoty z netem, zresztą nadal nie są do końca usunięte. Postaram się to jutro wysłać bo dzisiaj nie dam już rady;-).
  • #11 238848
    serafo
    Poziom 13  
    Posty: 56
    Ocena: 1
    Bulik napisał:
    Widzę, że wszyscy uciekacie od tematu PCF-a. Może i dobrze bo im mniej elektroniki tym taniej i niezawodniej. Myślałem o tym temecie bo przyszło mi na myśl sprawa wyświetlacza który można podłączyć i odłączyć od urządzenia. Wykożystując I2C minimalizujemy ilość przewodów. Ale to tylko taki zamysł przyszłościowy. Pomysł z wejściem Enable jast całkiem dobry. Muszę poukładać sobie te klocki i coś może uda się zrobić. A tak na marginesie to czy ktoś wie jak rozszerzyć ilość I/O na tym mikrusie ?


    na www.avrfreaks.net sa gotowe procedurki do obslugi wyswietlacza przez pcf'a, jesli o to pytales, tylko sa b pamieciozerne...
  • #12 242453
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Witam. :D
    Jak się domyślacie jestem beznadziejnie słaby z C. Jeśli ktoś ma ochotę pomóc to proszę o przykład: Jak obsłużyć 2 scalaki CD4094 połączone oczywiście zgodnie ze schematem. Potrzebny jest programik wystawiający na wyjścia 1 lub 0. Mamy do dyspozycji 3 I/O procka. Ktoś wspomniał, że wyjścia zapisuje się sygnałem STROBE, ale jak? Proszę o przykład programu w C.
    Chłopaki, dziewczyny i inni co znacie się na rzeczy. Help !!! :cry:

    P/S
    TDV i Michu . Dzięki za kursy. Mam problemik z plikiem od TDV bo ma rozszerzenie .dat. W czym to się otwiera? :oops:
  • #13 242550
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Jeszcze jedno.
    Czy wejścia można zrobić (na takiej samej zasadzie jak wyjścia na CD4094) na scalaku 74165. A może inny ? Tylko jaki. 8)
  • #14 242574
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Prawdopodobnie coś się pochrzaniło w transporcie, powinien być zip.

    Tekst nie jest mojego autorstwa, znalazlem to kiedyś w sieci (dawno temu) i nie pamiętam gdzie to było...
    Jak ktoś chce to niech poszuka w źródle (html), pewie się gdzieś jakiś adres uchował...
    Załączniki:
    • kursc.zip (171.5 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 242650
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Widzę, że podesłałeś go jeszcze raz. W tym co przyszedł na maila to zmieniłem rozsz. na zip i dał się rozpakować i chodzi. Dzięki za pomoc. A ten co jest w tym poście to napewno przyda sie innym, którzy też chcą się czegoś nauczyć. :o
    Jeszce raz zapytam o wejścia czy na 74165 można to zrobić ?

    Pozdrowionka wszystkim
  • #16 242748
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Sądząc z chęci stosowania PCF to nie masz ostych ograniczeń finansowych. A może weźmiesz 89C2051 i przez niego podłączysz LCD? Transmisja pomiędzy procami w zasadzie dowolna (masz już IIC, więc zaimplementuj sobie softem na 2051), maly procek będzie robił na kartę graficzną i jeszcze Ci powinno jakieś I/O zostać, a z pewnością wyjdzie taniej niż PCF.
  • #17 242773
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Jesteś cwany bo znasz się na rzeczy. Ktoś kto zaczyna zabewę z mikrusami j językiem programowania w/w mózgów ma niestety problemy z prostymi aplikacjami. Jeśli jesteś chętny do pomocy do podpowiedz coś jeśli chodzi o rozwiązanie programowe bo z elektroniką to sobie jakoś poradzę. Język C nie jest taki trudny ale obsługa I/O może mi przynieść wiele kłopotów zanim się tego nauczę.

    Pozdrowionka.
  • #18 242996
    bobeer
    Poziom 28  
    Posty: 1497
    Pomógł: 57
    Ocena: 641
    implementacja iic przez 89c2051 jako slave nie jest taka prosta, jesli nie niemozliwa wogole dla wyzszych czestotliwosci magistrali
    ale pomysl z multiprocesorowa maszyna jaknajbardziej polecam !
    at89c2051=5zl jesli tylko ma "wolne" Tx w procu glownym
    to przeciez nietrudno zrobic odbior przez rs232
    wspolny zegar (odpada problem niedopasowania szybkosci rsa)
    finansowo hyba najlepsze rozwiazanie
    co wy na to ?
  • #19 243721
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    bobeer: "..implementacja iic przez 89c2051 jako slave nie jest taka prosta, jesli nie niemozliwa wogole dla wyzszych czestotliwosci magistrali .." KE?!? Standard IIC przewiduje 100kHz lub 400kHz (normalny, a nie nowsze odmiany) z czym ma tu być problem na 2051 (max f=24MHz, cykl maszynowy 0,5us)? A kto powiedział, ze musi być te 400kHz? Nawet 100kHz nie musi być. Sam robi sobie IIC to sobie może f dobrać jak chce, mało tego IIC przewiduje odpowiednie działanie w przypadku zbyt wolnego działania któregoś z układów (przytrzmanie lini SCL przez slave), więc do niemożliwego tu dużo brakuje.
    Bulik: IIC i tak robisz, więc 2051 powiesisz na magistrali pod jakimś adresem. W nim robisz slave IIC i wysyłasz do niego powiedzmy 5 razy na sek (albo ile Ci tam odpowiada) to co chcesz mieć wyświetlone (czyli 32 bajty /2x16/) 2051 ma 64bajty RAM, więc spokojnie powinno wystarczyć. 2051 odbiera te dane i wyświetla na LCD, po czym czeka na następną dostawę i tak w kółko. Co do trudności obsługi I/O to nie bardzo rozumie o co Ci chodzi...
  • #20 244043
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    TDV ma rację, bo linie TX i tak już zająłem dla komunikacji po RS485. Więc będę kierował się wskazówkami od TDV, chyba że ktoś ma lepsze rozwiązanie. Co do trudności obsługi I/O w procku. Jeśli dobrze zauważyłem to język C do programowania mikrusów nie różni się od C do PC-tów. Mam jakieś księgi do C i C++ więc jest już lepiej. Ale w tym wszystkim nie ma nic o wyjściach w procku, o RS o IIC i tych typowych sprawach dla mikrusów. Więc tego nie wyczytam tylko muszę sobie pokombinować i jakoś do wszystkiego dojść. Chodziło mi poprzednio o kawałki programu z jakimś małym koment. do poszczególnych linijek. Jak uczymy się na przykładach, które widzimy to wszystko lepiej nam się układa w całość. Jeśli masz coś w tym stylu to podeślij. Będę niezmiernie wdzięczny. Tylko nie odsyłajcie mnie znowu na strony gdzie językiem urzędowym jest angielski a strona jest tak zamotana, że poruszamy się w kółko i nie można nic skopiować, a jak się coś uda to i tak nie to co trzeba.
    Pozdrowionka.
  • #21 244109
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Buehehehehehe.
    OK zum beispiel:

    Pojedyńcze bity
    #define PkT PORTD.7 //deklaracja wyjścia
    #define D_L PINB.1 //deklaracja wejścia

    PkT = 1;
    Jakis_bit = D_L;
    ofkorz możesz pisać od razu PORTD.7 = 1, ale to wyżej jest bardziej czytelne.
    Co do całych portów to tak samo tyle, że nie nie dopisujesz pinu z portu i dana musi być 8 bitów (np. unsigned char)

    To były AVR, w 51 jest jeszcze prościej bo wszystko jest w jednym porcie. Jeżeli masz includa z rejestrami to po prostu:
    P0 = Jakas_dana;
    Inna_dana = P1,
    bity:
    sbit B4 = P1^4;
    no i B4 = 1
    ;-)

    Kilka funkcji do IIC (powstały pod konkretne zastosowanie, więc nie jest to pełna implementacja IIC.

    void delay (void)
    {
    int delay;
    for (delay = 0; delay < 10; delay++);
    }//end (delay)

    //start
    void start (void)
    {
    SCL = 1; delay ();
    SDA = 0; delay ();
    SCL = 0; delay ();
    }//end(start)

    //stop
    void stop (void)
    {
    SDA = 0; delay ();
    SCL = 1; delay ();
    SDA = 1;
    }//end(stop)

    //potwierdzenie
    void ack (void)
    {
    SDA = 0; delay ();
    SCL = 1; delay ();
    SCL = 0; delay ();
    SDA = 1; delay ();
    }//end(ack)

    //wyslanie bajtu do IIC
    void send_data (unsigned char Data)
    {
    int p;

    SCL = 0; delay ();
    for (p = 0;p < 8;p++)
    {
    if (Data & 0x80)
    SDA = 1;
    else SDA = 0;
    Data <<= 1; delay ();
    SCL = 1; delay ();
    SCL = 0; delay ();
    }
    SDA = 1; delay ();
    SCL = 1; delay ();
    SCL = 0; delay (); delay ();
    }//end(send_data)

    //wczytanie bajtu
    unsigned char get_data (void)
    {
    unsigned char Data;
    int p;

    SCL = 0; delay ();
    Data = 0;
    for (p = 0;p < 8; p++)
    {
    Data <<= 1;
    SCL = 1; delay ();
    if (SDA == 1)
    Data++;
    SCL = 0; delay ();
    }
    return(Data);
    }//end(get_data)

    Wyciągnięte z programu dla 51, ale odpowiednia deklaracja SDA i SCL i na AVR też powinno hulać (pod warunkiem, że arbitrażu nie trzeba i kilku innych ustrojstw.
    Jak czegoś nie qmasz to pisz, postarmy się rozwiązać...
  • #22 244445
    bobeer
    Poziom 28  
    Posty: 1497
    Pomógł: 57
    Ocena: 641
    1. emulacja iic to nie tosamo co sprzetowy iic, jezeli szybkosc bedzie ograniczona, oczywiscie niema problemu (ale chyba zalezy wam na szybkosci?)
    2. to ze masz 1 wyjscie tx (hardware uart przypuszczam), nie znaczy, ze niemozesz miec softowo kilku dodatkowych wyjsc (softowy emulator rs232)
    hyba latwiej i szybciej odebrac bajt w 2051 z uartu, niz odebrac i przetworzyc w procedurze odbioru iic (iic slave emulator)
    zastanowcie sie
  • #23 245048
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    bobeer: twierdzisz, że prościej jest zrobić softowego UART'a niż IIC? W 2051 na pewno będzie łatwiej odebrać ale jeszcze trzeba to wysłać. Co do szybkości, to przeczytaj może wszystkie posty i zastanów się jak szybki będzie musiał być ten IIC, tym bardziej że i tak już w układzie jest wykorzystywany...
  • #24 245128
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Dzięki za wszystkie rady i sprzeczki. Ze wszystkiego można wyciągnąć jakieś wnioski. Tdv czuje temat i ma wielkie doświadczenie, praktyczne lub teoret. obojętnie ale ma. Mam niewiele czasu na naukę bo ustrojstwo ma chodzić do końca miesiąca. Jeszcze jedno pytanko. Macie coś dobrego do projektowania płytek? Tylko nie Eagle bo to mam ale w wersji Edukac. z ograniczeniami i chętnie bym się ich pozbył.
    Pozdrowionka
  • #25 245135
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Możesz użyć Protela. Z sieci można pociągnąć wersję trial (99se lub DXP). Jedyne w nichograniczenia to czas (działają przez 30 dni) ale chyba nie muszę pisać, że...
    Można go też znaleźć na CD dołaczanych do niktórych czasopism.
  • #26 245441
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Fajowo. Tylko, że 117MB a protel98 57MB to nie na moje łącza. Może jakaś podpowiedź do Eagle jak rozwiązać problem blokady powierzchni płytki. Najlepiej jeśli coś ktoś ma to na priva bo Gulson się wk.... że piractwo na elektrodzie się sieje. Co do tematu/ Teoretycznie podłączyłem 3*CD4049 do 3 lini mikrusa. Zyskałem 24 wyjścia optoizolowane (PC817) .Teraz gdyby podłączyć do 8 wyjść 4*74LS251 (multipleksery) to mamy 32 wejścia , przyjmujemy, że cały portA mamy zajęty na IIC,RS, 4piny do identyfikacji urządzenia w sieci (RS485) , to w sumie zostało jeszcze 13 wyjść do wykorzystania. Ale mam pytanie, czy to co zbuduję będzie pracować poprawnie (chip AT90S8515) ? :D
    Co Wy na to?
  • #27 245580
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    1. Do eagle są w sieci cracki trzeba się tylko wysilić odrobinke i poszukać
    2. Przysłuchuje się temu tematowi już troche i wnioskuje że dyskusja merytoryczna zeszła w nieco złą strone. 90S8515 ma wyprowadzoną magistrale adresową i danych więc po co bawić się jakieś dodatkowe extendery skoro można zrobić dekoder adresowy i zamapować praktycznie dowolną ilość urządzeń na pamięć?
  • #28 245607
    chyras
    Poziom 12  
    Posty: 47
    elektryk napisał:
    90S8515 ma wyprowadzoną magistrale adresową i danych więc po co bawić się jakieś dodatkowe extendery skoro można zrobić dekoder adresowy i zamapować praktycznie dowolną ilość urządzeń na pamięć?


    Dokladnie!
    Jako wyjscie stosuje latch'e 74273 lub 74373, a jako wejscie bufory 74244 - wybor odpowiedniego ukladu liniami portu A (adres), odczyt/zapis liniami portu C. Proste i wygodne. Dodatkowo jest linia R/W, ktora mozna wykorzystac do podlaczenia dwoch ukladow - jednego wyjsciowego, drugiem wejsciowego pod jednym adresem - odczyt z tego adresu daje sygnal z buforow wejsciowych, zapis wpisuje wartosc do latch'y.

    Pozdrawiam,
  • #29 246444
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    W sumie niby można, ale czy będzie prościej? Jeżeli te układy I/O które chce podłączyć to jakieś np. przełączniki i przekaźniki to i tak będą potrzebne zatrzaski (lub bufory na we). w sumie sprowadzi się to do tej samej ilości sprzętu (bo jeszcze dekoder adresowy), może faktycznie w tym wypadku będzie odrobinę prościej napisać program;-).
    BTW: "...Teoretycznie podłączyłem 3*CD4049 do 3 lini mikrusa...", mnie się zdawało, że 4049 to 6 x inwerter, więc nie bardzo qmam...
  • #30 246766
    Bulik
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 6
    Tdv sorry. Oczywiście chodiło jak już ktoś szybciej nadmienił o CD4094B prawdopodobnie jest to efekt pisania i patrzenia na klawiaturę a nie na to co się pisze. Powiedzcie czy to ma prawo działać? Kolega Elektryk i Chyras też pewnie mają swoje sposoby i zapewne podłączenie lini danych do jednego portu i lini adresowych do drugiego portu jest jak najbardziej prawidłowe i elektrycznie poprawne. Ale czy musimy trzymać się zasad? Przecież rozdzielenie układów wejściowych i wyjściowych też chyba dobrze by wyglądało?. Mi tylko chodzi o to czy Wy jako praktycy z pewnym doświadczeniem możecie na tym poziomie określić czy jest sens (w tej fazie projektu i z tekim podłączeniem elementów) zabierać się za robienie płytki, a może jeszcze coś zmienić, dodać lub uprościć?

    Pozdrowionka...

Podsumowanie tematu

✨ Dyskusja dotyczy podłączenia wyświetlacza LCD 2x16 do mikrokontrolera AT90S8515 przy użyciu ekspandera portów PCF8574 w celu oszczędności linii I/O. Poruszono kwestie obsługi magistrali I2C, ograniczeń prądowych i częstotliwości PCF8574 oraz alternatywne rozwiązania rozszerzenia portów, takie jak rejestry przesuwne CD4094 (wyjścia) i 74165 (wejścia). Zasugerowano wykorzystanie dodatkowego mikrokontrolera AT89C2051 jako slave I2C do sterowania LCD, co może uprościć programowanie i zmniejszyć obciążenie głównego procesora. Omówiono również mapowanie urządzeń peryferyjnych w przestrzeni pamięci mikrokontrolera z użyciem latchy 74273/74373 i buforów 74244, co pozwala na profesjonalne i wygodne zarządzanie wieloma wejściami/wyjściami. Autor poszukiwał przykładów programów w języku C do obsługi rejestrów przesuwanych i I2C, a także narzędzi do projektowania płytek PCB (wspomniano Eagle i Protel). Wskazano na kompromisy między rozbudową sprzętową a złożonością oprogramowania, podkreślając znaczenie testów prototypowych. Całość dotyczy projektu sterownika do urządzenia przemysłowego z wieloma czujnikami i komunikacją RS485, gdzie optymalizacja liczby linii I/O i niezawodność są kluczowe.
Wygenerowane przez model językowy.
REKLAMA