Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 08:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 22 cze 2012, o 21:38 
Offline
Użytkownik

Dołączył(a): 01 cze 2012
Posty: 72
Lokalizacja: Gdańsk
Pomógł: 2

Zacząłem studiować komunikacje RS232.

Korzystam z ATB v1.03 i terminala v1.9b.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Próbowałem kilku terminali i żaden nie chciał ze mną współpracować. Zachwalany przez kolege Mirka, PuTTY też. Przed uruchomieniem tego terminala, dioda sygnalizująca wysyłanie po lini TXD miga, po uruchomieniu, ukontroler przestaje pracować. Najwidozczniej nie umiem go prawidłowo skonfigurować. Jedyny terminal, który wyświetla odebrane dane, to wyżej wymieniony terminal v1.9b. Niestety odbiera nie to co ja chce wysłać. Tak jak jest w kodzie napisane, wysyłam liczbe 0x10, a terminal odbiera 0xc0. Próbowałem różnych ustawień rejestru OSCCAL, nie pomaga.

Proszę was, nakierujcie mnie, co robie źle. Problem z kodem czy terminalem. Sprzętowo raczej nie da rady nic sknocić, bo to zestaw uruchomieniowy kolegi Mirka i jedynie co trzeba zrobić, to wpiąc dwie zworki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2012, o 21:58 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Witam!

Funkcja USART_Init(51); powinna mieć wartość _UBRR przynajmniej ja tak mam a również korzystam z biblioteki od Mirka i działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2012, o 22:09 
Offline
Użytkownik

Dołączył(a): 01 cze 2012
Posty: 72
Lokalizacja: Gdańsk
Pomógł: 2

MichalXY napisał(a):
Witam!

Funkcja USART_Init(51); powinna mieć wartość _UBRR przynajmniej ja tak mam a również korzystam z biblioteki od Mirka i działa.


liczbe 51 wziąłem z noty katalogowej, 8Mhz przy prędkosći 9600, należy wpisać do rejestru UBRR właśnie tą wartość.
Brak mi pomysłów, więc eliminuje potencjalne błędy, ale dzięki za zainteresowanie.

Teraz zauważyłem, że nieważne jaką wartośc wyśle do terminala, dwa najstarsze bity sa zawsze w stanie wysokim.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2012, o 23:35 
Offline
Użytkownik

Dołączył(a): 01 cze 2012
Posty: 72
Lokalizacja: Gdańsk
Pomógł: 2

Rozwiązałem problem. Błąd wynikał ze źle ustawionych fusebitów. Sprawdziłem w mkavr calculator czy aby napewno jest ustawione 8MHz, zauważyłem, że jest zanzaczone wewnętrzny podział oscylatora przez 8.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2012, o 23:38 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Panowie, ok - no ja wszystko rozumiem a najbardziej początkujące osoby, zresztą dlatego piszę książki.

Niestety jednego nie rozumiem. Kurczę no nie rozumiem.

Pomijam już to że w nocie PDF każdego procesora AVR jest to podane jak na talerzu, to także w książce jest to opisane jak byk. Ale mało tego, na płycie DVD są kody źródłowe do których zawsze można zajrzeć gdy sami coś robimy i nie wychodzi. Wtedy można podejrzeć jak się powinno robić i znaleźć swoje błędy. Ale nie lepiej napisać:

Cytuj:
Zachwalany przez kolege Mirka, PuTTY też nie działa a próbowałem już różnych terminali


Ja bardzo przepraszam ale nawet nie podpowiem gdzie jest błąd - w tym co kolega robi. Ja bym proponował wziąć książkę przed oczy, otworzyć notę PDF w rozdziale o USART i dokładnie poczytać. No przecież tak nie można. Kolega wkleja tu kod programu z takimi babolami że aż strach i ja nie wiem nawet czy to nie jakiś żart ?

proponuję przede wszystkim:

1. przejrzeć procedurę inicjalizacji w PDF
2. przejrzeć procedurę inicjalizacji w książce i poczytać o tym - poczytać po polsku przecież w książce
3. zajrzeć do procedur inicjalizacji na DVD
4. odpalić sobie wprost przykłady RS232 z DVD z książki zanim się swoje takie pierwsze próby zrobi

poza tym - ja tyle razy w książce piszę - i też nie rozumiem dlaczego połowa ludzi na świecie jak się czyta internet, to z uporem godnym podziwu jak ma coś przesłać sobie czy to przez RS323 czy RS485 czy drogą radiową czy przez BT - do terminala w windows to kurka wodna - nie ma to jak utrudniać sobie życie i przesyłać jakieś super kocie znaki nie z zakresu drukowalnych znaków ASCII tylko jakieś znaki sterujące o kodach ASCII poniżej 32 (poniżej kodu spacji) - no SZOK !!!

Kod:
USART_Transmit(0x10);


peeeewnie - po co wysyłać tam zaraz jakieś przyjazne dla człowieka, dla oka litery np:

Kod:
USART_Transmit('A');


czy

Kod:
USART_Transmit('B');


zamiast tego wysyłaj panie kolego jeszcze

Kod:
USART_Transmit(0x09);


i podobne .... i biorąc pod uwagę totalne błędy w inicjalizacji oczekuj, i spodziewaj się jakichś efektów w terminalach jak w książce.

No tak nie można - Panowie - no chociaż troszkę samokontroli - zupełne minimum. Jak mi coś nie wychodzi a czytam książkę, to najpierw próbowałbym do bólu robić coś DOKŁADNIE tak jak to jest w niej opisane, a nie wymyślać jakieś niestworzone rzeczy i pisać tak jakby może nawet z nutką pretensji że nic mi nie działa z tych kodów w książce.

Bardzo proszę Panie kolego - sprawdzić to co napisałem wyżej, zastosować się do tych porad, przetestować kody z DVD i wtedy się tu odezwać powołując się już na prawidłowe kody.

Bo po tym co kolega pokazał w inicjalizacji raczej wynika mi (tak mi się wydaje), że w ogóle kolega odpuścił sobie przeczytanie ze szczegółami opisu w samej książce (strona ok 262) - a szkoda - jak widać próby posługiwania się UART'em bez z kolei podjęcia próby zrozumienia podstaw w taki sposób jak podałem to w książce - tak się mogą kończyć.

zatem czekam na doczytanie, sprawdzenie właściwych kodów i wtedy zadanie pytania OK?

aha a dla testu zrób sobie program wysyłający co sekundę coś do termianala i bez żadnych dziwnych Waitkey - po co sobie życie utrudniać. Jak podstawowy test to podstawowy a nie tam dodatki i wszystko się plącze - tym bardziej że to waitkey też jest totalnie źle napisane :( I jak kolega będzie dalej tak inicjalizował:

Kod:
        DDRC = 0xFE;
        PORTC = 0xFF;


a potem podłączał do tych pinów klawisze - to procek pójdzie z dymem i to wcale nie będzie dziwne :(

ile ja w książce poświęciłem miejsca i pisałem żeby tak nie inicjalizować pinów, co to za jakieś

Kod:
        DDRC = 0xFE;
        PORTC = 0xFF;


gdy później korzysta się z (1<<PCx)

eeeeeeh

-- dodano 22 cze 2012, o 22:39 --

bartool napisał(a):
Rozwiązałem problem. Błąd wynikał ze źle ustawionych fusebitów. Sprawdziłem w mkavr calculator czy aby napewno jest ustawione 8MHz, zauważyłem, że jest zanzaczone wewnętrzny podział oscylatora przez 8.


Na pewno nie tylko w tym był błąd - inicjalizacja jest zrąbana - może koledze podpowie coś bit o nazwie URSEL ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2012, o 10:01 
Offline
Użytkownik

Dołączył(a): 01 cze 2012
Posty: 72
Lokalizacja: Gdańsk
Pomógł: 2

Panie Mirku, widzę że spowodowałem u pana wzrost ciśnienia. Nie to było moim zamiaram, a zapewniam, że studiuje książke wraz z otwarta notą. Przyznaje, że nie wszystko jest dla mnie od razu zrozumiałe.
Cytuj:
poza tym - ja tyle razy w książce piszę - i też nie rozumiem dlaczego połowa ludzi na świecie jak się czyta internet, to z uporem godnym podziwu jak ma coś przesłać sobie czy to przez RS323 czy RS485 czy drogą radiową czy przez BT - do terminala w windows to kurka wodna - nie ma to jak utrudniać sobie życie i przesyłać jakieś super kocie znaki nie z zakresu drukowalnych znaków ASCII tylko jakieś znaki sterujące o kodach ASCII poniżej 32 (poniżej kodu spacji) - no SZOK !!!

Panie Mirku, zgadzam się w 100%! I tak też zrobiłem. Przepisałem kod z książki, gdzie podałem na port RS232 "literke" A, znak cr i lf. Widać to po znakach //.
Cytuj:
USART_Transmit(0x10);
//USART_Transmit(0x0d);
//USART_Transmit(0x0a);
//_delay_ms(1000);

Terminal putty nie chciał nic pokazać, dlatego ograniczyłem wysyłanie tylko do lietrki A. I też nic. Zacząłem sprawdzać inne terminale. Terminal v1.9b pierwszy coś zaczął odbierać, ale nie to czego bym oczekiwał. Terminal ten umożliwia wyświetlanie w kodzie szesnastkowym i binarnym, dlatego literke A zamieniełem na liczbe (faktycznie, źle postąpiłem umieszczająć kod ASCII poniżnej zaków drukowanych).
Cytuj:
Bo po tym co kolega pokazał w inicjalizacji raczej wynika mi (tak mi się wydaje), że w ogóle kolega odpuścił sobie przeczytanie ze szczegółami opisu w samej książce (strona ok 262) - a szkoda - jak widać próby posługiwania się UART'em bez z kolei podjęcia próby zrozumienia podstaw w taki sposób jak podałem to w książce - tak się mogą kończyć.

Kod inicializacji RS232 jest taki sam jak w nocie, ze wskazaniem kompilatorowi o który UART mi chodzi. Wydaje mi się, że nieporozumienie polega na tym, że nie podałem na jakim ukontrolerze pracuje. Jest to ATmega644p. Są tam dwa UARTy i nie widzę rejestru z bitem o nazwie URSEL. Zajrzałem do noty ATmegi32 i tam jest jak byk napisane do czego to służy.
Cytuj:
pisać tak jakby może nawet z nutką pretensji że nic mi nie działa z tych kodów w książce

NIE CHCE I NIGDY NIE MIAŁEM POTRZEBY NIKOGO OBRAŻAĆ! Napisałem to z duzych liter, by dosadnie uzmysłowić, że nie mam do nikogo pretensji. Ba! Jak mógłbym mieć o coś pretnesje, skoro to ja się zwracam o pomoc. Przepraszam, że tak to kolega odebrał. Nie chce tworzyć sztucznych konfliktów, dlatego teraz będe sie bardziej starał pisząc posty, aby nikomu już nie przyszły do głowy takie wnioski. :D

W moim przypadku, putty nie chce nadal współpracować. Terminal v1.9 chce. Wczoraj, za jego pomocą, udało mi się skonfigurować BTM-222. Nawet jak wysyłam "literke" A co sekunde i dioda TXD na płytce ATB sygnalizuje nadawanie ramki i w tym momencie uruchomie terminal putty, ukontroler "umiera". Dioda TXD "milczy". Jak wyłącze putty, ukontroler znowu zaczyna nadawać. Dzisiaj jeszcze raz przeczytałem rozdział dotyczący komunikacji UART w nocie. Przeanalizowałem (na ile potrafie) wszsytkie rejestry UART. Wydaje mie się, że prawidłowo inicjalizuje UART. Dlatego uprzejmie i z pełnym szcunkiem zwracam się o nakierownie mnie, gdzie mam jeszcze babole w kodzie? :)

P.S.
Zrozumiałem swój błąd w funkcji WaitKey().



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2012, o 10:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Witam,

No nie nie, spokojnie - nie zdenerwowałem się ;) .... ale może jak to ja - czasem zbyt emocjonalnie podszedłem i też broń Boże nie miałem na celu żeby ciebie tu czymś urazić - więc to też na początku wyjaśniam. Fajnie że się zrozumieliśmy ;) i na drugi raz też nie odbieraj moich postów tego typu jako jakichś szalonych nerwów ok ? ;)

Ale .... jak widzisz może dojść do nieporozumień gdy nie do końca poda się informacje ... bo rzeczywiście ta ATmega644P - tzn brak wiedzy o niej był powodem że patrzyłem na ten URSEL - którego masz - rację nie ma w twoim procku.

Odnośnie kodu i jakichś tam pozostałych babolków:

skoro działasz na klawiszu

Kod:
PINC&(1<<PC0)


to oczywiście nie musisz ustawiać pinu PC0 jako wejście bo domyślnie po resecie tak jest ale już inicjalizację pod niego warto zrobić bardzo przejrzyście, ja bym zrobił tak:

Kod:
PORTC |= (1<<PC0); // podciągnięcie linii klawisza do VCC


podobnie z pinem diody:

Kod:
DDRC |= (1<<PC7); // pin PC7 jako wyjście
PORTC |(1<<PC7); // stan wysoki na wyjściu LED OFF


a nie to:

DDRC = 0xFE;
PORTC = 0xFF;

bo niestety to rzeczywiście doprowadza mnie ale nie tylko mnie do szału ;) .... i pisząc tak kod nie ważne, że sam sobie robisz pod górkę, ale po prostu nie szanujesz tych, do których się zwracasz z pytaniem co jest nie tak w kodzie. Widzisz tę różnicę ???? Z fragmentów wyżej widać od razu o co chodzi i ktoś szybko rzuci okiem i już wie - a niestety przez te inicjalizacje w Hexach trzeba się przebijać. Pisałem o tym w książce i mocno powtarzałem co i rusz - to jest tragiczny sposób pisania programów - więc zrozum, że to jest jednym z największych baboli jaki robisz i mam nadzieję, że szybko ci to przejdzie ok? ;)

A! nie wspomnę już o tym, że inicjalizacje pinów portów robimy na początku funkcji main, przed pętlą główną a nie tak jak ty - to próbujesz robić w każdym wywowałniu funkcji Waitkey .

Poza tym wyżej też ktoś wspomniał żebyś korzystał z preprocesora w celu obliczania __UBRR, no ale to rozumiem, że jak nic nie działało a ty nie byłeś pewien to na chwilę wstawiłeś stałą sobie jako argument funkcji. Jednak po sprawdzeniu że działa - na drugi raz już nie będziesz musiał tego robić ;)

Fajnie też że zaskoczyłeś o co chodzi z kolei w ułatwianiu sobie życia i puszczanie na terminal znaków drukowalnych, poza tym jak najmniej posługiwania się HEX'em - wiem wiem, to wręcz podnieca wielu ludzi że w lot widzą co to jest - ale jeszcze raz podkreślam - od początku warto się uczyć dobrych nawyków programowania i korzystać z dobrodziejstw języka C bo przy większych projektach sam się zajedziesz z tymi hexami na śmierć, proszę bardzo jeszcze raz małe porównanie:

Kod:
USART_Transmit(0x41);

USART_Transmit( 'A' );


co lepiej wygląda dla oka ??? a z punktu widzenia programu jest równoważne.

Co do Putty to przede wszystkim wcale na siłę nikogo do niego nie przekonuję ;) .... ja po prostu lubię tego lekkiego programu użyć bo jest dla mnie bardziej poręczny. A jeśli komuś on nie działa to może to wynikać tylko z jednego - że ktoś ma jakieś problemy jeszcze w jego ustawieniu. Jeśli zatem odpowiada ci inny program i co ważne działa - to spokojnie - masz już terminal.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO