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



Teraz jest 19 kwi 2024, o 08:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 51 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 2 gru 2013, o 20:38 
Offline
Moderator
Avatar użytkownika

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

No kolega WSZYSTKO od samego początku robi źle :( i aż się dziwię, że piszesz w wątku gdzie masz pokazane co i jak ... tymczasem wygląda tak jakbyś w ogóle tego nie przeczytał.

Ale po kolei - źle ustawione fusebity - no bo piszesz że ustawiasz niby kwarc 8MHz ... no i OK ale jednocześnie masz pozostawiony CKDIV8, który dzieli tę częstotliwość przez 8 - więc jak myślisz - jaką częstotliwością masz taktowany procek ?

Druga sprawa skąd się bierze u was panowie to stosowanie

#define FOSC ???

masz na dole artykułu wyraźnie pokazane:

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


dlaczego z tego nie korzystasz ??? F_CPU

------------------------ [ Dodano po: 1 minucie ]

poza tym taka inicjalizacja pinów:

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


to po prostu masakra :( pomijam już brak formatowania kodu ale proponują zacząć używać przesunięć bitowych

------------------------ [ Dodano po: 2 minutach ]

to takie luźne uwagi - ale wystarczy że przemyślisz pkt.1 o którym wspomniałem i już zacznie ci śmigać RS232 ;)

_________________
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: 3 gru 2013, o 10:10 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

ok, działa już chociaż mam pytanie. Czemu przy 1Mhz i 8Mhz czujnik ciśnienia daje mi inne wyniki?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2013, o 10:13 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3187
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 89

Może zależności czasowe muszą być spełnione.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 16:32 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Dobrze, to zacznijmy od poczatku:

Atmaga32-16PU, oscylator wewnętrzny 1Mhz,

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



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


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

Terminal nic nie reaguje, tzn nic nie wyświetla. Gdzie mój błąd? Biblioteka jest zła?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 17:25 
Offline
Moderator
Avatar użytkownika

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

Picowaty91 napisał(a):
        // Set frame format: 8 bit, no parity, 1 stop bit,  
        UCSRC = (1<<USBS)|(3<<UCSZ0);


a kolega jak używa jakiejś biblioteki to chociaż wie o co w niej chodzi ? czy tylko tak na chybił trafił - może zadziała a może nie zadziała ?

przy takiej inicjalizacji wcale nie dziwne że nie działa ...

1. zajrzyj do noty PDF
2. postaraj się zrozumieć przykład z tej noty bo go masz tam
3. jak czegoś nie rozumiesz z noty to dopytaj

wtedy jak zrozumiesz to już napiszesz prawidłową inicjalizację ok?

_________________
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: 4 gru 2013, o 17:41 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Ano właśnie, że starałem się robić zgodnie z notą katalogową.

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


Dalej w książce Pana Klimasza o rs232 że UCSZ odpowiada za długość znaku. Jeśli w przykładzie jest jak byk że 8 data i 3<<UCSZ0 wiec przyjąłem tak samo.

Cytuj:
Bit 7 – URSEL: Register Select
Ustawienie tego bitu powoduje wybranie rodzaju dostepu do rejestrów UCSRC lub UBRRH.
Jesli zapisany jako jeden – czytanie UCSRC. Jesli zapisujemy do UCSRC bit URSEL musi byc
ustawiony na jeden.
tego szczerze mówiąc nie rozumiem, więc nie ustawiałem.. może tu jest mój błąd?

Cytuj:
UCSBS: Stop Bit Select
Za pomoca tego bitu wybiera sie ilosc bitów stopu: 1 bit (USBS=0), 2 bity (USBS=1).
Potrzebne jest to przy nadawaniu. Odbiornik ignoruje te ustawienia.
- w programie o który wcześniej pytałem (na atmedze328) miałem 1 bit stopu i chodziło, więc tu ustawiłem podobnie.

Przepraszam za swoją ignorancję - nadal nie widzę gdzie popołniłem błąd mimo Twoich rad. Możesz dać mi jeszcze jakąś podpowiedź?

----Edit1
Sorry już widzę (jeśli o to chodzi- gadam, że chce 1 bit stopu a ustawiam 2 tak?)

----Edit2
Kurde, nadal nie działa.. Proszę wytłumacz mi o co chodzi?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 18:21 
Offline
Moderator
Avatar użytkownika

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

Bo w tej jednej linijce popełniłeś nie JEDEN błąd panie .... i sam widzisz jak zaczynasz czytać to zaczynasz dochodzić do sedna ... już wiesz że ustawiałeś 2 bity stopu zamiast jednego ...

a co do książki i noty PDF ... to powiedz mi ile razy można człowiekowi początkującemu przypominać - że PODSTAWA PODSTAW to nota PDF ....

panie kochany no proszę ... skoro już ją masz w łapkach to powiedz mi po jaki gwint ? albo inaczej co powoduje w twojej głowie- że zamiast zrobić tak jak masz w nocie ! jeśli nie rozumiesz nawet jakiegoś bitu czy ustawienia - to ty sobie wymyślasz - na podstawie czego ? no właśnie czego ? .... że ty zrobisz z jakimś tam bitem którego nie rozumiesz INACZEJ ?

no tak to daleko nie zajedziesz :(

-------------------------------------------

kolejna podpowiedź - bo już jesteś blisko, skoro wiesz jak zmienić ilość bitów stopu, skoro wiesz jak zmienić ilość bitów w ramce - to weź że pan resztę też zrób zgodnie z notą PDF i nie dodawaj własnych udziwnień :( i sprawdź czy działa

i ZAPAMIĘTAJ NA CAŁE ŻYCIE programisty ;) i elektronika - jeśli ci coś nie wychodzi wg książki, wg kursu czy wg poradnika z kosmosu - to ZAWSZE SIĘGNIJ DO NOTY PDF I ZRÓB WG NOTY - to MUSI WYJŚĆ .... .

i teraz pokaż kod inicjalizacji po poprawkach to polecimy dalej ....

sorry że ja nie pokazuję wprost i nie daję gotowca tylko zmuszam do myślenia. Ale niestety podanie gotowca zwykle skutkuje wygenerowaniem setek kolejnych pytań a w efekcie końcowym nawet chęcią abym napisał za kogoś gotowy cały program.

Po co ? ... jak się zrozumie o co chodzi to się później nie popełnia błędów

i ja na twoim miejscu to gdybym nie rozumiał czegoś z noty to bym o to dopytywał żeby zrozumieć - zamiast pytać gdzie popełniłem błędy w całym programie ? którego widać że tak troszkę przepisujesz skądś albo sklejasz z różnych niezrozumiałych dla siebie kawałków ...

_________________
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: 4 gru 2013, o 18:45 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Zgadzam się Panie Mirku co do gotowców.
Będę posłusznie wykonywał polecenia i mam nadzieję się czegoś nauczyć :)
zmieniłem program:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


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


Jednak wynik na terminalu tak jak poprzednio.
Kiedy stosuje się 1 a kiedy 2 bity stopu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 19:14 
Offline
Moderator
Avatar użytkownika

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

Picowaty91 napisał(a):
Kiedy stosuje się 1 a kiedy 2 bity stopu?


kiedy ? .... :) wtedy kiedy tego chcesz nikt ci tu niczego nie narzuca. Ważne żeby pamiętać że jeśli użyjesz 2 bity stopu w procku to ustawić 2 bity w terminalu i analogicznie z jednym bitem. A skoro ustawiasz bit USBS to znaczy że nadal włączasz 2 bity stopu przecież

UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

więc albo w terminalu ustaw pan 2 bity stopu albo tak jak już wcześniej wpadłeś na ten pomysł w ogóle nie ustawiaj tego bitu i będziesz miał 1 bit stopu

albo oglądaj moje poradniki gdzie wspominam o taki ala pseudo tricku ;) że w ogóle tą linię zakomentuj a uzyskasz prawidłowo ramkę

8,n,1

;)

_________________
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: 4 gru 2013, o 19:23 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Nie napisałem.. sprawdziłem dla 1 bitu stopu i dla dwóch, zmieniając to również w terminalu... niestety ten nie odpowiada



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 19:30 
Offline
Moderator
Avatar użytkownika

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

poczekaj - bo może ja czegoś nie wiem - masz ty Bluebooka i najprostsze z niego przykłady czy nie ?

_________________
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: 4 gru 2013, o 19:37 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Niestety nie wiem co to Bluebook. Wielki to grzech dla poczatkującego elektronika?

----Edit
Sprawdziłem topic4630.html, niestety nie posiadam.
Ale już wypożyczyłem, do odebrania w czwartek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 20:48 
Offline
Moderator
Avatar użytkownika

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

ok to może inaczej zanim wypożyczysz

.... masz w nocie PDF zarówno inicjalizację - jak i nadawanie pojedynczego znaku

z inicjalizacją już sobie poradziłeś chyba ;) ... więc ok

a teraz zrezygnuj z tych wszystkich prinf'ów i przesyłania przez strumień bo widać że tu kompletnie na razie nie masz pojęcia a poza tym to w zasadzie niepotrzebny balast na procku

więc napisz sobie DOKŁADNIE tak jak w nocie prostą funkcję do nadawania pojedynczego znaku i w pętli nieskończonej wysyłaj go powiedzmy co sekundę do terminala. Oczywiście przed pętlą główną zainicjalizuj już poprawnie UART

pamiętaj o właściwym ustawieniu fusebitów

TO JEST NAJPROSTSZY TEST - który ZAWSZE MUSI działać i wspominam o tym w bluebooku ;)

a wszystko zrobisz na podstawie TYLKO i wyłącznie noty PDF

wtedy będziesz miał pewność że strona programowa MUSI działać a jeśli nie będzie komunikacji to znaczy że masz coś nieteges po stronie sprzętowej

wtedy

1. sprawdzasz fusebity
2. sprawdzasz kable/przejściówkę bo może ją masz spapraną
3. sprawdzasz ustawienia terminala

nie ma że boli musi działać

a jak wpadnie ci w łapki Bluebook i poczytasz to wtedy ci się już to w ogóle ładnie w całość ułoży

_________________
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: 4 gru 2013, o 21:18 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

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


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


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


2. Korzystam z http://sklep.modulowo.pl/pl/p/MOD-05.Z- ... towany/121 . Działa prawidłowo, sprawdzałem przed sekundą na kodzie o który pytałem z 10 postów wcześniej i atmedze 328 i śmiga, podłączone tak jak do atmegi328 do pinów Rx i Tx na krzyż przez rezystory 1k (w projekcie z atemga328 działa)

3. Obrazek
czyli: Hfuse:99 Lfuse:E1 - 1Mhz internal

4.Obrazek
na screenie wkradł się błąd, sprawdząłem różne Baudy, na 2400 nie działa również) pozatym gdyby był tu źle baud to powinien chociaż krzaki pokazywać prawda?

5.Przesyłam nawet zdjęcie płytki jeśli to coś pomoże
Obrazek

Wydaje mi się, że wszystko sprawdzone, jednak nadal nic nie widać na termianalu. Możliwe żeby to było coś źle z Amtegą?



Ostatnio edytowano 4 gru 2013, o 21:35 przez Picowaty91, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2013, o 21:31 
Offline
Moderator
Avatar użytkownika

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

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


to nie ma sensu - ale ok jak będziesz miał bluebooka to zobaczysz że przesunięcia nie są trudne - napisz tak jeśli już piszesz 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.


------------------------ [ Dodano po: 2 minutach ]

druga sprawa - widać że nie znasz podstawowych typów :( .... więc ok w oczekiwaniu na książkę proszę - to nie ma sensu:

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


przecież przy kompilacji tego dostajesz jak nie błąd to na pewno warninga - czyli wynika z tego że chyba o zgrozo piszesz kod w Atmel Studio zgadza się ? jeśli tak to weź to wychrzań na razie i zrób to w Eclipse - a zmienną zrób tak:

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


bo to OGROMNA różnica albo w ogól nie rób tej zmiennej tylko napisz:

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


------------------------ [ Dodano po: 3 minutach ]

Picowaty91 napisał(a):
to powinien chociaż krzaki pokazywać prawda?


nie prawda - czasem będą a czasem nie

poza tym co za problem sprawdzić nawet diodą LED do pinu Tx ?

_________________
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: 4 gru 2013, o 21:49 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Usunąłem (0<<USBS), usunąłem zmienną i wstawiłem USART_Transmit( 'a' );
Podłączyłem diode LED - anoda do pinu Tx Atemgi, katoda to masy - dioda świeci światłem ciągłym ;)
Terminal nadal nic nie pokazuje :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2013, o 00:59 
Offline
Moderator
Avatar użytkownika

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

standardowo na pinie TX jest stan wysoki gdy działa RS232 więc to normalna sytuacja

ale to że dioda nie mruga w trakcie nadawania ? to może oznaczać tylko że albo nie do tego pinu podłączyłeś diodę albo że program się nie wgrał albo w najgorszym wypadku że pin uszkodzony

ale ok PRZEDE wszystkim pamiętaj że zawsze jak piszesz na forum a wprowadzasz poprawki w kodzie nawet najdrobniejsze - to wklejaj to co zrobiłeś jeśli chodzi o kod - zamiast opisywać - o ile chcesz żeby łatwiej było pomóc - tym bardziej że robisz mega prostą i podstawową rzecz


--------------
o matko! ;) i jeszcze jedno bo teraz zobaczyłem dopiero zdjęcie stykówki ;)

panie kolego - tym bardziej zapraszam do obejrzenia tego poradnika :

http://mirekk36.blogspot.com/2012/12/av ... aczac.html

bo na stykówce jest jakby masakra jakaś - to wprawdzie nie wpływa na to że nie działa ci rs232 ale no kondensator podłączony do AREF na takiej LINIE jak z dżungli ? - sorry ale to już lepiej byłoby w ogóle tam kondka nie podłączać i żeby pin wisiał w powietrzu bo teraz to robisz sobie antenę SETI do nasłuchu sygnałów i zakłóceń z kosmosu :(

weź ty może przede wszystkim na własny użytek rozrysuj dokładnie ten schemat połączeń - bo czy czasem tu u ciebie nie kryją się kolejne ZONK'i ? :(

_________________
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: 5 gru 2013, o 16:24 
Offline
Nowy

Dołączył(a): 29 lis 2013
Posty: 11
Pomógł: 0

Sprawdziłem, podłączone do prawidłowego pinu.
zmieniłem Atmegę nadal nic..
Czyli nie wgrał się program tak?
Programator i atmege podłączyłem wg tego schematu:Obrazek
podpinając odpowiednio do pinów z Atmegi32 . Czy to poprawny schemat?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2013, o 21:43 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Picowaty91 napisał(a):
Czyli nie wgrał się program tak?

Proponuje "cofnąć się w rozwoju" i napisać program migający LED w oparciu o funkcje z nagłówka <util\delay.h> i wtedy powrócić do tematu. Od tego należy zaczynać uruchamianie każdego systemu z procesorem.
Picowaty91 napisał(a):
Czy to poprawny schemat?

Tak.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2014, o 13:12 
Offline
Nowy

Dołączył(a): 28 cze 2014
Posty: 1
Pomógł: 0

Proszę wybaczyć, że odkopuję ten wątek - problematyka jest jednak identyczna.

Pozwólcie, że się pokrótce przedstawię - Szymon, student Informatyki na PolSl, w trakcie pisania pracy inżynierskiej. Jej problematyka właśnie przyprowadziła mnie na Forum.

Chcę wykonać komputer pokładowy do Subaru - w tym celu muszę skomunikować się z komputerem silnika - ów komputer gada sobie na następujących parametrach: 1953 baud, 8 bitów danych, 1 bit stopu Even parity. I to właśnie ten nietypowy baud robi problem.

Do wykonania zadania zanabyłem ATmegę 162 (dwa UART'y - jeden do auta, drugi do nadajnika Bluetooth, którym będę nadawał dane do appki na Androida). Nim trafiłem na post na blogu pana Kardasia poruszający problematykę wyznaczania częstotliwości taktowania / wyliczania UBRR, wyliczyłem z noty katalogowej, a także z pewnej strony internetowej (obecnie, niestety, niedziałającej), iż zerowy błąd uzyskam dla częstotliwości 16MHz i UBRR = 511.

Kupiłem więc kwarc 16MHz i (z pewnymi przygodami) spiąłem go z ATmegą. Fusebity ustawiłem wspaniałym mkAvrCalculatorem - wyłączyłem CKDIV8, i wybrałem External crystal resonator jako >8Mhz. Do tej pory wszystko działało poprawnie - uC ładnie się wykrywa i programuje. Mój programator to USBasp, jeśli ma to znaczenie - jeden projekt już z nim wykonałem, więc jest względnie OK.

Następnie ściągnąłem poprawioną wersję biblioteki pana Fleury'ego do komunikacji po UART:
http://beaststwo.org/avr-uart/
Tutaj, po kilku perturbacjach, znów udało mi się uzyskać sukces -poprzez CP210x (konwerter USB-RS232), dla standardowej komunikacji z baud 9600, 8 bitów danych, 1 bit stopu, none parity wysyłałem (z _delay_ms(5000)) z uC i odbierałem na PC w Putty literkę "a". So far, so good.

EDIT: Tutaj dodam, bo to ważne - F_CPU ustawiam globalnie, w Ustawieniach Projektu w ATmel Studio, na 16000000.

Tutaj zaczęły się schody.
Za wszystkie diabły nie dałem rady zmusić tego zestawu do rozmowy na baud = 1953. Potępując zgodnie z instrukcją biblioteki, otrzymywałem na terminalu zamiast "a" tylko krzaczki (na dodatek, choć mogę się mylić, odbierałem dwa "krzaki" co 5 sekund, nie jeden).

Wykonałem więc "back to basics" - wziąłem kod z dokumentacji mojej 162 (a konkretnie z jednej ze stron, ale jest identyczny):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niestety, "na zachodzie bez zmian", nadal krzaki. Wtedy natrafiłem na post pana Kardasia, dokonałem ręcznej kalkulacji UBRR ze wzoru:
UBRR = ( FOSC + BAUD * 8UL ) / (16UL * BAUD) -1
Dla FOSC = 16000000 i BAUD = 1953. Wynik mnie zaskoczył:
UBRR = 511,5327700973
Czyli... tak bardzo ni w PiS, ni w PO - ani to 511, ani 512. Oczywiście wartość 512 w kodzie również sprawdziłem - i oczywiście nie działa. Krzaki. Błąd musi być w obu przypadkach zbyt wielki.

Drodzy moi - cóż czynić w tej sytuacji? Mnie przychodzi do głowy jedynie (jeśli to faktycznie kwestia zbyt wielkiego błędu transmisji) zmiana kwarcu - ale na jaki?
Nie wiem, jak przekształcić ten wzór, aby dobrać najbardziej idealny, istniejący na rynku kwarc, i wartość UBRR, które pozwolą mi na tym dziwnym baudzie 1953 gadać.
Czy mogę prosić o wskazówki?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2014, o 18:53 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

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

i sprawdź działanie przy prędkości 9600 a potem 1953. Mi bardziej odpowiada terminal Bray'a, bo można zmieniać prędkość bez zamykania programu czy rozłączania portu. Nie szukaj innego kwarcu. Jak ustawisz w terminalu baud na custom w zakresie 1853 -2053 też powinno działać (aby zmienić custom w trakcie działania należy po modyfikacji wartości na chwilę zmienić baudrate z custom na inną). A jak chcesz upewnić się co do taktowania mikrokontrolera to dodaj sobie do kodu zmianę stanu dowolnego wyjścia i podepnij LED.

_________________
Dragonus Cracovus: Biomagia



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: 51 ]  Przejdź na stronę Poprzednia strona  1, 2

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