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

Przesyłanie danych

13 Cze 2005 06:52 1602 6
  • Poziom 2  
    Czy da się na uprocku tiny2313 zrobić jak niżej:

    Ma on sterować za pomoca trzyliniowego interfejsuurządzonko.
    Czwarta linia dla EN czyli włączenia odbioru/nadawania

    Mam SO, SI, SCK. Czyli dane przychodzace wychodzace i zegar
    RS'a uzywam do komunikacji z kompem.
    Inne piny wolne.
    Mógłbym wysyłać/zczytywać dane bit po bicie. Ale taka procedura zajmuje wiecej znacznie niz 1 instrukcja więc jak podam SCK to dane beda wysyłane/zczytywane co jakies 10 cykli zegarowych a urządzonko bedzie zczytywać co 1 cykl zegarowych

    Mam wysłać powiedzmy 10101010 10101010 czyli wysle 1 bit i nasteony bit się pojawi za jakies 10cykli zegarowych, a on zczyta bit 1111111 111 potem 000 i koniec.

    Czy da się w jakiś sposób robic żeby było dobze?
    Wielkie dzięki za wszelką pomoc
  • VIP Zasłużony dla elektroda
    Da się, tylko o co chodzi ? Schemat, kawałek kodu ? ATtiny2313 ma RS i SPI. Czy coś wiecej potrzebne, oprócz chęci do czytania dokumentacji ? ;)
  • Poziom 21  
    Nie wiadomo o co ci dokładnie chodzi. Domyślam się, że o to, że procek za wolno będzie przesyłał dane do urządzenia ??. SPI w Attiny2313 może w trybie master wysyłać/odbierać z prędkością fck/2, czyli przesłanie jednego bajta zajmie przynajmniej 16 cykli. Nie napisałeś, co to za "urządzonko" jaki ma interfejs. Jeśli SPI jest dla ciebie za wolne to musisz zrobic softwarowo jakiś interfejs równoległy, ale jeśli chcesz aby jeden bajt wysyłany był szybciej niż w 16cykli (teoretycznie mozna to zrobic w 5 cykli, zegar w dól, zaladowac danej do rejestru - instr. LD z postdekrementacja, załadowanie do portu wyjsciowego, zegar w góre) ale do tego jeszcze musisz dodać przygotowanie danych do wysłania, no i wtedy nie odbierasz jednoczesnie danych (tak jak to sie dzieje w SPI). Być może starczy zwiększyć zegar w ATTiny.
  • Poziom 2  
    Na rysunku 1 jest schemat dostępu do pamięci. Jak widać na ENabled dajemy stan nicki. Z opisu PDF wynika że jeżeli stan niski na SI bedzie się utrzymywał przez 1 cykl SCK nastepuje procedura odczytu/zapisu do pamieci. W związku z tym zostanie sprawdzony stan SI co 1 cykl zegara, zgadza się? A ja nie jestem w stanie wysłać następnego bitu w 1 cykl, minimum 7
    Jak dam SCK jako alternatywna funkcja sprzętowa portu B i:
    Ustawiam EN niski
    SI stan niski 1 cykl zegarowy
    Wysyłam 1bit na Si
    1cykl SCK NISKI-->>WYSOKI następuje odczyt
    2cykl SCK NISKI-->>WYSOKI odczyt
    3cykl SCK NISKI-->>WYSOKI odczyt
    itd
    i dopiero po 7 cyklach jestem w stanie wysłać 2 bit na SI, ale 1bit został odczytany nie raz ale 7razy bo tyle razy nastapiła zmianu z niskiego na wysoki na SCK.
    Więc nie moge używac sprzetowego SCK chyba że czegoś nie rozumiem. bo niby skąd pamięć jest tak sprytna że wie że mi zajmuje 7 cykli wysłanie następnego bitu. Odczytuje to co jest na SI co każdą zmianę stanu SCk niski-->wysokizdąże wysłać następny bit czy nie.

    W związku z tym moge myślałem jakie mam opcje i:

    1.Podzielic w jakiś sposób czestotliwość zegara podawaną na SCK żeby sie to zgadzało z częstotliwością z jaka jestem w stanie wysłac nowy bit na SI/. Troche opóżnień i dałoby sie to może zgrać
    2.Moge po wysłaniu bitu na SI zmienić stan SCK na wysoki i potem za pare cykli go znow zanegowac. I robić tak zawsze kiedy nowy bit jest wystawiony na SI. Tylko nie wiem czy to jest ok bo stan niski i wysoki będzie różnej długości, myślicie że to bez różnicy?
    Jakieś inne rozwiązania? Może ktoś ma procedury dostępu do pamięci dla interfejsu 3-liniowego nie uzywajac sprzetowego RS'a?
  • Poziom 21  
    Trevora napisał:

    Więc nie moge używac sprzetowego SCK chyba że czegoś nie rozumiem. bo niby skąd pamięć jest tak sprytna że wie że mi zajmuje 7 cykli wysłanie następnego bitu. Odczytuje to co jest na SI co każdą zmianę stanu SCk niski-->wysokizdąże wysłać następny bit czy nie.

    W związku z tym moge myślałem jakie mam opcje i:

    1.Podzielic w jakiś sposób czestotliwość zegara podawaną na SCK żeby się to zgadzało z częstotliwością z jaka jestem w stanie wysłac nowy bit na SI/. Troche opóżnień i dałoby się to może zgrać
    2.Moge po wysłaniu bitu na SI zmienić stan SCK na wysoki i potem za pare cykli go znow zanegowac. I robić tak zawsze kiedy nowy bit jest wystawiony na SI. Tylko nie wiem czy to jest ok bo stan niski i wysoki będzie różnej długości, myślicie że to bez różnicy?
    Jakieś inne rozwiązania? Może ktoś ma procedury dostępu do pamięci dla interfejsu 3-liniowego nie uzywajac sprzetowego RS'a?


    Witam.

    Co do pytania drugiego, w większości przypadków tak możesz, że dwie "połowki" tego samego okresu SCK mają różne długości, ale możesz też część z tych 7 cykli rozdzielić pomiędzy te "połówki".

    Z tego co widze, to że ten odczyt chyba nie jest całkowicie sprzętowy, a powinien ... ale w tym momencie tone w domysłach, więc mam do ciebie pare pytań :
    1. Podaj oznaczenie pamięci, a najlepiej link do datasheeta
    2. Z jaka częstotliwością jest taktowany AVR ??
    3. Kto wystwawia zegar SCK ?? Czyli kto jest masterem ?? (wyjaśni się jak podasz datasheeta)
    4. Jak to podłączyłeś do procka : bezpośrednio czy przez jakieś rezystory itd. Jeśli bezpośrednio to napisz tylko który pin z którym są połączone. Jeśli to jest bardziej skomplikowane to zapodaj schemat

    Wtedy będziemy ci mogli pomóć.

    Powodzenia
  • Poziom 2  
    Problem w tym że nie widze na niej żadnych oznaczeń jest chyba bezfirmowa a info do niej 1stronnicowe, tylko ten rys, połączenie do pinów, i 3zdania jak włączyć zapis odczyt. Na SCK moge podać max 1MhZ. A SCK wystawiam z procka i jestem Masterem. Nie widać też ze schematu połączenie żeby wymagało jakiś rezystorow.
    Ale skoro myślisz że sposob 2 podziała to moze spróbuje w ten sposób
  • Poziom 21  
    Trevora napisał:
    Problem w tym że nie widze na niej żadnych oznaczeń jest chyba bezfirmowa a info do niej 1stronnicowe, tylko ten rys, połączenie do pinów, i 3zdania jak włączyć zapis odczyt. Na SCK moge podać max 1MhZ. A SCK wystawiam z procka i jestem Masterem. Nie widać też ze schematu połączenie żeby wymagało jakiś rezystorow.
    Ale skoro myślisz że sposob 2 podziała to moze spróbuje w ten sposób


    Z tego co widze z powyższego schematu to jedna linia jest dwukierunkowa. Mozna to zrobić w całości sprzętowo, po odpowiednim podłączeniu pamięci. Port danych w pamięci łączysz bezpośrednio z portem SO. A port SI łączysz z portem danych w pamięci (no i jednocześnie SO) przez rezystor 5k. I teraz ustawiasz SCK aby oczywiście nie było za szybkie (sugeruje, przynajmniej na początek słabą prędkość około 200 kHz). Do rejestru USIDR ładujesz następującą liczbe (kolejne bity od najstarzego bitu) 1,0,R/W, dalej 5 bitów adresu jak na rysunku (od najstarszego). Wysyłasz. I teraz jeśli to miał być zapis to oczywiście jako drugi bajt do USIDR wstawiasz bajt który chcesz wysłac. Jeśli to ma być odczyt to jako drugi bajt zapodaj same jedynki, lub same zera. Wtedy pamięć zacznie odpowiadać i na linii SO, a linia SI nie bedzie przeszkadzała, bo jest podłączona przez rezystor, a po przesłaniu bajtu, w USIDR będziesz miał bajt odczytany z pamięci. SCK i EN podłączasz bezpośredni. Jeśli ta przerwa, która jest na końcu tego wyjresu jest konieczna to załaduj same jedynki do USIDR i wyślij taki bajt. W ten sposób sprzętowo i nkładem bardzo małej mocy obliczeniowej obsłuzysz tą pamięć. Jeśli coś jeszcze by było nie tak, to wrzuć skan całej tej kartki z opisem, którą posiadasz.

    Powodzenia.