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

separacja galwaniczna 2 układów ATMega

rpal 08 Lut 2010 12:03 2469 10
REKLAMA
  • #1 7661845
    rpal
    Poziom 27  
    mam dość niecodzienny problem a dotyczy on 2 szt atmega pracujących we wspólnym układzie. "mały" atmel coś tam sobie robi i jego zadaniem jest na żadane "duzego" wysyła informacji po SPI. Tak więc pracuje on w trybie slave i jedyne czym jest prodłaczony do drgiego układu są : masa,mosi,miso,sck,cs. Do testów zasilan ten układ z innego żródła zasilania. Okazuje się jednak że jeśli od ukłądu slave odłaczę zasilania to pracuje on dalej ? W układzie podrzędnym końcówka miso jest ustawiona jako wejście bez podciągania, pozostałe jako wyjścia z ustawionymi na starcie 0 na reszcie końcówek. W układzie nadrzędnym odwrotnie miso jest wejściem bez podciągania reszta zas wyjściem z pierwotnym stanem 0. generalnie zasilanie będzie do tego wspólne jednak przy okazji mam pewne kłopoty z wysyłąniem danych z układu slave. Bez żadnej reguły (kiedy i dlaczego) układ slave nie wysyła wszystkich zamierzonych danych. Obsługa dzieje się w przerwaniu, procedura jest banalna i zastanawiam się czy samo przerwanie zabiera zbyt wiele czasu czy np. dziwne "zasilanie" nie jest powodem tego zachowania.
  • REKLAMA
  • #2 7661903
    kamyczek
    Poziom 38  
    Mikrokontrolery powinny pracować poprawnie mając wspólną masę i odpowidnio połaczone linie miso mosi i sck. Wartość zasilania dla obu układów powinna być jednakowa .Możliwe ze masz problem z obsługą przerwania lub czasem jego realizacji
  • REKLAMA
  • REKLAMA
  • #4 7662410
    rpal
    Poziom 27  
    mirekk36 napisał:
    Zastosuj bufory 74HCT125 na liniach SPI sterowane z Mastera i gdy Master je wyłączy to Slave nie będzie dostawał "dziwnego" zasilania po liniach SPI.

    czy mam rozumieć że to normalka w takim przypadku ? Poza tym jedyną linią zdatną do strobowania bufora to CS, ona też ma być buforowana ?
  • #5 7663087
    tmf
    VIP Zasłużony dla elektroda
    Wlasciwie norma. Jesli slave jest bez zasilania, a na jednej z koncowek jest stan wysoki, to przez wewnetrzne diody zabezpieczajace plynie prad od tego pinu do reszty ukladu. Przy malym zapotrzebowaniu na prad wspolczesnych procesorow moze on byc wystarczajacy do zasilenia go i poprawnej pracy. Jesli ci to przeszkadza to doloz bufor trojstanowy, albo transoptory - dodatkowo te ostatnie zapewnia ci izolacje galwaniczna jesli takowej potrzebujesz.
  • #6 7664316
    xury
    Specjalista automatyka domowa
    100% racja. Ja przez niedopatrzenie zapomniałem dociągnąć zasilanie do uC, a ten mimo to działał. "Zasilił" się przez UART i gdyby nie, wyłączenie telefonu z którego się procek zasilał, prawdopodobnie bym to przeoczył.
  • REKLAMA
  • #7 7664676
    rpal
    Poziom 27  
    w niczym mi to nie przeszkadza ponieważ docelowo napięcie zasilania będzie wspólne kłopot jest w tym że pojawiają mi się błędy w obsłudze przerwania SPI i nie wiem czy to nie jest przypadkiem przyczyną. SPI obsługuje przerwanie które w zasadzie nic innego nie robi jak przy wejściu czysci (odczytuje) SPDR,profilaktyczne SPSR i ładuje do SPDR znak do wysłania i to wszystko. Bład polega na tym że czasem (bo zasadniczo jest OK) gubiony jest jeden ze znaków z bufora nadawczego układu slave a w to miejsce jest wsyłany znak który nadszedł od master ?
  • #8 7664715
    _Robak_
    Poziom 33  
    Jeśli masz te problemy tylko przy braku zasilania, to je po prostu podłącz i sprawdź czy działa :)
  • #9 7665644
    rpal
    Poziom 27  
    na razie nie chcę bo musiałbym w układzie testowym ciąć scieżki, natomiast dość ważną rzecz mi tu kol. mirek36 uświadomił czyli buforowanie wyjścia miso dla układu slave. Niby to szczegół ale ta linia nie powinna (tak mi się zdaje) stanowić obciążenia SPI tylko być odcinana tak jak większość specjalizowanych układów SPI. Zwłaszcza kiedy na SPI pracują inne układy. Możliwe też że 20 cm przewódów które tworzą luźny pająk nie są właściwym "medium" do tej transmisji :) Bo jak teraz zauważyłem "zaekranowanie" jej moją ręką znacząco zmienia przesyłanych danych (na plus oczywiście). To sie nazywa ręce które leczą :)
  • #10 7665813
    Dr_DEAD
    Poziom 28  
    rpal napisał:
    na razie nie chcę bo musiałbym w układzie testowym ciąć scieżki, natomiast dość ważną rzecz mi tu kol. mirek36 uświadomił czyli buforowanie wyjścia miso dla układu slave. Niby to szczegół ale ta linia nie powinna (tak mi się zdaje) stanowić obciążenia SPI tylko być odcinana tak jak większość specjalizowanych układów SPI. Zwłaszcza kiedy na SPI pracują inne układy. Możliwe też że 20 cm przewódów które tworzą luźny pająk nie są właściwym "medium" do tej transmisji :) Bo jak teraz zauważyłem "zaekranowanie" jej moją ręką znacząco zmienia przesyłanych danych (na plus oczywiście). To sie nazywa ręce które leczą :)

    Coś za dużo kombinujesz, ile urządzeń masz na tym SPI?, jak długie będą ścieżki? wszystko zasilane jednym napięciem?
    Do wybierania Slejwa służy CS i tego się trzymaj. Obejrzyj transmisję oscyloskopem, jak zbocza są ostre to nie trzeba żadnych buforów, a jak są problemy to obniż szybkość transmisji, dodatkowe bufory to moim zdaniem ostateczność.
    Aha, no i przede wszystkim znajdź błąd w programie :-).
  • #11 7665883
    rpal
    Poziom 27  
    na spi ma być 5 urządzeń, sprawdzam na najmniejszej prędkości , w testach doszedłem do 4MHz ale przy tej prędkości już przerwanie się nie wyrabiało więc obniżyłem. A co do błedów szukam tylko nie mam speclajnie już nić do wyłowienia, bo niby gdzie ?
    
    ISR(SPI_STC_vect){
    unsigned char data;
    
    	data=SPDR;
    	// 0 - odczyt danej z tablicy wg aktualnego wskaznika
    	if(data == 0 ){
    		// zapis danej do pierszego odczytania
    		ptr++;
    		SPDR=DATA.tbl[ptr];
    	}
    	// 1 - reset indeksu tablicy, przygotowanie pierszego znaku do odczytania
    	// zerowanie indeksu tablicy
    	if(data == 1){
    		// zerowanie wskaznika
    		ptr=0;
    		// zapis danej do pierszego odczytania
    		SPDR=DATA.tbl[ptr];
    	}
    	data=SPSR;
    }

    odczyt od mastera zaczyna się przez wysłanie jeden a następnie 15 zer które każdorazowo wysyłają 1 bajt ze slave (tablica danych). Dla pewności po transmisji kazdego bajtu z mastera zmieniam poziom z 0 na 1, początek transmisji oczywiście w odwrotnej sekwencji 1 na 0. Może jest coś czego nie widzę ?
    Upewniłem się i mam 99% pewności ze winne są zakłócenia na plątaninie kabli. Dzięki kol. mirekk36 za podpowiedź odnośnie buforów.
REKLAMA