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

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

misiakufal 07 Wrz 2010 19:31 6571 17
REKLAMA
  • #1 8486325
    misiakufal
    Poziom 10  
    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)

    
    $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)

    
    $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ł?
  • REKLAMA
  • #2 8486425
    arktik1
    Poziom 27  
    No właśnie, jest możliwa w ogóle taka komunikacja.
    Są na to jakieś przykłady w BASCOMie?
  • REKLAMA
  • #3 8486428
    gaskoin
    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
  • #4 8486470
    tmf
    VIP Zasłużony dla elektroda
    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ę.
  • #5 8486484
    misiakufal
    Poziom 10  
    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
  • #6 8486504
    arktik1
    Poziom 27  
    Myślałem że podłączę się z tematem:
    "[BASCOM] Najprostrza komunikacja między dwoma Uc" :D
  • #7 8486542
    misiakufal
    Poziom 10  
    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ą:/
  • REKLAMA
  • #8 8486864
    janbernat
    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.
  • REKLAMA
  • #9 8486869
    misiakufal
    Poziom 10  
    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
  • #10 8487430
    tmf
    VIP Zasłużony dla elektroda
    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.
  • #11 8488742
    misiakufal
    Poziom 10  
    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.
  • #12 8492704
    PIOTR111
    Poziom 16  
    Witam
    czy kolega może powiedzieć co powoduje wysłanie Print "d"
    w odbiorniku bo jakoś nie kumam tego przykładu
    PIOTR
  • #14 8493966
    PIOTR111
    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
  • #16 8496178
    PIOTR111
    Poziom 16  
    Można prosić o kawałek kodu odbiornika?:D
  • #17 8497727
    xury
    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.
  • #18 8503170
    PIOTR111
    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
REKLAMA