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



Teraz jest 18 sty 2020, o 09:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 27 lis 2019, o 00:06 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Czołem!
Udało mi się uruchomić soft uarta na Atmedze328p. Kwarc mam 11.0592MHz ze względu na RS485 (baud 19200). Dla soft uarta potrzebuję bad 31250, więc b_value wychodzi 55 (błąd ok 0,4% jeśli dobrze pamiętam). Mam taki problem, że jeśli wysyłam 3 wartości po sobie - 0xB1, 0x08, 0x7F, to w rzeczywistości wysyłane jest 0xFD, 0xF5, 0xFB.

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


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


Mógłby ktoś podpowiedzieć gdzie leży problem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 06:01 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1963
Pomógł: 91

A gdzie to mierzysz/sprawdzasz? Po stronie TTL czy RS422/485? Nie zamieniłeś polaryzacji?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 09:08 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Terminal w symulatorze Proteus (tam widać wysyłane CV wartości) i urządzenie które ma ten sygnał odbierać, a dzieją sie na nim niezamierzone rzeczy. Połączenie dobre, sprawdzałem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 09:45 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1963
Pomógł: 91

A sprawdzałeś na std prędkościach?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 16:40 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

w sumie nie, ale finalnie i tak musi to chodzić na 31250



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 17:10 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1963
Pomógł: 91

Zawsze zaczynaj od standardów, a jak będą chodzić to idź dalej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 19:16 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Ustawiłem baud 9600, jeśli korzystam z funkcji putint to mam zupełnie co innego niż wysyłam, za to funkcja puts wysyła poprawnie. Jeśli wyślę kilka znaków po sobie, np L P a to w terminalu mam 4C 50 61.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 19:31 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1963
Pomógł: 91

Rozpisz sobie kody Ascii znaków wysyłanych i odebranych. Porównaj bity. Po drugie zainwestuj w nawet tani logic analyzer - to podstawowe narzędzie w cyfrówce.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 20:04 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1434
Lokalizacja: okolice Warszawa
Pomógł: 148

witam,
OK, napisałeś co odbierasz po wyslaniu znaków "L P a". otrzymane wartości 4C 50 61 są poprawne .
A co otrzymujesz po wyslaniu int'a 123? jeżeli 49 50 51, to jest OK. Czyli trzy cyfry w ascii reprezentująca wartość.
hmm..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 20:08 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Po wysłaniu inta 123 w terminalu mam 31 32 33, jak wyślę 127 to mam 31 32 37. gdyby nie te 3 z przodu to prawie by się zgadzało.
Powoli pracuję nad przejściówką RS232/USB, ale na chwilę obecną muszę się wspomóc emulowanym terminalem ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 20:21 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1434
Lokalizacja: okolice Warszawa
Pomógł: 148

przejrzyj funkcję get...()
prawdopodobnie masz ocoś z konwersją na hex ?
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2019, o 20:43 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Nie mam żadnej funkcji z get. Cały kod do obsługi uarta jest w pierwszym poście. Nie widzę nic co odpowiadałoby konwertowanie wartości :roll:
Jeśli w putint wpiszę 0 lub 0x00 to mam 30, jak wpiszę wg tabelki 0b00110001 to mam 34 39 - czyli 49 z błędami :)

Podejrzewam, że problem tkwi w funkcji putint, a dokładniej w wykorzystaniu wewnątrz niej puts. Dobrze myślę, że zamienia ona wartość na znak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2019, o 10:49 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 14 lut 2014
Posty: 269
Lokalizacja: Jaskółowo k. Warszawy
Pomógł: 7

Cześć.
Z tego co piszesz to sama wysyłka działa prawidłowo.
To co podglądasz to nie int a wartości w hex. a później w terminalu widzisz to jako char.
Czyli wstawiając 123 to nie liczba a text "1" "2" "3"
Sprawdzając tabelę ascii powinieneś mieć wysyłane w HEX'ie 31 32 33.
W tabeli ascii "znaki liczbowe"(nie cyfry) zaczynają się od 30 i tak po koleji do 39.

_________________
POZDROWIONKA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2019, o 17:46 
Offline
Nowy

Dołączył(a): 18 lis 2019
Posty: 15
Pomógł: 1

W soft_uart_sputchar.S nie są blokowanie przerwania a funkcja opiera się programowe opóźnienia. Inne przerwania mogą więc przeszkadzać.
Soft uart powinien być oparty o przerwania timera. Po co właściwie soft uart? nie ma AVR z wystarczającą liczbą UART?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2019, o 20:49 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Jeden uart już wykorzystuję do RS485. Gdybym wiedział, że do tej komunikacji też będę potrzebował uarta to bym wykorzystał np. Atmega164.

------------------------ [ Dodano po: 22 minutach ]

Nie mam już pomysłów jak to rozgryźć, może prościej będzie zastosować funkcję zamieniająćą wartość bin lub hex do ascii i tak to wysyłać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2019, o 23:24 
Offline
Moderator
Avatar użytkownika

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

Przecież pisałałeś w innym wątku że temat już ogarnięty

_________________
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: 28 lis 2019, o 23:42 
Offline
Użytkownik

Dołączył(a): 14 sty 2018
Posty: 150
Pomógł: 0

Ogarnąłem temat podglądu tego co jest wysyłane, wirtualny terminal, a nie samo przesyłanie wartości.



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: 17 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO