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

Dwa AVRe i ich programowanie

tukson 04 Sty 2011 19:41 1284 9
REKLAMA
  • #1 8957667
    tukson
    Poziom 11  
    Witam,

    Mam taki dylemat. W projekcie muszę wykorzystać Attiny2313 i Atmege32. Będą musiały ze sobą się komunikować. Wybrałem, że za pomocą SPI. Attiny jako slave i atmega jako master. Będzie jeszcze jeden slave - enc28j60.

    Połączyłem MOSI z MOSI, MISO z MISO, SCK z SCK no i dodatkowo dwie inne linie, INT w jedna, i INT w druga stronę - tak w razie czego jakbym do czegoś to potrzebował (CS?). Nie kodowałem jeszcze komunikacji pomiędzy AVRami.

    Ale zastanawia mnie co się będzie działo jak będę chciał zaprogramować za pomocą ISP jednego z AVR? Wymyśliłem zworkę, przełączanie RESETu ze złącza ISP na jeden albo drugi kontroler, ale nie jestem pewien jak się zachowa jeden z kontrolerów przy programowaniu drugiego - czy nie będzie problemów z komunikacja?

    pozdrawiam





    pozdrawiam
  • REKLAMA
  • #2 8958025
    tmf
    VIP Zasłużony dla elektroda
    No to źle to podłączyłeś. SCK ma iść do SCK, ale MOSI ma być połączone z MISO i MISO z MOSI. Rozwiń sobie te skróty to będziesz wiedział dlaczego. W przypadku slave potrzebujesz jeszcze podłączyć sygnał SS.
    Teraz programowanie - tu się robi problem, bo te same linie co do SPI są wykorzystywane do ISP. A to wymaga połączenia MOSI z MOSI i MISO z MISO obu procesorów, czyli dokłądnie odwrotnie niż w wymaganej przez ciebie konfiguracji master-slave SPI. No i robi się kaplica. Tylko jakieś skomplikowane zworki przełączane na czas programowania lub klucze cygfrowe cię uratują. Więc może nie tędy droga - napisz jakie jest uzasadnienie dla stosowania dwóch procesorów. Mogę się założyć, że da się to prościej zrealizować na jednym (wykorzystany interfejs SPI sugeruje, że są one na jednej płytce). A jeśli się nie da to wykorzystaj UART synchroniczny, z SCK. Wychodzi prawie jak SPI tyle, że lepiej :)
  • REKLAMA
  • #3 8958070
    tukson
    Poziom 11  
    tmf napisał:
    No to źle to podłączyłeś. SCK ma iść do SCK, ale MOSI ma być połączone z MISO i MISO z MOSI. Rozwiń sobie te skróty to będziesz wiedział dlaczego. W przypadku slave potrzebujesz jeszcze podłączyć sygnał SS.


    Attiny2313 nie ma wyprowadzenia SS.

    "The USI Three-wire mode is compliant to the Serial Peripheral Interface (SPI) mode 0 and 1, but
    does not have the slave select (SS) pin functionality. However, this feature can be implemented
    in software if necessary."


    Dlatego są dodatkowe linie.



    Ponadto gdy przestawi się w tryb SLAVE to MOSI/MISO zamieniają się funkcjami.

    Aczkolwiek rozwinę skróty:
    Master Out Slave In line (MOSI)
    the Master In Slave Out line (MISO)

    SLAVE MASTER
    MOSI - Input MOSI - Output
    MISO - Output MISO - Input

    Więc jak najbardziej MOSI łączy się z MOSI i MISO z MISO.

    pozdrawiam
  • #4 8958135
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 8958167
    tukson
    Poziom 11  
    atom1477 napisał:
    tukson napisał:
    Ponadto gdy przestawi się w tryb SLAVE to MOSI/MISO zamieniają się miejscami.

    Niby w jaki sposób?


    Chodziło o ich funkcjonalność. Zrobiłem edit'a poprzedniego posta co by było jasne o co mi chodziło. (odpowiedziałeś szybciej).
  • #6 8958172
    tmf
    VIP Zasłużony dla elektroda
    Nie musi mieć wyprowadzenia tak oznaczonego, musisz zaimplementować funkcjonalność SS, bo masz dwa układy na SPI. Skoro MOSI/MISO zamieniają się miejscami to fajnie, ale ciągle jest problem - w trakcie programowania tylko jeden z procesorów będzie w stanie RESET, drugi będzie normalnie działał i w zależności od programu wystąpi konflikt na liniach MISO/MOSI. Z tego wniosek, że na czas programowania należałoby pozostałe układy utrzymywać w stanie RESET, tak aby ich piny były w stanie HiZ. Najprościej to zrobić pozostawiając połączone sygnały reset obu procesorów, ale rozłączać np. sygnał SCK, dzięki temu jeden z nich nie wejdzie w tryb programowania i nie będzie zakłócał transmisji. Można też tak napisać soft na obu procesorach, aby te linie domyślnie były utrzymywanie w stanie HiZ, z tym, że może to być trudne do zrobienia w przypadku mastera.
    No i ciągle podtrzymuję tezę podstawową - zapewne da się to zrobić na jednym procesorze.
  • #7 8958236
    tukson
    Poziom 11  
    tmf napisał:

    (...) Najprościej to zrobić pozostawiając połączone sygnały reset obu procesorów, ale rozłączać np. sygnał SCK, dzięki temu jeden z nich nie wejdzie w tryb programowania i nie będzie zakłócał transmisji.


    Jeżeli takie coś faktycznie będzie funkcjonowało to ostatecznie może być. Nie będzie mi przeszkadzał dodatkowo reset nieprogramowanego avr'a.

    tmf napisał:

    No i ciągle podtrzymuję tezę podstawową - zapewne da się to zrobić na jednym procesorze.


    Fajnie by było, ale okazało się to mniej niezawodne. (długa historia).

    pozdrawiam
  • #8 8958282
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #9 8958343
    kingofspace7
    Poziom 20  
    a ja to bym zastosował kolego podstawkę i na czas programowania jednego wypiąć drugi i na odwrót:D
  • #10 8958399
    tmf
    VIP Zasłużony dla elektroda
    tukson napisał:

    tmf napisał:

    No i ciągle podtrzymuję tezę podstawową - zapewne da się to zrobić na jednym procesorze.


    Fajnie by było, ale okazało się to mniej niezawodne. (długa historia).

    pozdrawiam


    To o tyle ciekawe, że niemożliwe. Jakby do tematu nie podejść to 2 procesory zawsze są bardziej zawodne niż jeden (no chyba, że wykorzystuje się je dla redundancji, co akturat dla dwóch nie sprawdza się i tak, bo jak zrobić np. majority voting, czy inaczej wykryć który oszukuje?).
    Co do SCK - zadziała na pewno, żeby wejść w tryb programowania należy pomanglować odpowiednio tą linią przy aktywnym resecie. Jak ją odłączysz to procesor po prostu będzie w resecie i tyle.
REKLAMA