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

Jak skonfigurować komunikację między dwoma uC w BASCOM AVR?

MODI 21 Lis 2003 18:52 4120 23
REKLAMA
  • #1 408735
    MODI
    Poziom 17  
    Posty: 262
    Pomógł: 21
    Ocena: 16
    Witam
    Próbowałem na wiele sposobów porozumieć dwa uC ale jakoć nie wychodziło. Może ktoś z was już wie jak się to robi i chce się tym podzielić...

    Najlepiej gdyby to było w BASCOMie AVR.

    Z góry THX.
  • REKLAMA
  • #2 409205
    MichalKl
    Poziom 16  
    Posty: 258
    Pomógł: 8
    Ocena: 5
    Witam.
    Jezeli uart odpada(troche o tym jest na forum) to proponuje np:schiftin,schiftout-sam nie probowalem-ale w chelpie obsluga na bardzo latwa wyglad
  • #3 409712
    Wilku
    Poziom 17  
    Posty: 330
    Pomógł: 5
    Naprawdę nieźle robi się to poleceniami shiftin, shiftout. Sprawdzałem i działało jak chciałem :). Popróbuj właśnie w ten sposób.
  • #4 409759
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    Ja i tak proponuje uzyc uart bo i tak uzywamy dwoch lini do transmisji. Wlasciwie jezeli chcesz dane przekazywac tylko w jedna strone to mozna uzyc tylko jednej lini(wyjscie TXD poloczone z wejsciem RXD drugiego procka). I bardzo wazna rzecz. Jezeli masz kwarc 11.059200 i uzywasz zwyklej '51 i nadodatek ustawiasz baudrate=38400 to albo zmien kwarc albo baudrate, w raporcie tam gdzie sie sprawdza ile program zajmuje mozna zobaczyc aktualna wartosc baudrate jaka bedzie uzywana. Ja tak mialem ze w programie ustawialem 38400(kwarc 11059200) i zastanawialem sie czemu niedziala. Dopiero pozniej skapowalem sie ze zadeklarowanie baudrate nie wystarczy. Sprawdz to jezeli juz uzywasz UART.
  • #5 409867
    MichalKl
    Poziom 16  
    Posty: 258
    Pomógł: 8
    Ocena: 5
    Witam.
    Do szymtro-Bascm avr nie obsluguje 51.
    Na uart-cie odpada nam licznik t1(z tego co pamietam) i jezeli procki znajduja sie na tej samej plytce to chyba stosownie uarta misja sie z celem.Pozatym polecenia schiftin/out zajmuja mniej miejsca w pamieci procka.
    Avr-y obsluguja SPI-moze warto tez nad tym pomyslec.Zawsze mozna wykorzystac IIC-programowo moze nastreczyc problemow(tak mi sie wydaje) przy 2313itp,natomiast Chyba attiny12 posiadaja juz wbudowany interfejs iic
  • REKLAMA
  • #7 412157
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    Ludzie ustalcie czy to ma byc '51 czy AVR

    Zkładam że autor pytania pyta się o AVR

    Więc do UART , IIC , SPI dla AVR nie używa timerów !!! więc w czym problem ?


    Jedyne co w AVR uzywa timerów do "innych celów" to PWM ale to osobna bajka.

    Pozdrawiam Eagle

    P.S.

    A odnośnie pytania to nalezy zapytac autora o takie dane :

    czy opa proci są tego samego typu AVR - AVR , czy AVR - 51 ?

    jaka jest odległośc między nimi ( czy mają ten sam zegar taktujący) ?

    Jakiego transferu oczekuje ?

    Dopiero znając te możliwości można coś proponować
  • #8 412385
    MichalKl
    Poziom 16  
    Posty: 258
    Pomógł: 8
    Ocena: 5
    Witam
    piszesz ze nie mozesz uzyc uarta bo uzywasz timerow. to jak chcesz zrobic przesylanie bez timerow ???-kto tak napisał???

    Więc do UART , IIC , SPI dla AVR nie używa timerów !!! więc w czym problem ?-zgadzam sie-moja pomylka (napisalem z tego co pamietam).Za wprowadzenie w blad przepraszam.

    Przy schiftin/out-nie ma raczej roznicy czy sa tej samej rodziny czy moze rozne: 51-avr.-raczej na niewielkie odleglosci
    czy mają ten sam zegar taktujący-mozna jasniej-bo jezeli chodzi o rozne czestotliwosci kwarcow-no to tak czy owak problemu nie ma.....(odpowiednie procedurki)
    Jakiego transferu oczekuje -dobre pytanie.
    A tak wogole to mowa o avr-kach

    Pozdrawiam
  • #9 412522
    MODI
    Poziom 17  
    Posty: 262
    Pomógł: 21
    Ocena: 16
    Eagle napisał:
    czy opa proci są tego samego typu AVR - AVR , czy AVR - 51 ?

    jaka jest odległośc między nimi ( czy mają ten sam zegar taktujący) ?


    A wiec 2x AVR (AVR-AVR)
    qwarc 2x 8000000
    próbowałem funkciami shift (in/out) tylko jakoś nie wychodziło. Byłbym wdzięczny jeśli wysłały mi ktoś skrucony program.
  • #10 412746
    Wilku
    Poziom 17  
    Posty: 330
    Pomógł: 5
    Ja zrobiłem to tak:
    Nadawanie:
    Shiftout Dta , Clk , Outdta , 1
    Odbiór:
    Shiftin Dta , Clk , Indta , 4

    To oczywiście okrojone. Przesyłałem w ten sposób czas.
    Piszesz, że Ci coś nie działa. Nie dobrałeś przypadkiem parametrów
    w sposób 0-4 lub 1-5 ? Bo jeśli tak, to tu jest błąd. Programik pisałem
    pod `51.

    Powodzenia.
  • #11 414106
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    odbiór 232, napewno zadziała.
    ustaw jedynie prędkość transmisji taką samą w obu prockach
    żeby nadać to pisz:
    do
    wait 1
    print "test" ; chr(13)


    loop


    PS.
    o co chodzi z tymi punktami na forum?
    co podnosi ich liczbę?
    Załączniki:
    • 232.txt (817 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #12 414909
    MODI
    Poziom 17  
    Posty: 262
    Pomógł: 21
    Ocena: 16
    Komunikacja kilkoma przewodami mnie niezbyt interesuje chciałby użyć shiftin/out tylko niezabardzo wiem jak. :oops:
  • #13 414956
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    czy dwa piny to za dużo?
    ponadto odbiera dane w przerwaniu od rsa, jest więc jakby niewidoczny dla reszty programu. Nie musisz się martwić o odbiór, to samo odbierze i zmieni ci zmienną.
    dwa porty bo tak samo działa w obie strony.
    jak chcesz to rób na shift i przesyłaj po jednym bajcie( ja uważam że do tego jest UART) ponadto możesz zrobić nadawanie programowo i wtedy każdy port będzie mógł nadawać i odbierać
  • #14 2318998
    kemotz
    Poziom 11  
    Posty: 73
    Ocena: 11
    Polecam samosynchronizujące się kodowanie manchester. Handshaking mozna zrobić za pomocą timetouta bądź enkapsulować jakiś prosty protokół transmisji.
  • #15 2319237
    ZbeeGin
    Poziom 39  
    Posty: 4329
    Pomógł: 605
    Ocena: 463
    A może jednak trzy przewody, SPI i komunikacja dwukierunkowa? Ustalenia wymaga tylko który procesor będzie Master a który Slave. Odpowiednie instrukcje to SPIINIT, SPIIN, SPIOUT, SPIMOVE.
    Komunikcja przez SPI ma także ta zaletę, że można spiąć więcej niż 2 procki - niestety wykorzystując nieco więcej przewodów, do wyboru układu. Choć to da się także usunąć programowo przez system broadcastingu.

    Co do ShifIn, ShiftOut to sprawdź czy dobrze określiłeś nazwy portów. Port nadający to PORTx.y a port odbierający to PINx.y. Poczytaj helpa (mojego) do BASCOM AVR, bo w oryginale jest to nieco pogmatwane.
  • #16 2319344
    kaczepa
    Poziom 20  
    Posty: 238
    Pomógł: 32
    Ocena: 5
    Niektóre mikrokontrolery (Atmega) posiadają sprzętowy "Two-wire Serial Interface" (TWI) - który umożliwia podłączenie do 128 mikrokontrolerow.Wykorzystane są do tego 2 piny.Niestety nie wiem czy w Bascom są opracowane procedury obsługi tego interfejsu.
    Pozdrawiam
  • #18 2322712
    PrAli
    Poziom 12  
    Posty: 87
    Pomógł: 2
    Ocena: 6
    Najlepiej przez I2C
  • #19 2616180
    daniel93
    Poziom 29  
    Posty: 1673
    Pomógł: 30
    Ocena: 94
    Ja chciałbym się dowiedzieć jak zrobić komunikacje >2 procków przez i2c w bascomie(wszystkie procki to AVR).
  • REKLAMA
  • #20 4991997
    gromowładny
    Poziom 2  
    Posty: 3
    Połączyłem dwa At89c2051 i świetne się komunikują. Będę tu zaglądał , jeśli kogoś jeszcze to interesuje to pomogę.
  • #21 4992030
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    gromowładny napisał:
    Połączyłem dwa At89c2051 i świetne się komunikują. Będę tu zaglądał , jeśli kogoś jeszcze to interesuje to pomogę.

    No to super, gratuluję. Może napiszesz więcej szczegółów.
  • #22 4992085
    gromowładny
    Poziom 2  
    Posty: 3
    Komunikują się za pomocą polecenia 'shiftin i shiftout'
  • #23 4992105
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    @daniel93, jeden z nich musi być slavem. Jest komercyjna biblioteka BASCOMa I2C Slave. A jak nie pozostaje napisać samemu.

    Dodano po 36 [sekundy]:

    Uhhh odkopuję temat:/ Sorry... Niezauważyłem czasu...
  • #24 4992114
    gromowładny
    Poziom 2  
    Posty: 3
    Tak wysyła
    Sub Wyslij
    P1.6 = 0
    Waitms 20
    Czen = Data_word / 11
    Shift , Czen , Left , 1
    Shiftout P1.7 , P1.6 , Czen , 0 'wysyla 4 bajty do mikrokontrolera odczytu
    P1 = 255
    End Sub
    a tak odbiera

    Sub Odbior
    Shiftin P1.7 , P1.6 , Czen , 4
    If Czen =< 9 Then
    Czen = 10
    End If
    If Czen > 192000000 Then
    Czen = 192000000
    End If

    End Sub

    Dodano po 1 [minuty]:

    Tą instrukcją wysyłasz i odbierasz bez adresu.

Podsumowanie tematu

✨ Dyskusja dotyczy konfiguracji komunikacji między dwoma mikrokontrolerami AVR w BASCOM AVR. Główne metody omawiane to wykorzystanie poleceń shiftin i shiftout do przesyłania danych po kilku przewodach, co jest prostą i oszczędną pamięciowo alternatywą dla UART. Wskazano, że UART, I2C (TWI) oraz SPI są standardowymi interfejsami komunikacyjnymi AVR, które nie wymagają użycia timerów i umożliwiają dwukierunkową transmisję. Zalecane jest stosowanie SPI lub I2C dla bardziej zaawansowanej komunikacji, zwłaszcza gdy potrzebna jest obsługa wielu urządzeń lub dwukierunkowa transmisja. Podkreślono, że przy użyciu shiftin/shiftout ważne jest prawidłowe określenie portów i parametrów funkcji. Wskazano także na konieczność dopasowania prędkości transmisji i synchronizacji zegarów. Przykłady kodu pokazują implementację przesyłania danych za pomocą shiftin/shiftout oraz uwagi dotyczące adresowania i protokołów. Poruszono także kwestie ograniczeń i zalet poszczególnych metod, w tym prostotę UART do transmisji jednokierunkowej oraz możliwość programowej emulacji nadawania i odbioru. Wspomniano o komunikacji między różnymi rodzinami mikrokontrolerów (AVR i 8051) oraz o problemach z timerami w niektórych rozwiązaniach. Podsumowując, dla AVR w BASCOM AVR rekomendowane są interfejsy SPI i I2C, a shiftin/shiftout może być użyteczny do prostych, krótkich transmisji na niewielkie odległości.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA