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

[Bascom][AtMega8]Komunikacja dwóch ATmega8 przez rs232

07 Wrz 2010 19:31 6160 17
  • Poziom 9  
    Witam!

    Są sobie 2 Atmegi8 w TQFP. Obydwie taktowane zewnętrznym kwarcem 8MHz. Podłączyłem je w następujący sposób:

    [Bascom][AtMega8]Komunikacja dwóch ATmega8 przez rs232

    Dodatkowo podłączyłem niewidoczne na schemacie diody led w celu sygnalizacji.

    W jednym uC jest taki program: (Wysyłanie)

    Code:

    $crystal = 8000000
    $regfile = "m8def.dat"
    $baud=1200

    Config Pind.6 = Output
    Portd.6 = 1


    Do
    Wait 1
    Print "d";
    Loop
    End



    A w drugim coś takiego: (Odbieranie)

    Code:

    $crystal = 8000000
    $regfile = "m8def.dat"
    $baud = 1200
    Config Pind.6 = Output
    Enable Interrupts
    Enable Serial
    On Urxc Port

    Do
    Loop
    End


    Port:
    Toggle Portd.6
    Return


    I nie działa... dane nie są przesyłane tzn nie zmienia się wartość portd.6 w drugim programie. Wcześniej robiłem transmisje RS232-> PC i jakoś nie było problemu, a tutaj takie niewiadomo co się stało i nie działa:/ końcówki RxD i TxD w obu uC sprawne, działają i jako wejscia i jako wyjścia. Myślałem ze to wina wewnetrznych kwarców, więc dałem zewnętrzne i to samo:/ Ktoś ma jakiś pomysł?
  • Poziom 27  
    No właśnie, jest możliwa w ogóle taka komunikacja.
    Są na to jakieś przykłady w BASCOMie?
  • Poziom 38  
    arktik1 napisał:
    No właśnie, jest możliwa w ogóle taka komunikacja.
    Są na to jakieś przykłady w BASCOMie?


    pewnie, że jest możliwa, ale nie pomogę bo nie znam bascoma
  • Moderator Mikrokontrolery Projektowanie
    Możliwa jest, z banalnych rzeczy to połączyłeś masy obu urządzeń? Na BASCOMie też się nie znam więc programowo nie pomogę.
  • Poziom 9  
    oczywiscie, narazie obydwa uC są zasilane z jednego źródła napięcia. Długosć linii to ok 30 cm. Później jeszcze spróbuję podłączyć do tego MAX232 i zobaczyć na kompie co się dzieje na linii.. ale czekam na dalsze pomysły
  • Poziom 27  
    Myślałem że podłączę się z tematem:
    "[BASCOM] Najprostrza komunikacja między dwoma Uc" :D
  • Poziom 9  
    arktik1:

    Ja staram sie opracować protokół do sieci RS485, dlatego narazie podłączyłem po rs232 i staram sie nawiązać komunikację, potem wpinam miedzy uC MAX1483 i dalej będę tworzył. No ale narazie musze wyczaić w czym jest problem, że ze sobą nie gadają:/
  • Poziom 38  
    Przy kwarcu 8MHz $baud=1200 jest "not possible".
    O czym grzecznie Bascom w zakładce communication informuje.
    No i ten Enable serial.
    Nigdy tego nie używałem- ale w helpie Z.G. jest napisane- blokuje jednocześnie URXC, UDRE i UTXC.
  • Poziom 9  
    No i problem wygląda na rozwiazany, to co powodowało niedziałanie ww układu to fakt, ze w przerwaniu od UART nie pobierałem znaku z buforu, przez co flaga nie zostawała wyzerowana i kolejne znaki nie były odbierane... Innymi słowy powinno być tak:

    Port:
    A=InKey()
    Toggle portd.6
    Return
  • Moderator Mikrokontrolery Projektowanie
    janbernat napisał:
    Przy kwarcu 8MHz $baud=1200 jest "not possible".


    Zauważ, że w tym wypadku to nie ma znaczenia. W obu procesorach powstały błąd będzie taki sam, a więc dla nich transmisja będzie czytelna.
  • Poziom 9  
    dałem $baud=1200 bo myslałem że jest jakieś dziwne przekłamanie, że kwarce się aż tak różnią że transmisja się chrzani. Docelowo prędkosć ma być większa.
  • Poziom 16  
    Witam
    czy kolega może powiedzieć co powoduje wysłanie Print "d"
    w odbiorniku bo jakoś nie kumam tego przykładu
    PIOTR
  • Poziom 16  
    To prawda co piszesz
    ale nadal nie rozumiem co ma wspólnego print"b"
    ze zmianą stanu w odbiorniku pind.6
    A może to zupełnie coś innego PIOTR
    Już mi się rozjaśniło
    każde przerwanie powoduje zmianę stanu portu
    A jak wygląda przesyłanie danych typu byte w takim przykładzie??
    w procesorach 51 wystarczyło napisać
    A=42
    printbin a
    w odbiorniku
    inputbin A i to wszystko - tylko polecenie inputbin wstrzymuje program i stym mam kłopot
    PIOTR
  • Poziom 16  
    Można prosić o kawałek kodu odbiornika?:D
  • Specjalista automatyka domowa
    tzn. ? Masz tu juz "kawałek" kodu. Na forum jest wiele przykładów odbioru przez USART. Przykłady również masz w katalogu "samples". Możesz też np. przeanalizować mój kod modułu gsm opartego o SE 300.
    Analiza jest lepsza niż gotowiec, ponieważ analizując zrozumiesz bardziej niż dostając gotowca.
  • Poziom 16  
    Witam
    Mój kod nie powala na kolana ale działa:D
    kod
    nadajnik
    $crystal=20000000
    $baud=9600
    dim a as byte
    declare sub wyslij

    do
    set p3.7
    if p3.7=0 then
    call wyslij
    loop

    sub wyslij
    a=p1
    printbin a
    waitms 100

    end sub


    odbiornik

    $crystal=20000000
    $baud=9600
    dim a as byte
    do
    inputbin a i w tym miejscu program oczekuje na odebranie danej i nie wykonuje
    innych poleceń w tym cały problem dlatego chcę zastosować Inkey
    p1=a
    loop

    PIOTR