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

Frustracja. Jaki mikrokontroler dla laika (krytycznie o msp430)?

hans512 14 Gru 2011 16:18 3657 21
  • #1 14 Gru 2011 16:18
    hans512
    Poziom 14  

    Witam seredecznie.

    Czy ktos moglby mi powiedziec czy istenieje jakis mikrokontroler lub magiczna plytka (Arudino?) ktora pozwalalaby na programowanie mikrokontrolerow na relatywnie wysokim poziomie w C?

    W czym problem:
    Potrafie programowac w C++, Pythonie czy Javie jednak gdy wzialem sie za programowanie mcu [MSP430 na Launchpad] to natrafilem na niemozliwa do przeskoczenia bariere polegajaca na tym ze w zasadzie bez dokladnego zapoznania sie z 600 stronnicowa "instrukcja" do danego MCU nie sposob go programowac nawet w wydawac by sie moglo uniersalnym jezyku C.

    Banalny przyklad:

    Code:
    P1DIR = 0x40; 
    
    P1OUT = 0;


    Programista majacy nawet duzo doswiadcznia w C nie wie po prostu do czego odwoluja sie te 2 zmienne i co gorsza dlaczego np 0x40 oznacza w launchpadzie(plytka z TI do msp430) zielona diode. Tak samo do czego moglby sie odwolywac powiedzmy 0x41 czy 0x39. Jedyny sposob by tego sie dowiedziec jest przebrniecie i zrozumienie owego poteznego podrecznika MSP430 majacego 600 stron ktory bynajmniej NIE JEST zadnym tutorialem lecz bardzo sucha i trudna do zrozumienia (w porownaniu z powiedzmy manualami bibliotek C w Linuksie) techniczna dokumentacja.

    Czy istnieja jakies plytki/mikrokonrolery/biblioteki - ktore pozwalaja programiscie na uzywanie danego mcu, bez potrzeby znajomosci 600 stron dokumentacji?
    Czy owe znane plytki "arudino" byloby tutaj dobrym kompromisem? [slyszalem iz maja roznego rodzaju magiczne biblioteki]. Mam dosc frustracji i naprawde podziwiam jak ludzie sobie z tym radza.


    Dziekuje.

    ps. Chetnie dowiem sie tez jak inni nauczyli sie programowac mcu. Bo ja osobiscie czuje sie glupkiem, mimo ze pol roku temu gdy pisalem swoj wlasny stos udp/ip dla Linuxa to mialem raczej wysokie mniemanie o swoich umiejetnosciach :(

    0 21
  • Pomocny post
    #2 14 Gru 2011 16:27
    mmacura
    Poziom 17  

    Niestety programowanie MCU nawet w C czy Baskomie ma się nijak do programowania w C na PC.
    Aby coś napisać co będzie działało trzeba się w mniejszym lub większym stopniu przegryźć przez dokumentację do dane MCU. Bez tego to nawet zamrugać diodą zbytnio się nie da.

    Marek

    0
  • Pomocny post
    #3 14 Gru 2011 16:53
    tmf
    Moderator Mikrokontrolery Projektowanie

    Język C to język C, ale bez przekopania się przez dokumentację nie ma szans programować mikrokontrolery. Nawet pisząc stos TCP/IP korzystasz z funkcji systemowych, jak się dowiedziałeś o ich istnieniu? Skąd wiesz jak jest zbudowane API kernela? Przecież bez tego ani rusz. Tu sprawa wygląda podobnie, program napiszesz, ale żeby odwoływać się do urządzeń związanych z mikrokontrolerem musisz wiedzieć jak są one adresowane i jak się je konfiguruje. Spróbuj napisać naprawdę niskopoziomowy driver dla linuxa będziesz miał to samo - np. żeby napisać driver do karty ethernetowej musisz się przekopać przez całą dokumentację zastosowanego w niej scalaka. Natomiast znając C++ i tak masz mocno ułatwioną sprawę.

    0
  • Pomocny post
    #4 14 Gru 2011 16:56
    McMonster
    Poziom 32  

    hans512 napisał:

    Banalny przyklad:
    Code:
    P1DIR = 0x40; 
    
    P1OUT = 0;


    Programista majacy nawet duzo doswiadcznia w C nie wie po prostu do czego odwoluja sie te 2 zmienne i co gorsza dlaczego np 0x40 oznacza w launchpadzie(plytka z TI do msp430) zielona diode.


    To jest kiepski przykład, bo tak programują tylko i wyłącznie początkujący. Prawdziwy programista użyje przesunięć bitowych, a drugi programista, w celu odczytania kodu, sięgnie po kartę katalogową mikrokontrolera i odczyta, który bit do czego służy.

    Karty katalogowe się łatwo czyta, jeśli się rozumie działanie układu na niższym poziomie, czyli jak wygląda organizacja pamięci, do czego służą poszczególone rejestry i jeśli się rozumie podstawowe komponenty (watchdog, timery itp.). Taki dokument to potężna pomoc, ale z założenia nie jest to instrukcja lub tutorial.

    Mam wrażenie, że podchodzisz do zagadnienia zupełnie od szukania problemu i chcesz za szybko osiągnąć efekt. Weź sobie dowolny mikrokontroler, np. jakiś AVR, płytkę stykową (czy też zestaw uruchomieniowy, bez różnicy) i jakikolwiek podstawowy kurs programowania takiego kontrolera (lub książkę, również kwestia preferencji). Następnie trzeba po kolei i dokładnie poznawać podstawowe elementy układu.

    Nie ma szybkiej ścieżki, chyba że Arduino ze swoim bardziej wysokopoziomowym językiem, ale moim zdaniem to zła droga, przeskakujesz "trudne" (z naciskiem na cudzysłów) elementy programowania nie poznając dobrze ich działania, po czym niby umiesz programować, ale nie wiesz do końca, co w środku siedzi.

    0
  • #5 14 Gru 2011 17:19
    hans512
    Poziom 14  

    McMonster napisał:
    To jest kiepski przykład, bo tak programują tylko i wyłącznie początkujący. Prawdziwy programista użyje przesunięć bitowych, a drugi programista, w celu odczytania kodu, sięgnie po kartę katalogową mikrokontrolera i odczyta, który bit do czego służy.

    Ten fragment pochodzi z niestety z oficjalnego "Getting Started with the MSP430 LaunchPad " z Texas Instruments...

    McMonster napisał:
    Mam wrażenie, że podchodzisz do zagadnienia zupełnie od szukania problemu i chcesz za szybko osiągnąć efekt.

    Nie ma szybkiej ścieżki, chyba że Arduino ze swoim bardziej wysokopoziomowym językiem, ale moim zdaniem to zła droga, przeskakujesz "trudne" (z naciskiem na cudzysłów) elementy programowania nie poznając dobrze ich działania, po czym niby umiesz programować, ale nie wiesz do końca, co w środku siedzi.


    To fakt, szukam drogi na skroty. Systemy operacyjne, biblioteki i API odcisnely na mnie najwyrazniej nieodwracalne pietno.

    Dodam ze probowalem czytac ksiazki typu "MSP430 Microcontroller Basics" bedace z zalozenia wlasnie tutorialem, ale nawet one z jakiegos dziwnego wzgledu zakladaja ze programista [nawet totalny laik] wie o co chodzi z 0x40.

    Tak wiec rasumujac: bez zrozumienia calosci dokumentacji danego MCU nie sposob go zaprogramowac?

    Dzieki

    0
  • Pomocny post
    #6 14 Gru 2011 17:32
    tmf
    Moderator Mikrokontrolery Projektowanie

    Raczej bez zrozumienia działania części procesora, które wykorzystujesz. Podsystemy, które ci nie są potrzebne można pominąć, chociaż warto chociaż przejrzeć dla orientacji i tego co można zrobić w przyszłych projektach. Ale to naprawdę proste - na początku każda nowa rzecz wygląda na skomplikowaną, jak trochę poczytasz to okaże się prosta. Z tym MSP to trochę gorzej bo one nie są aż tak popularne i może być kłopot z pomocą.

    0
  • Pomocny post
    #7 14 Gru 2011 17:33
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Ależ można go zaprogramować, tyle że jak chcesz żeby zrobił coś konkretnego ze swoimi układami peryferyjnymi to raczej wypadałoby wiedzieć jak to osiągnąć.

    Nie sądzę żeby znalazła się aż taka droga na skróty. W końcu skądś trzeba wiedzieć co się na mikrokontrolerze da zrobić, a czego nie, i do tego jeszcze trzeba wiedzieć jak (w sensie jaką metodą, a nie jakimi dokładnie bitami i linijkami kodu).

    4\/3!!

    0
  • Pomocny post
    #8 14 Gru 2011 17:35
    McMonster
    Poziom 32  

    Mikrokontrolery można programować bez szerszej wiedzy o ich działaniu, Arduino jest chyba naczelnym przykładem, ale nie trzeba aż za to się łapać. Jeśli ten podręcznik do MSP430 tak faktycznie wygląda, to go lepiej nie ruszaj, chociaż na pierwszy przykład kodu do wklejenia i uruchomienia wpisane na sztywno 0x40 nie jest jeszcze koszmarnie złe.

    Drążąc dalej ten przykład, to trzeba jedynie wiedzieć, że 0x40 to binarnie 1000000, czyli ustawiony siódmy bit. Dalej trzeba wiedzieć, że P1DIR to rejestr procesora sterujący funkcją (wejściowy lub wyjściowy) portu, czyli zbioru pinów w taki sposób, że każdy bit steruje osobnym pinem i 1 na danym pinie ustawia go jako wyjściowy. Na końcu mamy rejestr P1OUT steruje napięciem na danym porcie, gdzie 1 to wysokie napięcie na pinie, a 0 to niskie.

    W skrócie prosta rzecz, ale trzeba gdzieś o tym najpierw przeczytać. Dalej nauczysz się, że to samo można zapisać na przykład tak:

    Kod: C
    Zaloguj się, aby zobaczyć kod


    co oznacza ustawienie bitu siódmego (przesunięcie jedynki o 6 pozycji w lewo wypełniając z prawej zerami). Natomiast karty katalogowe z zasady służą jako skondensowany zbiór informacji charakterystycznych dla danego układu, to jest jakie ma rejestry, które z nich za co odpowiadają i jakie funkcje mają poszczególne bity itp. Nie ma się czego bać, tylko trzeba zacząć od małych kroków.

    Teraz tylko musisz zdecydować, co chcesz robić z mikrokontrolerami, bo być może faktycznie lepiej będzie zacząć od razu od Arduino lub podobnego wynalazku i szybko zacząć tworzyć ciekawe projekty, albo zacząć od podstaw i dokładniej poznać działanie mikrokontrolerów, co w perspektywnie da możliwość budowania znacznie bardziej skomplikowanych rzeczy, ale nauka potrwa trochę dłużej.

    0
  • Pomocny post
    #9 14 Gru 2011 17:40
    tmf
    Moderator Mikrokontrolery Projektowanie

    Arduino tylko zamienia jeden problem na inny - zamiast czytać w miarę proste i przejrzyste noty procesora, trzeba się przegryzać (dosłownie) przez różnej jakości dokumentację tego "frameworku". Być może komuś kto się przesiada z PC ta druga opcja może wydać się kusząca.

    0
  • Pomocny post
    #10 14 Gru 2011 20:29
    janbernat
    Poziom 38  

    To że systemy operacyjne, bibioteki i API odcisnęły na Tobie piętno- to jeszcze nic.
    Wyobraź sobie że masz komputer z wykasowanym BIOS.
    To jest właśnie mały mikroprocesor.
    Ile tysięcy stron dokumentacji musiał byś przeczytać aby taki komputer uruchomić.
    A tu- tylko 600.
    Jeszcze jedno- w podręcznikach do C na "prawdziwe" komputery dość po macoszemu opisują to co jest podstawą w małych procesorach.
    Operacje bitowe, maskowanie.
    No bo co to jest 0x40- no pewnie że brzydko napisane- ale jest to 0b 0100 0000- i jak się ma ośmiobitowy port to czasem w postaci dwójkowej lepiej widać.
    Atrybut volatile, pewne specyficzne sposoby adresowania pamięci, przerwania- tego nie ma w C na "prawdziwe" komputery.
    Standardowego wejścia i wyjścia też nie ma w takim procesorze- no bo co nim niby miało by być- w podręcznikach na "prawdziwe" komputery zakłada się to jako oczywistość.
    Zaczynałem z zupełnie innej strony- od elektroniki.
    No i przeczytałem kilka podręczników do C- ale wszędzie printf() z przyległościami.
    A istoty- nie ma.
    Ponieważ zaczynasz z zupełnie innej strony- od C to kup sobie dwie książki.
    Jest to co prawda o AVR- no ale zasady są podobne na różne rodziny procesorów.
    Razem- 1100stron.

    0
  • Pomocny post
    #11 15 Gru 2011 08:00
    arturt134
    Poziom 26  

    Polecam przeczytać "Sztukę elektroniki" (część 1 jest typowo elektroniczna, część 2 traktuje właśnie o procesorach):
    Link

    A generalnie to programowanie mikrokontrolerów jest bardziej dla elektroników niż dla informatyków....

    0
  • Pomocny post
    #12 15 Gru 2011 14:30
    McMonster
    Poziom 32  

    arturt134 napisał:
    Polecam przeczytać "Sztukę elektroniki" (część 1 jest typowo elektroniczna, część 2 traktuje właśnie o procesorach):
    Link

    A generalnie to programowanie mikrokontrolerów jest bardziej dla elektroników niż dla informatyków....


    Tylko radzę się nie wczytywać zbyt głęboko w tą książkę, tylko traktować ją bardziej jako punkt odniesienia, gdy potrzeba o czymś doczytać. Czytając ją od deski do deski można się zmęczyć, zniechęcić i umrzeć ze starości.

    A od informatyki do elektroniki jest rzut beretem, co sam właśnie sprawdzam od ponad roku.

    0
  • Pomocny post
    #13 17 Gru 2011 23:35
    Marico
    Poziom 19  

    Hans512: A dlaczego zdecydowaleś sie na msp430? Jakieś konkretne zastowanie akurat tego mcu jest Ci potrzebne?

    0
  • Pomocny post
    #14 20 Gru 2011 01:36
    maniek1818
    Poziom 22  

    Pewnie kolega zakupił LaunchPad'a, też go mam i do tej pory udało mi się "zamigotać" używając identycznych funkcji ze znanych z programowania w C AVR'ów + magiczne konfiguracje samego MSP430. Ale banalny przykład z pierwszego postu świadczy o nieznajomości budowy mikrokontrolera. Sam przed chwilą szukałem w plikach nagłówkowych co oznacza (być może z powodu późnej pory).

    Kod: c
    Zaloguj się, aby zobaczyć kod

    w programie:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Ten PDF ma za zadanie nie nauczyć programować kogoś tylko wyjaśnia budowę tej rodziny. Opis rejestrów, funkcje, możliwości itp. Naukę programowania najlepiej zacząć od jakiegoś dobrze opisanego kursu aby "poczuć" zasadę działania mikroprocesora. Sam uczyłem się z "Oślej łączki". Kto wie, może bym do tej pory nie zdawał sobie sprawy z istnienia programowalnych scalaków gdyby nie ten kurs :D

    0
  • Pomocny post
    #15 20 Gru 2011 09:37
    koodpl
    Poziom 11  

    Jeżeli chcesz mieć coś wysokopoziomowego to zainteresuj się jakąś płytką z Linuxem (np Propox MMnet1001) lub .NET Micro Framework.
    Nie musisz wtedy dokładnie znać budowy, a programowanie przypomina zwykłe programy na PC. Oczywiście kosztem takiego podejścia jest mniejsza wydajność i mniejsza kontrola nad tym co się dzieje, ale to już Twój wybór.

    0
  • Pomocny post
    #16 20 Gru 2011 13:40
    maniek1818
    Poziom 22  

    Do tego launchpada jest całkiem sporo źródeł, w których można podpatrzeć jak to jest zrobione. Od podstawowych operacji na zapalaniu LEDów, aż po przetworniki ADC. Komentarze oczywiście w języku angielskim (dobrze, że jeszcze nie w chińskim :) ).

    0
  • #17 03 Sty 2012 20:02
    hans512
    Poziom 14  

    Przepraszam za pozna odpowiedz!

    Marico napisał:
    Hans512: A dlaczego zdecydowaleś sie na msp430? Jakieś konkretne zastowanie akurat tego mcu jest Ci potrzebne?


    Postanowilem nauczyc sie programowac mikrokontrolery (czysto dla zabawy), kupilem programatory dla PIC(PICkit2) oraz msp430(Launchpad), i ten drugi jakos bardziej przypadl mi do gustu. Byc moze to glupie ale bardzo spodobalo mi sie podejscie do klienta w Texas Instruments (szybkie wysylki, darmowe probki etc) oraz fakt ze to olbrzymia profesjonalna firma.

    Dziekuje bardzo kolegom za wytlumaczenie oco chodzilo z 0x40. To wydaje sie banalne, ale dzieki temu gwaltownie ruszylem naprzod i rozumiem juz jak komunikowac sie poprzez piny z innymi urzadzeniami (diody, oscylatory czy nadajniki).

    0
  • Pomocny post
    #18 03 Sty 2012 20:31
    tmf
    Moderator Mikrokontrolery Projektowanie

    Skoro wchodzisz w PIC, to Helion ma w zapowiedziach książkę na ten temat:
    http://helion.pl/ksiazki/mikrokontrolery-pic-...ych-zastosowaniach-pawel-borkowski,mipicp.htm
    Znając poprzednie książki autora, warto będzie w to wejść.

    0
  • Pomocny post
    #19 03 Sty 2012 21:37
    maniek1818
    Poziom 22  

    tmf napisał:
    Znając poprzednie książki autora, warto będzie w to wejść.

    Mimo dużej popularności PICe nadal są układami egzotycznymi wśród elektroników amatorów. Nie wiem dlaczego ale i mój profesor na uczelni uśmiał się, jak powiedziałem mu o tym, że przygarnąlem parę procesorów MicroChip'a do zapoznania się z nimi.

    0
  • Pomocny post
    #20 04 Sty 2012 02:34
    dondu
    Moderator Mikrokontrolery Projektowanie

    maniek1818 napisał:
    Mimo dużej popularności PICe nadal są układami egzotycznymi wśród elektroników amatorów. Nie wiem dlaczego ale i mój profesor na uczelni uśmiał się, jak powiedziałem mu o tym, że przygarnąlem parę procesorów MicroChip'a do zapoznania się z nimi.

    śmiał się, bo nie jest przedsiębiorcą, który musi walczyć o jak najniższy koszt wytworzenia produktu końcowego.

    0
  • Pomocny post
    #21 04 Sty 2012 07:27
    maniek1818
    Poziom 22  

    dondu napisał:
    bo nie jest przedsiębiorcą, który musi walczyć o jak najniższy koszt wytworzenia produktu końcowego.

    Też tak myślę, jak pracowałem w firmie zajmującą się montażem elektroniki to w większości projektów "siedział" właśnie jakiś PIC, ewentualnie coś od TI. Zero AVRów.

    0
  • #22 01 Sie 2012 17:06
    hans512
    Poziom 14  

    Zamykam. dzieki wszystkim. msp430 dziala swietnie i juz nie frustruje :)

    0