Goto page 1, 2 Next
Chomik
Guest
Tue Jul 20, 2010 4:36 pm
Potrzebuje polaczyc odbiornik FFSK 2400Bd CMX469A do Atmega8. Odbierany
sygnal sklada sie z 9 bajtow gdzie pierwszy bajt jest zawsze staly
(preambula). Niestety doswiadczenia w programowaniu wielkiego nie mam. CMX
na wyjsciu daje sygnal zegarowy i sygnal danych. Wiec kombinuje ze zbocze
zegarowe bedzie generowalo przerwanie obsluga przerwania bedzie sprawdzala
stan linii danych i dopisywala do jakiegos bufora ktory bedzie sprawdzany na
wystapienie preambuly a jak ta wystapi to odczyta kolejne 8 bajtow. Jesli
nawet to by zadzialalo to dalej nie wiem jak to zrealizowac programowo.
Podwpowiedzcie czego szukac zeby o tym czegos sie dowiedziec. Jak tworzyc
bufory odczytywac i zapisywac w nich itp. Moze sa jakies dostepne zrodla
robiace cos w tym stylu ktore mozna by wykorzystac. Goglujac po haslach typu
szeregowa transmisja danych natrafiam praktycznie na opisy UART-a i tego
typu rzezcy. Tutaj transmisja jest niestandardowa i obsluge rzeba by napisac
od zera. Mozecie polecic jakas ogolnodostepna literature, strony, czy
ewentualnie jakies hasla po ktorych szukac rozwiazan tego typu funkcji. Z
gory dziekuje za pomoc.
Dodam tylko ze nie wchodzi w gre zlecenie tego komus bo jest to jednorazowy
projekt w dodatku beznakladowy wiec albo sam cos zrobie albo nie bedzie
wcale.
--
Chomik
Guest
Tue Jul 20, 2010 5:31 pm
Quote:
Tez jestem poczatkujacy ale pachnie mi to standardem.
Ten odbiornik po zwyklym rs232 gada czy ma jakies niestandardowe
parametry?
Jak gada na 0V i 5V w zwyklym trybie 3 drutowym (jesli
jednokierunkowo) to starczy zwykla atmega8 i bascom.
Ja znalazlem ladne rozwiazania w ksiazce marcina wiazani
mikrokontrolery dla poczatkujacych.
Ale to raczej standard wiec jak wrzucisz w google atmega serial to ci
wyrzuci co nieco wiedzy. np:
http://www.slideshare.net/embedautomation/serial-communication-in-atmega-16
slajd 12 do wyrysowania w eagle lub kicadzie.
A potem jakies proste tutoriale w bascomie zalatwia sprawe.
Ale jesli jestes kompletnie zielony to lekko nie bedzie.
Gotowca niestety nie mam pod reka moze kto inny podrzuci cos
sprawdzonego.
To nie ma nic wspolnego z RS-em. Sama transmisja idzie droga radiowa wiec od
samego szumu CMX469 moze generowac jakis ciag ktory nie jest uzyteczny. Przy
RS zaklada sie ze polaczenie jest w 100%. Jest sygnal startu, stopu itd.
Tutaj CMX wypluwa z siebie ciag zerojedynkowy i musimy sie sami zorientowac
co jest transmisja a co smieciami. RS i
UART tutaj raczej na nic.
Chomik
Guest
Tue Jul 20, 2010 6:32 pm
Quote:
Ja cie nie chce straszyc ale tego FFSK 2400Bd CMX469A nie ma w
google.
Ale ok, jesli masz po prostu dwa sygnaly i jeden jest zegarowy a drugi
z danymi to sprawa jest relatywnie prosta.
Polecam ksiazke
http://www.btc.pl/?id_prod=65500
Na poczatek bedzie dobra. Trudno mi cos wiecej zaproponowac bo tez sie
ucze.
Mozesz tez rozwazyc inne jego pozycje bo pisze dobrze i przyklady
dzialaja (a przynajmniej te ktore zbudowalem).
--
Cos chyba zle wpisales bo ten scalak jest na pierwzym miejscu w google i
kolejnych kilkudziesieciu pozycjach.
Co do ksiazki to taka mam a w Bascomie pisze programy od dawna. Lecz do tych
zastosowan bedzie potrzebna jakas wstawka w asemblerze (wole go niz C) ale
nie wiem z ktorej strony ugryzc zwlaszcza temat tworzenia, organizacji i
dostepu do bufora bo to juz by mi cos dalo.
ptoki
Guest
Tue Jul 20, 2010 7:17 pm
On 20 Lip, 18:36, "Chomik" <chomi...@hot.pl> wrote:
Quote:
Potrzebuje polaczyc odbiornik FFSK 2400Bd CMX469A do Atmega8. Odbierany
sygnal sklada sie z 9 bajtow gdzie pierwszy bajt jest zawsze staly
(preambula). Niestety doswiadczenia w programowaniu wielkiego nie mam. CMX
na wyjsciu daje sygnal zegarowy i sygnal danych. Wiec kombinuje ze zbocze
zegarowe bedzie generowalo przerwanie obsluga przerwania bedzie sprawdzala
stan linii danych i dopisywala do jakiegos bufora ktory bedzie sprawdzany na
wystapienie preambuly a jak ta wystapi to odczyta kolejne 8 bajtow. Jesli
nawet to by zadzialalo to dalej nie wiem jak to zrealizowac programowo.
Podwpowiedzcie czego szukac zeby o tym czegos sie dowiedziec. Jak tworzyc
bufory odczytywac i zapisywac w nich itp. Moze sa jakies dostepne zrodla
robiace cos w tym stylu ktore mozna by wykorzystac. Goglujac po haslach typu
szeregowa transmisja danych natrafiam praktycznie na opisy UART-a i tego
typu rzezcy. Tutaj transmisja jest niestandardowa i obsluge rzeba by napisac
od zera. Mozecie polecic jakas ogolnodostepna literature, strony, czy
ewentualnie jakies hasla po ktorych szukac rozwiazan tego typu funkcji. Z
gory dziekuje za pomoc.
Dodam tylko ze nie wchodzi w gre zlecenie tego komus bo jest to jednorazowy
projekt w dodatku beznakladowy wiec albo sam cos zrobie albo nie bedzie
wcale.
Tez jestem poczatkujacy ale pachnie mi to standardem.
Ten odbiornik po zwyklym rs232 gada czy ma jakies niestandardowe
parametry?
Jak gada na 0V i 5V w zwyklym trybie 3 drutowym (jesli
jednokierunkowo) to starczy zwykla atmega8 i bascom.
Ja znalazlem ladne rozwiazania w ksiazce marcina wiazani
mikrokontrolery dla poczatkujacych.
Ale to raczej standard wiec jak wrzucisz w google atmega serial to ci
wyrzuci co nieco wiedzy. np:
http://www.slideshare.net/embedautomation/serial-communication-in-atmega-16
slajd 12 do wyrysowania w eagle lub kicadzie.
A potem jakies proste tutoriale w bascomie zalatwia sprawe.
Ale jesli jestes kompletnie zielony to lekko nie bedzie.
Gotowca niestety nie mam pod reka moze kto inny podrzuci cos
sprawdzonego.
--
Lukasz Sczygiel
Chomik
Guest
Tue Jul 20, 2010 7:59 pm
Quote:
Wpisalem cala fraze i pokazalo sie zero wynikow.
Ale rzeczywiscie samo CMX469A pokazuje troche wynikow.
A czemu wstawka w asm? bascom jest relatywnie szybki jesli nie uzywa
sie fikusnikow.
Probowales cokolwiek juz napisac w tym temacie?
Ja na lysym bascomie zrobilem pwm-a i nawet dziala czyli mruga diodami
szybciej niz te200Hz (ale nie wiem dokladnie ile).
Pewne rzeczy latwiej w asm zrobic, chodza szybciej a co najwazniejsze mniej
miejsca zajmuja. Procz odebrania jeszcze te dane trzeba obrobic i to pewnie
juz by bylo w Bascomie bo tak mi latwiej.
Poki co nic nie mam ani w asm ani w bascomie bo stanalem na etapie
wymyslania jak zrobic 9 bajtowy bufor zapisywany bit po bicie. Jak to
wymysle albo ktos mi podpowie zeby nie wywazac otwartych juz drzwi, to wtedy
bede myslal nad reszta.
Andy
Guest
Tue Jul 20, 2010 8:10 pm
Uzytkownik "Chomik" <chomik99@hot.pl> napisal w wiadomosci
news:i24v66$llo$1@news.supermedia.pl...
Quote:
Wpisalem cala fraze i pokazalo sie zero wynikow.
Ale rzeczywiscie samo CMX469A pokazuje troche wynikow.
A czemu wstawka w asm? bascom jest relatywnie szybki jesli nie uzywa
sie fikusnikow.
Probowales cokolwiek juz napisac w tym temacie?
Ja na lysym bascomie zrobilem pwm-a i nawet dziala czyli mruga diodami
szybciej niz te200Hz (ale nie wiem dokladnie ile).
Pewne rzeczy latwiej w asm zrobic, chodza szybciej a co najwazniejsze
mniej
miejsca zajmuja. Procz odebrania jeszcze te dane trzeba obrobic i to
pewnie
juz by bylo w Bascomie bo tak mi latwiej.
Poki co nic nie mam ani w asm ani w bascomie bo stanalem na etapie
wymyslania jak zrobic 9 bajtowy bufor zapisywany bit po bicie. Jak to
wymysle albo ktos mi podpowie zeby nie wywazac otwartych juz drzwi, to
wtedy
bede myslal nad reszta.
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
--
Andrzej
ptoki
Guest
Tue Jul 20, 2010 8:17 pm
On 20 Lip, 19:31, "Chomik" <chomi...@hot.pl> wrote:
Quote:
Tez jestem poczatkujacy ale pachnie mi to standardem.
Ten odbiornik po zwyklym rs232 gada czy ma jakies niestandardowe
parametry?
Jak gada na 0V i 5V w zwyklym trybie 3 drutowym (jesli
jednokierunkowo) to starczy zwykla atmega8 i bascom.
Ja znalazlem ladne rozwiazania w ksiazce marcina wiazani
mikrokontrolery dla poczatkujacych.
Ale to raczej standard wiec jak wrzucisz w google atmega serial to ci
wyrzuci co nieco wiedzy. np:
http://www.slideshare.net/embedautomation/serial-communication-in-atm...
slajd 12 do wyrysowania w eagle lub kicadzie.
A potem jakies proste tutoriale w bascomie zalatwia sprawe.
Ale jesli jestes kompletnie zielony to lekko nie bedzie.
Gotowca niestety nie mam pod reka moze kto inny podrzuci cos
sprawdzonego.
To nie ma nic wspolnego z RS-em. Sama transmisja idzie droga radiowa wiec od
samego szumu CMX469 moze generowac jakis ciag ktory nie jest uzyteczny. Przy
RS zaklada sie ze polaczenie jest w 100%. Jest sygnal startu, stopu itd.
Tutaj CMX wypluwa z siebie ciag zerojedynkowy i musimy sie sami zorientowac
co jest transmisja a co smieciami. RS i
UART tutaj raczej na nic.
Ja cie nie chce straszyc ale tego FFSK 2400Bd CMX469A nie ma w
google.
Ale ok, jesli masz po prostu dwa sygnaly i jeden jest zegarowy a drugi
z danymi to sprawa jest relatywnie prosta.
Polecam ksiazke
http://www.btc.pl/?id_prod=65500
Na poczatek bedzie dobra. Trudno mi cos wiecej zaproponowac bo tez sie
ucze.
Mozesz tez rozwazyc inne jego pozycje bo pisze dobrze i przyklady
dzialaja (a przynajmniej te ktore zbudowalem).
--
Lukasz Sczygiel
Chomik
Guest
Tue Jul 20, 2010 8:30 pm
Quote:
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.
Zbych
Guest
Tue Jul 20, 2010 9:13 pm
Chomik przemówił ludzkim głosem:
Quote:
Mozecie polecic jakas ogolnodostepna literature, strony, czy
ewentualnie jakies hasla po ktorych szukac rozwiazan tego typu funkcji. Z
gory dziekuje za pomoc.
Przeczytałeś to
http://www.cmlmicro.com/Products/applications/AN_WDATA_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:
Quote:
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:
Quote:
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ń.
ptoki
Guest
Tue Jul 20, 2010 9:20 pm
On 20 Lip, 20:32, "Chomik" <chomi...@hot.pl> wrote:
Quote:
Ja cie nie chce straszyc ale tego FFSK 2400Bd CMX469A nie ma w
google.
Ale ok, jesli masz po prostu dwa sygnaly i jeden jest zegarowy a drugi
z danymi to sprawa jest relatywnie prosta.
Polecam ksiazke http://www.btc.pl/?id_prod=65500
Na poczatek bedzie dobra. Trudno mi cos wiecej zaproponowac bo tez sie
ucze.
Mozesz tez rozwazyc inne jego pozycje bo pisze dobrze i przyklady
dzialaja (a przynajmniej te ktore zbudowalem).
--
Cos chyba zle wpisales bo ten scalak jest na pierwzym miejscu w google i
kolejnych kilkudziesieciu pozycjach.
Co do ksiazki to taka mam a w Bascomie pisze programy od dawna. Lecz do tych
zastosowan bedzie potrzebna jakas wstawka w asemblerze (wole go niz C) ale
nie wiem z ktorej strony ugryzc zwlaszcza temat tworzenia, organizacji i
dostepu do bufora bo to juz by mi cos dalo.
Wpisalem cala fraze i pokazalo sie zero wynikow.
Ale rzeczywiscie samo CMX469A pokazuje troche wynikow.
A czemu wstawka w asm? bascom jest relatywnie szybki jesli nie uzywa
sie fikusnikow.
Probowales cokolwiek juz napisac w tym temacie?
Ja na lysym bascomie zrobilem pwm-a i nawet dziala czyli mruga diodami
szybciej niz te200Hz (ale nie wiem dokladnie ile).
--
Lukasz Sczygiel
Andy
Guest
Tue Jul 20, 2010 9:21 pm
Użytkownik "Chomik" <chomik99@hot.pl> napisał w wiadomości
news:i2510m$mh7$1@news.supermedia.pl...
Quote:
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
Gejzero
Guest
Tue Jul 20, 2010 10:06 pm
Użytkownik "Chomik" <chomik99@hot.pl> napisał w wiadomości
news:i2510m$mh7$1@news.supermedia.pl...
Quote:
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ć

. 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=20844 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.
Chomik
Guest
Wed Jul 21, 2010 1:58 pm
Quote:
Przeczytałeś to
http://www.cmlmicro.com/Products/applications/AN_WDATA_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.
Chomik
Guest
Wed Jul 21, 2010 2:01 pm
Quote:
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.
Andy
Guest
Wed Jul 21, 2010 2:21 pm
Użytkownik "Chomik" <chomik99@hot.pl> napisał w wiadomości
news:i26ujo$2lu$2@news.supermedia.pl...
Quote:
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
Goto page 1, 2 Next