Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Mega8 / Tiny2313 [BASCOM] - trudności z projektem (RS232 + ISP/UART + 4xPWM + .

taramis88 14 Jul 2013 03:09 2994 13
Computer Controls
  • #1
    taramis88
    Level 11  
    Witam
    Mam trudności z sensownym rozplanowaniem zadań dla struktury rozproszonej na 2-3 uC (pod ręką mam 2x Mega8 + 1x Tiny 2313 + kilka Tiny13). Język BASCOM

    Zadania do wykonania:
    1. pobranie danych z komputera przez RS232 (pozycje osi X,Y,A,B, częstotliwości fX fY)
    2. komunikacja pomiędzy uC (ISP / UART)
    3. generowanie 2x PWM 50Hz z wypełnieniem 5-10% dla serw modelarskich (A,B) bez sprzężenia zwrotnego
    4. generowanie 2x sygnał prostokątny ze sterowaną częstotliwością ok. 100-2000Hz (ok. 50%) + wymagane sprzężenie zwrotne położenia + kilka sygnałów sterujących
    5. obsługa krańcówek
    6. obsługa kilku przycisków
    7. orientacyjnie wyświetlacz, ale niewymagany

    Koncepcja 1:
    (Master) Mega8 (1 + 2 + 4 + 5 + 6 + 7)
    (Slave) Tiny2313 (2 + 3)
    - uC nadrzędny zarządza całym przesyłem danych oraz generowaniem 2x prostokąt o sterowalnej częstotliwości oraz przelicza położenie głowicy. Jak osiągnie określoną pozycję, to odpytuje komputer o kolejne współrzędne. Orientacyjnie jakieś dane wyrzuci na wyświetlacz.
    - uC podrzędny odbiera tylko nowe nastawy A,B (jeżeli się pojawią) i generuje stabilny sygnał dla serw modelarskich analogowych.

    Koncepcja 2:
    (Master) Mega8 (1 + 2x2 + {7})
    (Slave) Mega8 (2 + 4 + 5 + 6 + {7})
    (Slave) Tiny2313 (2 + 3)
    - Jeden uC zajmuje się tylko odbieraniem i przekazywaniem danych (RS232 + 2xISP lub 2xUART)
    - Drugi otrzymuje współrzędne XY, generuje 2x prostokąt o sterowalnej częstotliwości i przelicza położenie głowicy.
    - Trzeci uC czasem otrzymuje nastawy AB i generuje 2x PWM dla serw modelarskich.

    Proszę o określenie czy dana koncepcja jest wykonywalna i na jaki sposób komunikacji można by się ostatecznie zdecydować, aby było jak najprościej. Nie miałem styczności z programowaniem uC od ładnych paru lat, a sytuacja mnie zmusiła i deadline jest krótki..
    Aktualnie mam rozpisane miniprogramy w Bascomie dla generowania sygnałów (3+4+5) sprzężenie zwrotne. Za komunikację jeszcze się nie wziąłem i nigdy wcześniej tego tematu nie ruszałem.
    Orientacyjnie co można pozamieniać miejscami, aby było jak najsensowniej rozmieszczone, nie obciążało nadmiernie konkretnego procka i działało stabilnie...
  • Computer Controls
  • Helpful post
    #3
    User removed account
    Level 1  
  • Computer Controls
  • #4
    tronics
    Level 38  
    Quote:
    A tak bardzo poważnie, Mega8 to jest już zabytek. Ceniony, ale jednak zabytek.
    Kosztujący nieraz poniżej 4zł i w porównywalnej cenie do mocniejszych tiny ... W tej cenie jest praktycznie bezkonkurencyjny. Z drugiej strony za 2x tyle można mieć już xmega16d4 (bez dma i z wolniejszym adc niż a4) - więcej timerów, event system (choć uboższy) itp. więc byłoby z czego skorzystać. Jeszcze odrobinę więcej i mamy A4 z większą ilością "ficzerów".
  • #5
    tmf
    Moderator of Microcontroller designs
    tronics wrote:
    Quote:
    A tak bardzo poważnie, Mega8 to jest już zabytek. Ceniony, ale jednak zabytek.
    Kosztujący nieraz poniżej 4zł i w porównywalnej cenie do mocniejszych tiny ... W tej cenie jest praktycznie bezkonkurencyjny. Z drugiej strony za 2x tyle można mieć już xmega16d4 (bez dma i z wolniejszym adc niż a4) - więcej timerów, event system (choć uboższy) itp. więc byłoby z czego skorzystać. Jeszcze odrobinę więcej i mamy A4 z większą ilością "ficzerów".


    To prawda, z drugiej strony za 2xwięcej (zakłądając, że ktoś ma M8 za 4zł) możemy mieć XMEGA32E5, który ma DMA (i to ulepszone) i pozostałe bajery D4, w dodatku timery o wiele łatwiej skonfigurować do sterowania serwem niż w ATMega8. Ale za cenę ATMega8 możemy mieć XMEGA8E5, a być może XMEGA16E5 - oba bez porównania wygodniejsze niż stara M8. Z trzeciej strony :) do tego zadania zapewne i M8 się nada.
  • #6
    taramis88
    Level 11  
    Nie spodziewałem się aż tak szybkich odpowiedzi. :)

    1. dwa serwa modelarskie mają tylko otrzymywać wartości, nie muszę z nich nic zwracać. Skorzystałem z dedykowanej funkcji servos i zajmuje to timer0, w książce M.Wiązania było zalecenie aby wykorzystać kwarc min 10MHz.. A sygnał generowany do serw musi być bardzo stabilny aby nie wykonywały nieprzewidzianych ruchów (i to jest warunek krytyczny). Wartości będą przekazywane sporadycznie. Więc uznałem to jako opcję którą można wyrzucić do osobnego procka. Może się mylę.
    2. 2x sygnał prostokątny (bo nie wiem czy mogę nazwać to jako PWM skoro chcę sterować częstotliwością w dość dużym zakresie, a nie wypełnieniem). Dokładne wyliczenie częstotliwości nie jest ważne. Na Timer0 podzieliłem to na kilkadziesiąt skokowych wartości i to wystarczy. A potrzebuję mieć 2 niezależne kanały gdzie będą ustawione zupełnie różne częstotliwości.
    3. (Ad.2) Każdy kanał ma sterować zewnętrznym dedykowanym sterownikiem silników krokowych. Gdzie poza sygnałem taktującym idzie jeszcze kierunek obrotów i zezwolenie na pracę, (jeżeli z jakiś powodów nie da rady uzyskać dwóch osobnych kanałów, to po prostu sprzęgnę to pod 1 kanał wyjściowy i tak będzie musiało być).
    Sprzężenie zwrotne jest tylko programowe i pozycja będzie wyliczana z kolejnego taktu generowanego przez przerwanie timera i kombinację stanów wyjściowych dla sterownika silników krokowych.
    4. przyciski typu stop, kalibracja układu i tyle, 2x krańcówka z jednej strony X i Y potrzebna do kalibracji (krańcówki z drugiej strony chcę zrobić jako warunek max wartości w programie)

    Podsumowując dla koncepcji 1xMega8:
    8 pinów (VCC, 2xGND, RES, 2xXTAL + (AREF/AVCC niewykorzystane))
    2 na RS232
    2 (INT0 na stop, dowolny na kalibrację)
    2 na krańcówki (też przydałby się wyższy priorytet)
    6 na silniki krokowe (2 osobne timery)
    2 na serwa modelarskie (dla funkcji servos jest Timer0)
    W sumie bez wyświetlacza 22 nóżki czyli orientacyjnie z wyświetlaczem 28 i uC jest w pełni wykorzystany.

    Martwi mnie:
    - stabilność PWM dla serw modelarskich jak będzie wszystko w jednym uC.
    - rozmiar programu, do wykorzystania 8KB (w razie czego można kupić zawsze większy uC) ale Bascom-AVR Demo i tak ma ograniczenie do 4KB, ale z tym coś się poradzi.
    - ilość wykorzystanych timerów i czy między sobą nie będą się kłócić, czy przerwania nie będą maskowane w czasie wykonywania innych przerwań.

    Pełny projekt i treść programu jak wszystko powstanie z czasem opublikuję. Ale nie wiem czy prawnie będę mógł to zrobić dopiero po pół roku od zakończenia. Część elektroniczna (która się nagle pojawiła bo inne koncepcje na gotowych rozwiązaniach się totalnie wysypały) jest tylko małym kawałkiem mojej pracy magisterskiej i przez pewien czas uczelnia będzie miała do niego wyłączne prawo.
  • #7
    BlueDraco
    MCUs specialist
    Rozumiem, że praca dyplomowa nie ma polegać na przeprowadzeniu poprawnego procesu projektowego, tylko na zrobieniu czegoś na przestarzałych mikrokontrolerach rodziny AVR, bez uwzględnienia bieżącego stanu technologii. Studiujesz muzealnictwo?

    W założeniach masz 4 x PWM. Dlaczego nie weźmiesz uC z wieloma kanałami PWM? To tylko pierwszy przykład zasadniczego błędu w procesie projektowym. Jako recenzent odwaliłbym z miejsca taką pracę.
  • Helpful post
    #8
    tmf
    Moderator of Microcontroller designs
    BlueDraco: gratuluję ci, że masz tak wspaniałych studentów. Albo wyrozumiałego Dziekana, który ci pozwoli oblać 90% roku :)
    Niemniej uwagi słuszne.
    taramis88: To wszystko co opisałeś robi się sprzętowo. Ponieważ impulsy dla serwa generuje timer, nie ma możliwości, żeby ci coś skakało. Do tego nie trzeba nawet kwarcu. Pozostałe elementy wygenerujesz również na timerze. Także program właściwie będzie ograniczał się do konfiguracji timerów i tyle. Nawet te 4 kB BASCOMa podejrzewam, że wystarczą, chociaż nie wiem dlaczego nie chcesz darmowego C bez ograniczeń?
    Jedyny problem jaki widzę to ilość timerów. Ponieważ nawet w M8 są one wielokanałowe, trzebaby na sucho pomyśleć, czy ich wystarczy. PPM dla serv można wygenerować jednym. Częstotliwości niestety nie - na każdy przebieg potrzebujesz jeden timer w trybie CTC. Sterowanie krokowcami też wypadałoby zrobić na timerach, ale nie jest to warunek konieczny. Także IMHO M8 wystarczy. Z drugiej strony użycie XMEGA z ulepszonymi timerami zadanie znacznie ułatwi. Przede wszystkim to generowanie przebiegu PPM dla serv.
  • #9
    taramis88
    Level 11  
    BlueDraco wrote:
    Rozumiem, że praca dyplomowa nie ma polegać na przeprowadzeniu poprawnego procesu projektowego, tylko na zrobieniu czegoś na przestarzałych mikrokontrolerach rodziny AVR, bez uwzględnienia bieżącego stanu technologii. Studiujesz muzealnictwo?
    ..
    Jako recenzent odwaliłbym z miejsca taką pracę.


    Tylko winny się tłumaczy, ale..
    Wiem, że technologia nie jest najnowsza, ale z taką w przeszłości miałem do czynienia. Tak samo czemu Bascom a nie C, bo z tym miałem do czynienia, a nie mam czasu na naukę C.
    Praca nie jest związana z elektroniką, najnowocześniejszymi technologiami i poprawnym procesem projektowym dla elektroniki, tylko z budową stanowiska które ma działać przy spełnieniu szeregu założeń głównie od strony mechanicznej i funkcjonalnej (tutaj był ważny proces projektowo-konstrukcyjny).
    Własny projekt elektroniki wyszedł przypadkiem w ostatnim momencie, bo nowoczesny drogi sprzęt na którym miałem zrobić sterownik po prostu był do niczego.

    Biorąc się za tworzenie własnego sterownika od podstaw i tak daleko przekroczyłem zakres mojej pracy.
  • #10
    User removed account
    Level 1  
  • #11
    tmf
    Moderator of Microcontroller designs
    A czy ja gdzieś napisałem, że nie można? Wręcz przeciwnie, pokusiłem się o porównianie zaproponowajej ATMega8, z XMEGA. Dlaczego akurat XMEGA? Wcale nie z powodów marketingowych. Znam oba procki (a marketingowo jest mi obojętne, który autor wybierze), i wiem jakie ograniczenia ma timer w ATMega8. O ile wygenerowanie przebiegu o zadanej częstotliwości zazwyczaj nie jest problemem (tryb CTC się do tego doskonale nadaje), to pewnym problemem jest wygenerowanie przebiegu PPM dla serwa. W timerze XMEGA jest to łatwiejsze. A ponieważ autor pisze w BASCOMie, zasadniczo typ procesora jest mu obojętny - i tak wszystko pokrywają biblioteki Bascomowe, wspierające obie rodziny. Drugim argumentem jest potencjalna możliwość braku timerów. M8 ma tylko 3 timery. Można więc pójść albo w kierunku większych AVRów - tylko po co (koszty), albo np. w kierunku XMEGA E5, w której timerów nie zabraknie. Można też wziąć Cortex M0, lub losowo wybrany inny współczesny procesor, bez znaczenia, bo liczą się tylko timery. Problem w tym, że autor pisze o Bascomie, a o ile wiem język ten nie występuje w wersji na ARMy ani dsPICe.
    Zjechałeś też gościa równo - chyba trochę bez zastanowienia. Ja to odbieram, że gość robi zupełnie coś innego, a ten MCU wyszedł przy okazji i coś trzeba z tym zrobić. Ja bym na tej podstawie nie przesądzał o jakości pracy, bo naoglądałem się trochę prac i tu i za oceanem i wiem, że kity są wszędzie, a liczba dobrych prac aż tak bardzo się nie różni. Co nie zmienia faktu, że twoje uwagi, podobnie jak kolegi BlueDraco są jak najbardziej słuszne i autor z pewnością powinien je przemyśleć. Zresztą z tego przemyślenia mam wrażenie, że wynikła już rezygnacja z pomysłu użycia trzech MCU.
  • #12
    taramis88
    Level 11  
    Dziękuję tmf za obronę.
    W temacie nie chciałem nikogo prosić o wykonanie za mnie projektu, bo to ma być moja praca. Tylko o pomoc przy ustaleniu konkretnej koncepcji, która będzie sensowna i będę wiedział, że jest wykonywalna (jako dyplomant mam chyba prawo do konsultacji, jeżeli w koło nie było nikogo biegłego w temacie, to zwróciłem się na forum). Kolejno zamierzam trzymać się już tej wybranej koncepcji i zrobić projekt. Bo w końcu liczy się efekt. W desperacji zacząłem wymyślać różne głupoty, samemu sobie komplikując życie.
    Spróbuję jednak wszystko postawić na 1x Mega8.. jak zabraknie, to zakupię coś większego.

    ps. Obiecuję, że po popełnieniu pracy nie będę miał tytułu z dziedziny elektroniki. :)
  • #13
    User removed account
    Level 1  
  • #14
    taramis88
    Level 11  
    Praca wykonana i wszystko działa.
    Temat dotyczył szukania koncepcji więc go zamykam.
    W wolnym czasie napiszę osobny artykuł z opisem sterownika.