eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Atmega jak zrealizowac odbior szeregowy
Ilość wypowiedzi w tym wątku: 16

  • 11. Data: 2010-07-20 21:21:20
    Temat: Re: Atmega jak zrealizowac odbior szeregowy
    Od: "Andy" <a...@c...pl>


    Użytkownik "Chomik" <c...@h...pl> napisał w wiadomości
    news:i2510m$mh7$1@news.supermedia.pl...
    >
    > >>
    > >
    > > ale w czym wlasciwie problem ?
    > >
    > > Ja pisze w C i nie znam bascoma ale da sie chyba zrobic licznika do 8 w
    > > bascomie ?
    > > Czy moze nie ma przesuniecia shifta na zmiennej ?
    > >
    > > Czy masz problem jak poszczegolne bity wkleic do zmiennej ?
    > >
    > > np odebrany bit ustawiasz na najstarszym bicie zmiennej
    > > a nastepnie zmienna przesuwasz w prawo o jeden bit
    > >
    > > i robisz tak 8 razy i masz odebranych 8 bitow
    > >
    > Dla jednego bajtu nie problem. Bufor ma miec co najmniej 9 bajtow. To juz
    > troche komplikuje i bascom zbyt czasochlonny kod by do tego robil wiec
    wole
    > w asm (C wogole nie znam ). Wiec jeszcze pozostaje mi rozszerzenie tego
    > przesuwania na cale 9 bajtow.
    >

    Tablice chyba sa ?

    Jesli masz juz jeden bajt to wrzucasz go do tablicy.

    Typowe rozwiaznie to tzw. bufor okrezny (ring buffer).
    Moze jest cos takiego gotowego w bascomie ?

    Czyli tablica np. na 9 bajtow
    (albo lepiej troche wiecej jesli zuzycie RAM'u nie jest krytyczne
    to lepiej ze dwa razy wiecej, zalezy jak szybko dane przychodza i jak sa
    obrabiane)
    i dwa indeksy - indeks do zapisu i indeks do odczytu.

    Gdy indeks dojdzie do konca tablicy to go "zawijasz" go czyli zerujesz
    i idzie od pocztaku.

    Wrzucenie do bufora:
    zapis do tablicy pod indeksem na jaki wskazuje indeks do zapisania
    zwiekszenie ideksu o 1 i sprawdznie czy wiekszy lub rowny rozmiarowi
    tablicy a jesli tak to wyzerowanie.


    Odczyt z bufora:
    odczyt z tablicy z indeksu do odczytu, zwiekszenie indeksu o 1
    i sprawdznie czy wiekszy lub rowny rozmiarowi tablicy a jesli tak to
    wyzerowanie.

    Gdy oba indeksy sa rowne tzn. nie ma nic w buforze a gdy rozne
    to mozna odczytywac.

    Trzeba jeszcze uwazac na przepelnienie bufora. Mozna dodac jakas zmienna
    sygnalizujac przepelnienie.
    Jesli z jakiegos powodu nie bedzie odczytu a beda kolejne zapisy
    to dojdzie do sytuacji kiedy indeksy znow beda rowne
    i jesli taka sytuacja nastapi to znaczy, ze w buforz jest max danych
    i wiecej nie wejdzie. Warto wtedy ustawic jakas zmienna sygnalizujaca
    overflow.



    --
    Andrzej



  • 12. Data: 2010-07-20 22:06:57
    Temat: Re: Atmega jak zrealizowac odbior szeregowy
    Od: "Gejzero" <g...@p...onet.pl>


    Użytkownik "Chomik" <c...@h...pl> napisał w wiadomości
    news:i2510m$mh7$1@news.supermedia.pl...
    >
    >>>
    >>
    >> ale w czym wlasciwie problem ?
    >>
    >> Ja pisze w C i nie znam bascoma ale da sie chyba zrobic licznika do 8 w
    >> bascomie ?
    >> Czy moze nie ma przesuniecia shifta na zmiennej ?
    >>
    >> Czy masz problem jak poszczegolne bity wkleic do zmiennej ?
    >>
    >> np odebrany bit ustawiasz na najstarszym bicie zmiennej
    >> a nastepnie zmienna przesuwasz w prawo o jeden bit
    >>
    >> i robisz tak 8 razy i masz odebranych 8 bitow
    >>
    > Dla jednego bajtu nie problem. Bufor ma miec co najmniej 9 bajtow. To juz
    > troche komplikuje i bascom zbyt czasochlonny kod by do tego robil wiec
    > wole w asm (C wogole nie znam ). Wiec jeszcze pozostaje mi rozszerzenie
    > tego przesuwania na cale 9 bajtow.
    Ja bym się zainteresowal programową implementacją portu szeregowego.
    Kiedyś były dobre przyklady w asmie ale ja wtedy szukalem na 51. Zapewne na
    AVR też są.
    Przy prędkości 2400 to chyba można by ręcznie odbierać :P. A tak na serio to
    chyba sygnał był w tych przykładach próbkowany z 8 razy na jedną zmiane
    stanu.
    Tutaj http://www.btc.pl/index.php?ukey=product&productID=2
    0844 jest
    przykład realizacji programowej w Bascomie. Jednak, korzysta on z Bacomowego
    podprogramyu :( Ewentualnie można skompilować prosty przykład i zobaczyć jak
    Bascom realizuje taką transmisje programowo i na niej się wzorować już w
    asemblerze.
    Gejzero.



  • 13. Data: 2010-07-21 13:58:03
    Temat: Re: Atmega jak zrealizowac odbior szeregowy
    Od: "Chomik" <c...@h...pl>


    >
    > Przeczytałeś to
    > http://www.cmlmicro.com/Products/applications/AN_WDA
    TA_469AFW_1.pdf ?
    >
    > Z opisu wynika, że uC mógłby pracować jako SPI slave. Przy nadawaniu
    > włączasz Tx Enable i dane wysyłasz w takt Tx Sync:
    >
    >> The Tx Data must be valid at the time of the rising edge of the Tx Sync
    >> clock signal. Therefore, the optimum
    >> time to change Tx Data is on the falling edge of the Tx Sync clock.
    >
    > Odbiór robisz synchronicznie z Rx Sync:
    >
    >> The optimum time to sample the Clocked Data Out is on the falling edge of
    >> the Rx Sync Out clock signal.
    >
    > Oczywiście możesz się obyć bez SPI podłączając linie Sync do przerwań.

    No i tak napisalem Sygnal CLK bedzie generowal przerwanie i wtedy bedzie
    odczytywany bit. Problem byl bardziej co dalej z tym zrobic ale juz chyba
    powoli rozwiazalem.


  • 14. Data: 2010-07-21 14:01:42
    Temat: Re: Atmega jak zrealizowac odbior szeregowy
    Od: "Chomik" <c...@h...pl>

    > Gdy oba indeksy sa rowne tzn. nie ma nic w buforze a gdy rozne
    > to mozna odczytywac.
    >
    > Trzeba jeszcze uwazac na przepelnienie bufora. Mozna dodac jakas zmienna
    > sygnalizujac przepelnienie.
    > Jesli z jakiegos powodu nie bedzie odczytu a beda kolejne zapisy
    > to dojdzie do sytuacji kiedy indeksy znow beda rowne
    > i jesli taka sytuacja nastapi to znaczy, ze w buforz jest max danych
    > i wiecej nie wejdzie. Warto wtedy ustawic jakas zmienna sygnalizujaca
    > overflow.
    >
    Problem jest inny. Bufor ten musi funkcjonowac na zasadzie rejestru
    przesuwnego przesuwajac cala zawartosc o 1 bit po kazdym odebranym.. Po
    kazdym odebranym bicie musze sprawdzic czy przyszla ramka startowa. Poki co
    napisalem rozwiazanie tego programowo w bascomie nie wiem tylko czy czasowo
    sie procesor ze wszystkim wyrobi. Dlatego tez wspominalem o tym asm zeby w
    nim pewne rzeczy zrobic.


  • 15. Data: 2010-07-21 14:21:04
    Temat: Re: Atmega jak zrealizowac odbior szeregowy
    Od: "Andy" <a...@c...pl>


    Użytkownik "Chomik" <c...@h...pl> napisał w wiadomości
    news:i26ujo$2lu$2@news.supermedia.pl...
    > > Gdy oba indeksy sa rowne tzn. nie ma nic w buforze a gdy rozne
    > > to mozna odczytywac.
    > >
    > > Trzeba jeszcze uwazac na przepelnienie bufora. Mozna dodac jakas zmienna
    > > sygnalizujac przepelnienie.
    > > Jesli z jakiegos powodu nie bedzie odczytu a beda kolejne zapisy
    > > to dojdzie do sytuacji kiedy indeksy znow beda rowne
    > > i jesli taka sytuacja nastapi to znaczy, ze w buforz jest max danych
    > > i wiecej nie wejdzie. Warto wtedy ustawic jakas zmienna sygnalizujaca
    > > overflow.
    > >
    > Problem jest inny. Bufor ten musi funkcjonowac na zasadzie rejestru
    > przesuwnego przesuwajac cala zawartosc o 1 bit po kazdym odebranym.. Po
    > kazdym odebranym bicie musze sprawdzic czy przyszla ramka startowa. Poki
    co
    > napisalem rozwiazanie tego programowo w bascomie nie wiem tylko czy
    czasowo
    > sie procesor ze wszystkim wyrobi. Dlatego tez wspominalem o tym asm zeby w
    > nim pewne rzeczy zrobic.
    >

    Jesli stala masz tylko preambule (jeden bajt)
    to poluj tylko na niego
    Przesuwanie wszystkich 9 bajtow chyba nie ma sensu.


    --
    Andrzej



  • 16. Data: 2010-07-21 15:37:01
    Temat: Re: Atmega jak zrealizowac odbior szeregowy
    Od: "Chomik" <c...@h...pl>


    >
    > Jesli stala masz tylko preambule (jeden bajt)
    > to poluj tylko na niego
    > Przesuwanie wszystkich 9 bajtow chyba nie ma sensu.
    >
    >
    No wlasnie nie wiem co lepsze.
    Dla mnie wydaje sie ze lepiej miec w buforze calosc 9 bajtow i jak wykryje
    preambule to od razu przejsc do obrobki calosci.Przy dluzszych transmisjach
    pewnie to bym inaczej robil ale tutaj tak mi najwygodniej.

strony : 1 . [ 2 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: