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



Teraz jest 12 cze 2026, o 05:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 8 wrz 2014, o 20:56 
Offline
Nowy

Dołączył(a): 08 wrz 2014
Posty: 15
Pomógł: 0

Dzień dobry,
Staram się zrobić na początek prostą transmisję UART. Problem polega na tym, że nie wiem co robię źle. Stosowałem się do porad Mirka z bloga, kilku wątków wygrzebanych na forach czy takich poradników http://www.piekary.net/~jermi/datasheets/avr_rs232obsluga.pdf. Próbowałem przy różnych wartościach wbudowanego F_CPU a także za pomocą kwarcu 14,7456MHz ale nic. Częstotliwość procka ustawiam w ustawieniach projektu w eclipse, na górze kodu oraz za pomocą MKVCalculator w fusebitach (w zakladce FU ustawiam interesującą mnie częstotliwość (+ CKOPT dla zewnętrznego kwarcu) a następnie w Programator AVR zapis + fusebity + wykonaj). Cały czas leci bałagan. Przykładowo zamiast 'a' dostaję 'Ŕ'.

"Mój" kod-składak:
Cytuj:
//#define F_CPU 14745600UL
#define F_CPU 8000000L // ZAPAMIĘTAJ SOBIE KOLEGO NIGDY nie definiuj F_CPU w kodzie programu - mirekk36

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Naprawdę nie mam już pomysłu co może być źle. Sprawdzałem na kilku uC a przejściówka i terminal (TeraTerm) powinny być ok (sprawdzane na Arduino).
Bardzo proszę o pomoc :(
Z wyrazami szacunku
Dawid



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 wrz 2014, o 21:06 
Offline
Moderator
Avatar użytkownika

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

Tak jak wyżej w uwadze na CZERWONO - zapamiętaj twój pierwszy i PODSTAWOWY błąd to właśnie to, że definiujesz F_CPU w kodzie programu - TEGO się NIGDY nie robi :(

obejrzyj to:

http://www.youtube.com/watch?feature=pl ... 7vo#t=2897

a zrozumiesz

_________________
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: 8 wrz 2014, o 21:28 
Offline
Nowy

Dołączył(a): 08 wrz 2014
Posty: 15
Pomógł: 0

Wielkie dzięki za szybką odpowiedź! :)
Ok, rozumiem #define F_CPU w kodzie to "grzech". W eclipse w ustawieniach projektu wchodzę w c/c++ general -> paths and symbols -> symbols i na dole mam #F_CPU ustawione na wartość 8000000. Czyli niby jest dobrze? :/ jeśli tak to dlaczego dalej nie działa? Czy jednak w innym miejscu należy zdefiniować F_CPU albo problem leży gdzieś indziej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 wrz 2014, o 21:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Linie 34 i 35 zamień na:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wartość rejestru UBRR ustawiona na 51 jest odpowiednia przy częstotliowści taktowania równej 8MHz i prędkości transmisji 9600 bps.

Wiesz również, że ustalenie bitu USBS w rejestrze UCSRC wymusza 2 bity stopu...?

Jeśli jest to nieporządane (może to być przyczyną problemów) to najlepiej usuń całkowicie tę linię:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 8 wrz 2014, o 21:53 przez atmel, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 wrz 2014, o 21:53 
Offline
Moderator
Avatar użytkownika

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

torkness napisał(a):
Czy jednak w innym miejscu należy zdefiniować F_CPU albo problem leży gdzieś indziej.


na 100% gdzie indziej - a jeśli masz kłopoty z obliczaniem UBRR to poczytaj to: ;)

http://mirekk36.blogspot.com/2013/01/rs ... trick.html

_________________
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: 8 wrz 2014, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Częstotliwość oscylatora ustawiamy w Project Properties-->AVR-->Target Hardware

Poprawiłem troszkę kod
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zmieniłem format wysyłanej ramki z 8 bitów danych i 2 bitów stopu na 8 bitów danych i 1 bit stopu i wzór do obliczania prędkości transmisji. Przeczytaj to http://www.atnel.pl/domyslna-promocja-do-typu-int.html a dowiesz się skąd we wzorze wzięło się UL.

I jeszcze polecam przeczytać jak prawidłowo obliczać wartość UBRR http://mirekk36.blogspot.com/2013/01/rs ... trick.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 wrz 2014, o 22:07 
Offline
Nowy

Dołączył(a): 08 wrz 2014
Posty: 15
Pomógł: 0

Wielkie dzięki za pomoc i edycję kodu. Faktycznie nie zauważyłem tych 2 bitów stopu. Już miałem płakać że znowu źle a tu nie zauważyłem że bauda mi zmieniłeś :) dziękuje wam bardzo Panowie :)



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ł: Brak zidentyfikowanych użytkowników i 1 gość


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO