Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATMEGA32 BASCOM UART

darkoman 24 Sep 2005 18:08 2013 5
  • #1
    darkoman
    Level 11  
    Witam !

    Mam pewien problem. Otóż w moim programie na ATMEGA mam taki zapis

    $crystal=11059200
    $baud=9600
    config serialin=buffered, size=10

    FOR i=1 to 1500
    PRINTBIN DANE(I)
    NEXT I

    Po stronie PC mam w DELPHI program używający darmowego komponentu TCOMPORT. Próbuję skomunikować się z ATMEGA od strony PC i wszystko chodzi bardzo ładnie ( dlatego nie umieściłem tej części programu ). Problem pojawia się gdy próbuję przesłać dane z ATMEGA do PC'ta tak jak w listingu powyżej. Ciekawym jest że jeśli dodam

    FOR i=1 to 1500
    PRINTBIN DANE(I)
    WAITMS 5 -< tutaj dodaję opóźnienie
    NEXT I

    transmisja wydaje się przebiegać poprawnie, tzn. w większości prób odczyt danych jest prawidłowy, ale zdarzają się przypadki gubienia danych lub fałszywych danych po stronie PC ( odbiornika ). W czym może być problem ?
  • #2
    hunterhouse
    Level 26  
    jeżeli użyłeś
    config serialin=buffered, size=10
    to musisz podawać dane powoli bo jak ci się przepełni bufor uarta to kich.

    rozwiązanie:
    albo zwiększysz wielkość bufora uart albo będziesz przesyłał bez bufora.

    przy tylu danych proponuje zrezygnować z bufora.
  • #3
    zumek
    Level 39  
    hunterhouse wrote:
    jeżeli użyłeś
    config serialin=buffered, size=10
    to musisz podawać dane powoli bo jak ci się przepełni bufor uarta to kich.
    ...

    darkoman napisał , że ma kłopoty z wysyłaniem danych do PC-ta , więc bufor wejściowy nie ma tu nic do rzeczy.Proponuję użyć bufora dla danych wychodzących i skorzystać z funkcji "Bufspace(0)".

    Piotrek
  • #4
    hunterhouse
    Level 26  
    tak faktycznie to była pomyłka
    ale gadałem z kolegą darkomen na gg i okazało się ze miał kwarc 11,xxxMhz i tylko 9600b i bascom nadpisywał dane przed zakonczaniem wysyłania

    okazało się że PRINTBIN dane(1),1500

    działa poprawnie
  • #5
    darkoman
    Level 11  
    Witam

    Niestety, ale PRINTBIN DANE(1),1500 nie działa tzn. działa częściowo.
    Parametr określający ilość bajtów do wysyłki ma być typu BYTE a więc można przesłać do 256 bajtów w paczce. To nie jest problem gdyby nie jeden fakt. Otóż wykonuję coś takiego

    INDEKS=400
    PRINTBIN DANE(INDEKS),50

    Ciekawe, ale program wysyła mi znacznie więcej bajtów. Ile ? To dziwne bo za każdym razem inaczej, zawsze więcej niż 50 i to znacznie. Dane oczywiście pochodzą z tablicy DANE. O co tu chodzi ?
  • #6
    hunterhouse
    Level 26  
    a jakiego typu jest zmienna dane()

    Dodano po 4 [minuty]:

    a najlepiej wklej cały program