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.

Programowanie kilku mikrokontrolerów przez jedno złącze isp

golas17 19 Sie 2009 20:39 4793 36
  • #1 19 Sie 2009 20:39
    golas17
    Poziom 16  

    Witam,
    Zacząłem bawić się komunikacją między procesorami i już przy pierwszym projekcie mam taki problem: mam dwa procesory komunikujące się poprzez spi na jednej płytce. Prosiłbym o informacje nt. połączenia podczas programowania procesorów. Czy np. kiedy programuję jeden procesor, to muszę odłączać linie MOSI, MISO, SCK, RESET od drugie procesora i odwrotnie? Zakładam że mam jedno złącze isp.

    0 29
  • #2 19 Sie 2009 20:43
    riddyk
    Poziom 19  

    Witam, wystarczy, że z tego którego nie chcesz programować odłączysz sygnał reset, np po przez zworkę, ale musisz to uwzględnić w płytce pcb. Albo tak sprytnie zrobić program że wyborem odpowiedniego stanu pinu przyjmuje inny algorytm działania.

    0
  • #3 19 Sie 2009 20:48
    loocasm
    Poziom 14  

    Jakikolwiek byłby ten "inny algorytm działania" w danej chwili, reset i tak go zresetuje, jeżeli jest wciąż podłączony... Chyba, że się mylę..

    0
  • #4 19 Sie 2009 20:52
    golas17
    Poziom 16  

    Myślałem o czymś podobnym, ale miałem wątpliwości... Czy to nie spowoduje jakichś niespodziewanych problemów w sytuacji gdy np. załączam zworkę resetu na slave'a i zaczynam programowanie. W tym czasie master dalej wykonuje swój program i może wysyłać dane do slave w tym samym czasie co programator. Nie powstanie jakiś bałagan?

    0
  • #5 19 Sie 2009 20:58
    marek_Łódź
    Poziom 36  

    Może się zrobić kaszana. Trzeba by rozdzielić sygnał a przełączniku wielostykowym ("isostat") albo przez łączniki elektroniczne.
    W ostateczności można je rozdzielić rezystorami (oddzielne rezystory na liniach sygnałowych obu procesorów).
    Oczywiście SPI między procesorami by działało też przez te rezystory, a po uruchomieniu można by wstawić zworki.

    0
  • #6 19 Sie 2009 21:46
    golas17
    Poziom 16  

    Albo zastosować dipswitch? Co myślisz? Spróbuje zaraz namalować jakiś rysunek do kontroli wstępnej

    Dodano po 33 [minuty]:

    Coś w ten deseń będzie pewnie działać.
    Programowanie kilku mikrokontrolerów przez jedno złącze isp

    0
  • #7 20 Sie 2009 08:26
    loocasm
    Poziom 14  

    Dwa dipswitche od strony Atmeg albo zworki na goldpinach - co wygodniej / taniej Ci zrobić :) Wtedy masz 100% pewności, że nic się nie skasztani.

    0
  • #8 20 Sie 2009 09:35
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nie musisz przelaczac wszystkich sygnalow, wystarczy sam RESET. I BTW, jakie procesory masz na plytce? Bo np. ATMega128 ma na zupelnie innych pinach ISP i SPI.

    0
  • #9 20 Sie 2009 19:28
    golas17
    Poziom 16  

    Mam Atmega16 i Atmega8. Co do samego sterowania resetem, to kilka postów wyżej doszliśmy z markiem_Łódź do wniosku że lepiej tego nie robić. Najpewniejszym sposobem jest na pewno rozdzielenie wszystkich linii. A bardzo jestem ciekawy tego rozwiązania z rezystorami... Mógłby ktoś kto wie dokładniej o co chodzi wrzucić jakiś schemat? Albo dokładnie wytłumaczyć w dwóch trzech zdaniach. Będę wdzięczny

    0
  • #10 20 Sie 2009 19:47
    janbernat
    Poziom 38  

    Twój schemat na dipswitchach nie przełącza resetu z programatora a powinien.
    Czyli cztery dipswitche.
    A czy wystarczy sam reset przełączać- mam wątpliwości.
    Jak master w trakcie programowania coś zacznie nadawać to slave dostanie g... nie program.

    Dodano po 14 [minuty]:

    Rezystory oddzielające resztę układu od MOSI, MISO itd. sprawdzają się (ok. 470 Ohm w szereg do reszty układu) jeśli te końcówki podłączone są do elementów niskoomowych w układzie- jakaś baza tranzystora np.
    Wtedy we-wy programatora nie jest obciążone i prawidłowo programuje procesor.
    I tak procesor ją wysteruje jak po zaprogramowaniu końcówka MOSI itp. będzie wyjściem.
    Ale jak to będzie SPI to patrz wyżej co napisał marek_Łódź.

    0
  • #11 20 Sie 2009 19:53
    manekinen
    Poziom 29  

    A czy nie lepiej obydwa procesory wprowadzić w stan resetu, a jednemu z nich odłączyć linię SCK? Wtedy był by to tylko przełącznik na jednej linii. Drugi procesor w stanie resetu na pewno nic nie nada, ani nie zareaguje na sygnały od programatora, jeśli nie dostanie sygnału zegarowego. No, chyba że w stanie resetu wyjściowa linia danych jest ściągana do zasilania lub masy to programator będzie miał problem wcisnąć tam przeciwny stan logiczny... ale to już trzeba by było zajrzeć w notę do rozdziału programowania.

    0
  • #12 20 Sie 2009 20:01
    golas17
    Poziom 16  

    Niezła myśl manekinen... A myślisz, że można zewrzeć ze sobą resety i pozwolić programatorowi resetować układy kiedy to będzie potrzebne, czy raczej dać zworki na każdy reset i wtedy sygnał resetu z programatora w ogóle nie byłby używany? Co sądzisz?

    0
  • #13 20 Sie 2009 20:17
    bolek
    Specjalista - oświetlenie sceniczne

    diody, pull'upy i zworka na reset?

    0
  • #14 20 Sie 2009 20:19
    golas17
    Poziom 16  

    Może rozwiń myśl bolek...

    0
  • #15 20 Sie 2009 20:26
    bolek
    Specjalista - oświetlenie sceniczne

    No bo resety masz tylko do programowania(?). Rozdzielasz je dwiema diodami, jednego usypiasz (zworka) żeby nie kolidował w komunikacji pomiedzy PC a drugim prockiem i gitara. Nie?;/

    0
  • #16 20 Sie 2009 20:39
    manekinen
    Poziom 29  

    No ok, jednego usypiasz resetem, a drugiego programatorem? Więc obydwa będą w stanie resetu i obydwa odpowiedzą na sygnał programatora.

    Albo nie zajarzyłem :)


    DODANO

    golas17 napisał:
    A myślisz, że można zewrzeć ze sobą resety i pozwolić programatorowi resetować układy kiedy to będzie potrzebne, czy raczej dać zworki na każdy reset i wtedy sygnał resetu z programatora w ogóle nie byłby używany? Co sądzisz?

    Oczywiście że może to robić programator. Próbuje doczytać w nocie jak się zachowuje linia MISO po podaniu resetu, nie bardzo widzę. Ale mikroprocesor przejdzie w tryb programowania dopiero po wysłaniu instrukcji "programming enable" liniami SCK i MOSI, więc bez linii SCK takiej instrukcji nie otrzyma nawet - i możliwe że linia MISO będzie wejściem które nie będzie przeszkadzało w kominikacji drugi uC - programator. Musiał byś sprawdzić praktycznie albo doczytać gdzieś w jakiejś dedykowanej nocie atmela o ISP.


    DODANO

    Cytat:
    The Port B pins are tri-stated when a reset
    condition becomes active...

    I tyczy się to wszystkich portów. Więc resetujesz obydwa, od tego niechcianego odłączasz MOSI albo SCK aby nic nie odebrał.

    0
  • #17 20 Sie 2009 21:06
    bolek
    Specjalista - oświetlenie sceniczne

    No w sumie tak, masz racje. Nawet nie wiem na tą chwile czy programator daje tylko impuls resetu, czy ciągły stan.

    Można by jeszcze inaczej. Zrobić tak soft że wciśniecie jakiegoś guzika, spowoduje ustawienie ISP jako wejścia. Oczywiście trzeba tez odciąć od niego ten reset

    0
  • #18 20 Sie 2009 21:27
    golas17
    Poziom 16  

    Sprawdziłem na pająku twój pomysł manekinen. Wszystko działa poprawnie. Resety połączyłem i podłączyłem pod programator. Sterowałem tylko linią SCK. Mam jeszcze pytanie: czy jest to uniwersalny? Czy może w przypadku gdybym miał na przykład 8 uC na jednej płytce, to resetów nie mógłbym połączyć razem? (czy nie stało by się nic wyjściu programatora? jakieś przeciążenie etc.?)

    0
  • #19 20 Sie 2009 22:01
    manekinen
    Poziom 29  

    8 układów mówisz? Sporo to będzie przełączników... Na pinie resetu jest wewnętrzny rezystor podciągający (nie pamiętam teraz jaki), najlepiej zmierz ile prądu potrzeba do ściągnięcia resetu w dół, i zakładając że wyjście programatora da 20mA, policz ile procesorów możesz podłączyć... jak się okaże że za mało, dasz odpowiedni tranzystor...

    Dobrze wiedzieć że działa :)

    0
  • #20 20 Sie 2009 22:05
    rpal
    Poziom 27  

    Drogi kolego chcesz wyważyć otwarte drzwi zerknij na ten link który zawiera schemat minimodułu dla Atmega16 i zwróć uwagę na kość 4053B. Dzięki zastosowaniu tego scalaka pozbędziesz się problemu przełączania końcówek SPI podczas procesu programowania. Proste i bezawaryjne poza tym obywa się bez przełączników mechanicznych czy też dip-ów. Koszt rzędu 1-2 zł.Link

    0
  • #21 21 Sie 2009 16:48
    golas17
    Poziom 16  

    Interesująca kostka, ale nie widzę dla niej zastosowania w moim układzie. Dwa komunikujące się procesory i programowanie jednego lub drugiego z nich... To by musiały być trzy komplety sygnałów przełączane przez tą kosteczkę. A ty jak to widzisz rpal?

    0
  • #22 22 Sie 2009 00:32
    rpal
    Poziom 27  

    Dwie kości i jeden przełącznik. Przełączanie kości następuje zerowym poziomem resetu więc przęłącznik spełniałby swoją role nie powodując zakłoceń. Stała dodatnia polaryzacja wymuszona poprzez oporniki pod sygnałem reset dla każdego z procesorów załawia sprawe. No chyba ze wolisz DIP-y wybór nalezy do Ciebie.

    0
  • #23 22 Sie 2009 14:31
    golas17
    Poziom 16  

    Programowanie kilku mikrokontrolerów przez jedno złącze isp
    Coś takiego wykombinowałem. O to chodziło? Proszę o sprawdzenie
    Zakładam zworkę na piny 1 i 2 SV1 wtedy kiedy chcę żeby procesory normalnie pracowały i się komunikowały lub wtedy kiedy chcę programować atmega8 a zdejmuję zworkę wtedy kiedy chcę programować atmega16. Będzie to działać?
    I jeszcze jedno. Połączyłem resety razem. Chyba tak powinno być prawda?

    0
  • #24 22 Sie 2009 21:45
    rpal
    Poziom 27  

    golas17 napisał:
    Połączyłem resety razem. Chyba tak powinno być prawda?

    Przyznam się że nie mam głowy do analizowania schematu ale dwa resety razem to nei najlepszy pomysł ponieważ linia reset podczas programowania wprowadza przez podanie sygnału LOW, procesor w stan programowania więc czym będziesz przełaczał procesory ? co najwyzej przełacznikiem? Dlatego też jeśli linie reset puścisz przez przełącznik podciągając kości przełącznika analogowego przez oporniki do +VCC to własnie w ten sposób osiągniesz wybór odpowiedniego procesora. Zatem jeszcze raz, reset tak jak w podanym przeze mnie przykładzie strobuje przełącznik 4053 natomiast musi on być przełączany w zależności od wyboru procesora na odpowiednią kość 4053.

    0
  • #25 22 Sie 2009 22:53
    golas17
    Poziom 16  

    Tym sposobem który opisujesz da się zaprogramować jeden lub drugi procesor, ale jakoś nie mogę znaleźć sposobu żeby jeszcze normalnie się komunikowały przez spi. Jeżeli znajdziesz chwilę czasu to namaluj jakiś schemacik. Dzięki

    0
  • #26 23 Sie 2009 01:20
    rpal
    Poziom 27  

    W linku masz schemacik. Cała sztuczka polega na tym że stosujesz "elektroniczny przekaźnik". W normalnym stanie któremu odpowiada poziom HIGH na zwartych liniach A,B,C, linie MOSI,MISO,SCK są "wypuszczane" na zewnątrz i można je traktować jak linie procesora używane dowolnie, np. do komunikacji po SPI albo do czegokolwiek innego w twoim układzie.
    Jeśli te linie otrzymają poziom LOW, który jest uzyskiwany z programatora następuje przełączenie linii MOSI,MISO,SCK na końcówki programatora a "układ" wisi w powietrzy bo został rozłączony od procesora. Dzięki temu programowanie nie jest zakłócone co może wystąpić kiedy masz na tych samych liniach MOSI,MISO,SCK układy które są skierowane swoimi wyjściami w stronę tych końcówek procesora. Ma to miejsce np. w ukłądach SPI(pamięci, przetworniki, ect...).
    Ponieważ linie A,B,C są sterowane poziomem napięć od linii RESET i przełączanie wymusza programator z tego powodu, raz muszą być na stałe podłaczone do RESET-u procesora , dwa muszą mieć wymuszony poziom HIGH za pomocą opornika np. 10k podłączonego do +VCC a co najważnejsze dla ciebie powinny być przełączane jakimś przełącznikiem aby wybierać właściwy do zaprogramowania układ. Czy teraz już zajarzyłeś ? :) O schemat mnie nie proś, sam sobie napisz kiedy pojmiesz o co chodzi. Masz wędkę a ryby łów sam :)

    0
  • #27 23 Sie 2009 01:45
    MatrixCat
    Poziom 10  

    Nie prościej byłoby po prostu odcinać zasilania do tych procesorów, które nie mają być zaprogramowane? Czy reset, czy zasilanie, i tak wszystkie procesory muszą stanąć żeby zaprogramować jeden procesor. Przy np 8 procesorach to już trzeba zadbać o jakąś adresację (chociażby ręczną na DIPswitchach) a bez bootloadera a la Arduino i własnej aplikacji programującej... Kiedyś kombinowałem jak po szynie RS485 zdalnie podać program do jednej z wielu jednostek, ale prostsze okazało się wyciągnąć jednostkę przeprogramować i włożyć z powrotem. =)

    0
  • #28 23 Sie 2009 13:42
    golas17
    Poziom 16  

    Myślę, że zajarzyłem. Zamieszczam schemat. W trakcie programowania mastera (atmega16) układ slave (atmega8) dostaje co prawda sygnały mosi, miso, sck, ale nie jest resetowany więc traktuje to jako przychodzące dane z którymi nic nie zrobi(tak mi się wydaje). Natomiast kiedy programuję slave, to master nie ma dostępu do slave - linie mosi, miso,sck są rozdzielone pomiedzy masterem i slavem. Zworką wybieram który układ chcę programować (ewentualnie przełącznikiem).
    Co do odcinania zasilania... Pomysł też pewnie skuteczny, ale jeżeli poniższy układ jest poprawny to zastosuję właśnie takie rozwiązania ponieważ wydaje mi się bardziej eleganckie.
    Programowanie kilku mikrokontrolerów przez jedno złącze isp

    0
  • #29 23 Sie 2009 14:55
    downybear
    Poziom 10  

    [quote="golas17"]Myślę, że zajarzyłem. Zamieszczam schemat.

    Witaj,
    zrobiłem coś takiego kilka lat temu i działa bez problemu.
    Układ może być znacznie prostszy :).

    Wystarczy NIE podawać zegara programującego (clk), na procesor, którego NIE programujesz, a wszystkie pozostałe nogi mogą być zwarte na zawsze (o ile to możliwe w danym systemie).

    W moich systemach załatwiałem to kluczami analogowymi 4066 albo 4052.
    4052 wymaga mniej logiki, tylko adresujesz jedną nogą wyjście na jeden lub drugi procesor.

    405x ma nawet do 4- multiplekserów, a więc elegancko masz nawet 4 procki do programowania i tylko adresujesz na który z nich ma iść CLK.

    Idąc dalej możesz na 405x przełączać więcej niz jeden sygnał, jeśli linie programujące procków nie mogą być zwarte na stałe.

    Mariusz

    0
  • #30 23 Sie 2009 16:56
    golas17
    Poziom 16  

    W momencie kiedy odłączam tylko sam sygnał SCK, a pozostałe linie komunikacyjne są zwarte będzie problem. W sytuacji kiedy akurat trwa programowanie jakiegoś układu slave - w tym samym czasie master może wystawiać na linie danych jakieś informacje które zmieszają się z programem wgrywanym do kości. Także kicha.

    0