Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Mikrokontroler - teoria dla laika

emes 28 Mar 2005 12:14 5646 17
Computer Controls
  • #1
    emes
    Level 13  
    Czy ktoś mógłby mi napisać, jak za pomocą mikrokontrolera wyświetlić na wyświetlaczy numerycznym (takim jak w tanich kalkulatorach) np liczbę 16 ?? Chodzi mi o samą teorię.

    Dziękuję z góry :)
    Pozdrawiam,
    _emes

    Dodano po 2 [godziny] 34 [minuty]:

    Hm, jeszcze jedno. Jak zgrać skompilowany program z komputera do pamięci mikrokontrolera?
  • Computer Controls
  • #2
    adames80
    Level 18  
    _emes wrote:

    Hm, jeszcze jedno. Jak zgrać skompilowany program z komputera do pamięci mikrokontrolera?


    musisz miec programator polaczony z procem i PC i program komputerowy:)
  • #3
    elektryk
    Level 42  
    _emes wrote:
    Czy ktoś mógłby mi napisać, jak za pomocą mikrokontrolera wyświetlić na wyświetlaczy numerycznym (takim jak w tanich kalkulatorach) np liczbę 16 ?? Chodzi mi o samą teorię.
    [...]
    Hm, jeszcze jedno. Jak zgrać skompilowany program z komputera do pamięci mikrokontrolera?
    Sugeruje wizyte u wróżki. Żaden elektronik nie powie Ci żadnych konkretów, dopóki nie dostarczysz informacji na temat typu procesora, typu wyświetlaczas i sposobu jego podłączenia.
  • Computer Controls
  • #4
    emes
    Level 13  
    Nie chodzi mi o rzadne konkrety! Po prostu świat mikroprocesorów ciągle jest dla mnie zupełnie nie związany z elektroniką. Mimo, iż potrafię (dość)programować i umię robić (proste) urządzonka, to nie mogę pojąć, jak to połączyc - tzn jak ten cały mikrokontroler to wszystko rozumie - np skąd wie, który port jak sie nazywa i gdzie on jest??

    I właśnie dlatego zadałem to pytanie: Jak na przykład za pomocą mikrokontrolera coś wypisać na Jakimśtam ekranie?


    Pozdrawiam.

    Ps. przecież musi być jakaś ogólna zasada
  • Helpful post
    #5
    marcinj12
    Level 40  
    Mikrokontroler możesz taktować jako bardzo złożony, cyfrowy (choć i to nie jest regułą) układ scalony, który wykonuje taką funkcję jaką mu zaprogramujesz.

    Podobnie jak komputer wykonuje jakiś program, tak mikrokontroler postępuje według wpisanego przez użytkownika programu. Najważniejsze części mikrokontolera to centralna jednoska obliczeniowa (CPU) - tak jak procesor w komputerze wykonuje ona różne instrukcje (np. dodaje zawartość dwóch komórek, mnoży je etc.), pamięci typu FLASH - w której jest przechowywany wpisany przez użytkownika program (algorytm działania) - odpowiednik twardego dysku w komputerze, oraz pamięci typu RAM - w niej m.in. CPU przeprowadza swoje obliczenia - odpwiednik pamiędi RAM w komputerze.

    Aby komunikwoać się ze światem zewnętrznym mikrokontroler wyposażono w tzw. porty wejścia/wyjścia, zwane skrótowo I/O (input-output), a po polsku "nóżki" układu scalonego :)

    Niektóre wyjścia pełnią ściśle określone funkcje, podczas gdy inne można ustawić (w programie pisanym przez użytkowanika) czy mają być wejściami czy wyjściami.

    Program pisany przez użytkownika wykonuje się w niekończącej się pętli. Instrukcja takiego programu są wykonywane jedna po drugiej. Nie różni się to zbytnio od innych języków programowania. Aby mieć jakiś punkt odniesienia czasu mikroprocesor jest taktowany z określoną częstotliwością (zwykle rzędu kilku..kilkunastu MHz), najczęściej za pomocą przyłączanego z zewnatrz kwarcu. Każdy impuls z kwarcu pozwala na wykonanie jednego "kroku" mikroprocesorowi - w zależności od typu mikrokontrolera np. instrukcja dodanie dwóch komórek pamięci może zająć jeden lub dwa cykle zegara.

    Mikrokonroler działa jak układ cyfrowy - rozróżnia dwa stany" wysoki i niski (1 lub 0 logiczne), czyli po polsku "jest napięcie / nie ma napięcia".
    Jeżeli chcesz np. spowodować wyświetlanie liczb na wyświetlaczu LED, podłączasz wyjścia mikrokontrolera do wyświetlacza i podajesz na jego wyjścia takie stany, aby zapalić odpowienie diody w wyświetlaczu.
    Oczywiście praktyka nie jest tak prosta - z każdego portu można pobrać określony (mały) prąd, więc często mikrokontroler staruje np. tranzystory, któe dostarczająwiększego prądu do sterowanych elementów; wyjść jest zwykle mniej niż potrzebujemy, więc trzeba sprytnie pisać program tak, żeby jedno wejście/wyjście mogło spełniać różne funkcje etc.

    Oprócz tego mikrokontroler wyposażono w całe mnóstwo przydatnych rzeczy: zawiera np. timery, które mogą odmierzać "tykniecia zegara", czyli kolejne kroki, i co jakiś czas wywoływać określoną akcję; układy do komunikacji z innymi urządzeniami (np. z komputerem prze port szeregowy RS232) - tu wszsytko zależy od typu (rodziny) mikrokontrolera.

    Jeżeli chodzi o sam program który pisze używkownik, to ma on postać typu:
    "-jeżeli na nóżce pierwszej pojawi się napięcie (stan wysoki) to zwiększ zawartość komórki X o 1.
    -jeżli zawartość komórki X jest większa niż 2, to ustaw wyjście 4 w stan wysoki" etc.
  • #6
    emes
    Level 13  
    Dziękuję serdecznie za fatygę, jednak moja dociekliwość nie pozwala mi tak po prostu spocząć i wręcz muszę kontynuować temat:

    1. A jak rozwiązano właśnie problem pamięci w mikrokontrolerach? Pamięta on przecież sporo - sam program moze dochodzić do 1 kilobajata! Czy tam w środku są tysiące "oczek" pamiętających 1 lub 0? takie mini układy RS, czy jak??

    2. Załóżmy że napiszę program który na port 123 wyśle impuls. Program następnie poprzez kompilator, konsolidator itd zostanie przerobiony do postaci binarnej. Skąd nasz mikrokontroler wie, że port 123 to konkretna nóżka, np nr3?

    3. Czy jest różnica pojęć: mikroPROCESOR a mikroKONTROLER ???

    Praktycznie cała współczesna technika, komputery, gejmboje, komórki i tysiące innych rzeczy korzysta z mikrokontrolerów. Pisząc gierki na kompa zawsze zastanawiałem się, co tam w trawie piszczy. Bardzo chciałbym zrozumieć działanie mikroprocesora, może nawet na bardziej konkretnych informacjach.

    Pozdrawiam, dzięki za poswięcenie mi tyle czasu,
    _emes

    PS. A może po prostu ktoś zna dobrą stronę internetową poswieconą tym sprawom??
  • #7
    caramba
    Level 13  
    Jeśli naprawdę jesteś tym zainteresowany to lepiej zainwestuj w jakąś książkę. Na pewno są jakieś stronki o tej tematyce, jednak prawie wszystkie fachowe opisy są nastawione na komercję. A wracając do twoich pytań to najlepiej ściągnij sobie opis jakiegoś procka (np 89c51).
  • #8
    marcinj12
    Level 40  
    Quote:
    1. A jak rozwiązano właśnie problem pamięci w mikrokontrolerach? Pamięta on przecież sporo - sam program moze dochodzić do 1 kilobajata! Czy tam w środku są tysiące "oczek" pamiętających 1 lub 0? takie mini układy RS, czy jak??

    Pamięć w komputerze dochodzi do 1GB na jednej kości - raptem 8 układów scalonych. Pamięć w mikrokontrolerze to góra 16..32kB.
    Dosyć rozbudowane programy mieszczą się w 4..8kB pamięci.
    I tak, tam są setki tysięcy takich "oczek" - nie pamiętam szczegółów w tej chwili, ale to są chyba jakieś kondensatory ładowane przez tranzystor - współczesna technika potrafi upakować setki tysięcy takich elementów w jednym układzie - poczytaj na necie o technilogii VLSI (Very Large Scale Integration) i ULSI (Ultra-Large..).

    Quote:
    2. Załóżmy że napiszę program który na port 123 wyśle impuls. Program następnie poprzez kompilator, konsolidator itd zostanie przerobiony do postaci binarnej. Skąd nasz mikrokontroler wie, że port 123 to konkretna nóżka, np nr3?

    Akurat portów jest mniej - poprzez port rozumie się kilka wyprowazeń, np. PORT A, PORT B, PORT C. Każdy port skłąda się zwykle z 7 lub 8 wyprowadzeń (pinów), co odpowiada 8-bitowemu słowu. Każdy bit mtakiego słowa można zmieniać osobno. Każdemu portowi w pamięci mikrokontrolera jest przypisany jakiś adres - chcąc zmienić np. stan pinu 1 w porcie B przesyłasz do komórki pamięci - przykładowo - o adresie 250 (dziesiętne) liczbę binarną 10000000. To powoduje odanie stanu wysokiego na ten pin gdzie jes 1, a niskiego na pozostałe.
    Program nie musi być przerabiany przez kompilator - kompiluje się program pisany na komputerze do postaci rozumianej przez mikroprocesor. Działania wykonywane przez program zapisany już WEWNĄTRZ mikroprocesora są wykonywane już w jego języku (maszynowym).

    Quote:
    3. Czy jest różnica pojęć: mikroPROCESOR a mikroKONTROLER ???

    W zasadzie jest, ale wielu używna tego wymiennie - poprzez mikrokontroler rozumiemy cały układ, zawierajacy wejścia/wyjścia, pamięć FLASH, RAM, jednostkę obliczeniową etc. Ogólnie: cały układ scalony.
    Mikroprocesor to wewnątrzna część mikrokontrolera, nie zawiera portów I/O, zajmuje się obliczeniami etc.

    A tu masz fajną stronę: http://www.elektronika.qs.pl/mikrokontroler.html
  • #9
    emes
    Level 13  
    A gdybym chciał się zając mikrokontrolerami, czego bym potrzebował??

    Mikrokontroler (jaki?) programator (jaki?) kompilator na kompie (jaki?) hmm.. coś jescze????


    _emes
  • Helpful post
    #10
    marcinj12
    Level 40  
    _emes wrote:
    A gdybym chciał się zając mikrokontrolerami, czego bym potrzebował??

    Mikrokontroler (jaki?) programator (jaki?) kompilator na kompie (jaki?) hmm.. coś jescze????
    _emes


    Na początek polecam zacząć od mikrokontrolerów rodziny AVR. Nie daj się nabrać na początki w '51 - owszem, może to i "sztandarowy" mikrokontroler, tak jak Pascal w językach programowania, ale - sorry panowie - układ ma już ponad 20 lat i coby nie mówić jest przestarzały. AVRy miły być jego następcami więc niech wreszcie przjmą pierwszeństwo - '51 na zasłużoną emeryturę :P

    Tak więc zaczynanie od AVR ma tą przewagę nad '51 że jest po prostu prostsze. Każda komórka pamięci może być jednocześnie akumulatorem i np. dodawanie dwóch komórek do siebie to prosta(jedna) instrukcja w jednym takcie zegara, podczas gdy w '51 najpierw trzeba przenieść liczbę do akumulatora, potem dodać komórkę do akumulatora, a na koniec z powrotem przenieść z akumulatora do komórki.

    Pozatym AVRy są szybsze od '51 - nie dzielą częstotliwości z kwarcu, więc 8 MHz w AVR to więcej niż 24MHz w '51.

    Musisz tylko wybrać język w jakim chcesz programować: na początek możesz wybrać BASCOM - taki Basic podobny język programowania. W EdW były kursy, są też książki na ten temat - ludzie mówią że jest najprostszy. Moim skromnym zdaniem wcale tak nie jest - ja zaczynałem od razu od assemblera - tu polecam ksiązkę Jarosława Dolińskiego "Mikrokontrolery AVR w praktyce". Wbrew pozorom assembler wcale nie okazał się taki trudny. Na początku każdy język - czy BASCOM czy C będzie się wydawał tak samo zagmatwany.

    Mozesz też zacząć od programowania od razu w języku C - do tego też przyda się książka Dolińskiego. Te dwa języki (assembler i C) przydadzą ci się później, jak już zaczniesz progrmować mikrokontrolery na poważnie - język BASCOM jest raczej dobry na start, ale program w nim napisany jest mało optymalny (zajmuje dużo pamięci), więc prędzej czy póxniej będziesz musiał się przesiąść na C lub ASM, a sąone całkowicie różne od BASCOMA, i znowu będziesz musiał zaczynać od podstaw.

    Jeśli chodzi o rodzaj mikrokontrolera to bez wątpienia AVR model AT90S2313 - raz że większość książek/kursów opiera się na tym właśnie modelu, dwa - że programator szeregowy (ISP) do niego (jak i do większości z rodziny AVR) wykonasz za pomocą jednej wtyczki LPT i jednego układu TTL.
  • #11
    emes
    Level 13  
    Dzięki. Czy języki C i ASM dla mikrokontrolerów bardzo różnią się od tych pecetowych? Z tych dwóch zdecydowanie wolę C :) co chyba łatwo zrozumieć. W asmie też pisałem, ale ultra krotkie i proste programy. Podstawy jednak opanowałem.

    Otóż od zawsze chciałem robić gry :D Najpierw w nie grałem, potem coś na komputerze się pisało. A obecnie bardzo chciałbym stworzyć grę telewizyjną. Pong....

    Czy jest to w zasięgu takiego zwykłego amatora elektroniki?

    po.z.d.raw.i.am
    _emes

    Dodano po 7 [minuty]:

    PS1. Czy to byłby dobry programator?
    http://sklep.avt.pl/go/_info/?id=13827&sess_id=a070d5514caad2c2518600f89ad5dae7
    PS2. Skoro zainwestuję w procesorek, to warto by kupić też jakiś wyswietlacz. Czy którys polecacie?
    http://sklep.avt.pl/go/_info/?id=9336 <- czy ten jest ok?
  • #12
    marcinj12
    Level 40  
    Język C dla uC ni różni się zbytnio od tego komputerowego, ale używa się go w sposób dość specyficzny - musisz znać położenie w pamięci lub przynajmniej nazwy rejestórw komputera, żebyś mógł je odpowiednio ustawić, więc tak czy inaczej zapoznanie sięz budową mikrokonrolera cię nie minie (raz jeszcze : Doliński rules!). Zerknij na ten temat - autor postu zebrał trzy dobre schemty programatora ISP - w zasadzie takie same. https://www.elektroda.pl/rtvforum/topic272996.html

    Jeżeli chodzi o wyświetlacze to na początku popróbuj na zwykłych LED (koniecznie ze wspólnym "plusem" czyli anodą). Potem spróbuj wyświetlanie multipleksowane (np. 4 wyświetlaczy). Później możesz zabrać sięza LCD - najlepiej kupić na Allegro taki wyświetlacza typu 2x16 znaków (najlepiej na sterowniku HD44870) - koszt rzędu 15zł. W Dolińskim :] jest obsługa i opis takiego wyświetlacza.
  • #13
    zatiro
    Level 17  
    Na początek polecam Bascom i AVR np. AT90S2313 choćby dlatego że są polskie nakładki na helpa i patrząc w przykłady i na kurs "Ośla łączka" z EDW możan szybko samemu pokumać jakć napisać jakiś program na AVR.
  • #14
    emes
    Level 13  
    1. Skąd zdobyć ten procesor AVR? Czy to jest dobre źródło? -> http://www.allegro.pl/search.php?string=AT90S2313&buy=0&new=0&pay=0
    2. Czy ten ekranik byłby ok? http://sklep.avt.pl/photo/LCD2x1602.jpg?sess_id=91d33170518cfb7f42f5a1cc8f159024
    3. Czy ten programator byłby ok? http://sklep.avt.pl/go/_info/?id=13827&sess_id=a070d5514caad2c2518600f89ad5dae7
    4. Czy chodzi o tą książkę pana Dolińskiego? http://www.btc.pl/index.php?id=avr
    5. Czy kompilatory są płatne? Czy są też freewareowe? Ponieważ powyższa książka opisuje programowanie w C (tak?) to czy polecacie jakiś kompilator C?

    6. I jeszcze jedno: Czym rozni się: UKŁAD SCALONY NE555 /LM555 - TIMER od UKŁAD SCALONY NE555 /LM555 - TIMER SMD i od UKŁAD SCALONY NE555 CMOS = TLC555 DIL8 ?

    Pozdrawiam!
  • #15
    marcinj12
    Level 40  
    1. Może być - weź ten w obudowie DIP 10MHz
    2. Skoro się uparłeś na AVT - tak, może być. Radzę kupić na Allegro. Każdy wyświetlacz jest dobry.
    3. Tak, doby, jeden z tych do których schematów podałem ci linka.
    4. Tak. Radzę kupić w www.informatyczna.pl - mają taniej.
    5. Są płatne, są i freewareowe.jest tam opisany darmowy kompilator C wraz z jego instalacją i obsługą oraz skąd go ściągnąć.
    6. jeżeli chodzi o nazwy to NE555 i LM555 to to samo tylko innych producentów (najwyżej różnią się zakresem pracy temperatur). Układy SMD są do montażu powierzchniowego - bardzo małe i ciężko sięje lutuje. DIP lub DIL są do montażu przewlekanego, czyli "normalne rozmiary".
  • #16
    emes
    Level 13  
    marcinj12 wrote:
    2. Skoro się uparłeś na AVT - tak, może być. Radzę kupić na Allegro. Każdy wyświetlacz jest dobry.

    Chodzi mi o to, czy ten ekran będzie pasował do opisów w polecanej książce. Przynajmniej dla początkujących ważne jest, aby chociaż ze strony sprzętu wszystko było dobrane, a wszystkich błędów szukać w swojej pracy.

    A jeżeli nie, to jaki model mam szukać ???? (zeby pasowal do opisow)
  • #17
    shg
    Level 35  
    Prawie każdy wyświetlacz się nadaje.
    Obecnie w sterowaniu wyświetlaczy alfanumerycznych LCD obowiązuje standard - kontrolera HD44780 i większość wyświetlaczy jest w niego (albo odpowiednik) wyposażona. Wyświetlacze mogą różnić się ilością wyświetlanych znaków, może też być różna ilość linii, ale sterowanie wygląda zawsze tak samo, Jedyna różnica jest podczas inicjalizacji wyświetlacza - musisz określić, czy ma jedną, czy 2 linie (a to tylko kwestia zmiany jednej komendy wysyłenej do LCD).
    No i podczas sterowania dodatkowo dostajesz możliwość wyświetlania napisów w dwóch liniach, przejście do drugiej linii odbywa się po wysłaniu odpowiedniej instrukcji (ustawienie kursora)

    Wpisz w google HD44780, dostaniesz mnóstwo interesujących Cię linków.
    Z tymi wyświetlaczami jest jeszcze jedna pułapka - wyświetlacze 16 znaków - jedna linia są w większości obsługiwane jak dwie linie po 8 znaków. To znaczy - pierwsze 8 znaków w linii działa normalnie, ale żeby wyświetlić coś na następnych 8 pozycjach trzeba kursor przenieść do drugiel linii (oczywiście to tylko kontroloer "myśli", że wyświetla tekst w dwóch liniach)

    W każdej książce traktującej o komunikacji z LCD powinno być to opisane.
    Na początek proponuję, jak kolega powyżej, BASCOMa. Nie będziesz musiał zawracać sobie głowy pisaniem procedur do obsługi wyświetlacza, bo wszystko jest gotowe. Nie wiem, jak to wygląda w C, ale tam pewnie też są już jakieś biblioteki.

    Z kompilatorów C dla AVR prym wiedzie GCC
    tu dość sporo o nim:
    http://www.avrfreaks.net/
    Jest darmowy :D

    Dla procesorów '51 są kompilatory Keil i Raisonance, do ściągnięcia są wersje demo, w pełni sprawne poza ograniczeniem wielkości kodu do 4kB (Raisonance, nie wiem, jakie ograniczenie ma Keil) (czyli to praktycznie żadne ograniczenie :D )

    Mikrokontrolery powinny być w każdym sklepie elektronicznym, przejdź się po okolicy :D

    Ponga da się zrobić na AVR, ale to będzie prawdziwe wyzwanie, raczej w grę wchodzi tylko programowanie w asemblerze, bo inne języki nie pozwolą ci na precyzyjne "cyklowanie" (taki termin z czasów demosceny na C64 :D chodzi o odpowiednie "układanie" instrukcji programu tak, żeby wykonywały się w ściśle określonych odstępach czasu).
  • #18
    emes
    Level 13  
    a co atrakcyjnego da sie zrobic proporcjonalnie łatwo?