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



Teraz jest 5 mar 2026, o 15:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 11 sie 2014, o 11:19 
Offline
Nowy

Dołączył(a): 15 cze 2014
Posty: 10
Pomógł: 0

Z racji tego, iż to mój pierwszy post na forum, pragnę w pierwszej kolejności wszystkich serdecznie powitać ;). Przechodząc do meritum sprawy: od dłuższego czasu pracuję nad projektem testera diagnostycznego opartego na scalaku STN1110 - odpowiednik ELM327 se strony software'owej (te same komendy AT, OBD etc.). Układ współpracuje z uC ATMega32, która komunikuje się z STNem poprzez UART. Całość sterowana jest czterema przyciskami microswitch a dane odebrane z pojazdu wyswietlane na wyświetlaczu LCD 4x16. Środowisko programistyczne to Eclipse - język C. W programie wykorzystuję biblioteki zarówno z Bluebooka (LCD, Superdebounce) jak i z greenbooka (UART oraz zmodyfikowane przezemnie funkcje parsujące). Cały program opiera się na wysyłaniu odpowiednich zapytań do STNa, który to komunikuje się z ECU samochodu i zwraca odpowiednie dane, które następnie podlegają parsowaniu i wyswietlaniu na LCD. Problem pojawia się kiedy wysyłam zapytania o więcej niż jedną wartość. Np. chcę wyświetlać na LCD 4 wartości: temp. cieczy chłodzącej, obroty silnika, prędkość pojazdu oraz obciążenie odświeżając każdą wartość cyklicznie (narazie w pętli głównej while). Niżej kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Na diodach sygnalizujących komunikację pomiędzy Atmegą a STNem oraz STNem a ECU samochodu widać komunikację pomiędzy poszczególnymi układami. Niestety nie widać żadnej wartości wyświetlanej na LCD. Natomiast jeśli wysyłam każde zapytanie poprzez przyciśnięcie innego przycisku (4 przyciski na 4 wartości) z funkcji superdebounce to wszystko ładnie się wyświetla (oczywiście jednorazowo bez odświeżania wartości). Moje pytanie brzmi, czy problemem w tej sytuacji są linie programu oczekujące na znak gotowości:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
, które to prowadzą do zatrzymania programu? Jeśli tak to jak można by było obejść owy problem??
Za wszelkie porady serdecznie dziękuję ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2014, o 11:54 
Offline
Użytkownik
Avatar użytkownika

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

Może spróbuj dla testu dodać pewne opóźnienia między odczytami...

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

Być może po odebraniu znaku '>' układ nie jest gotowy na natychmiastowy odbiór danych i potrzebny jest pewien odstęp czasowy. Podane przeze mnie czasy są oczywiście przykładowe i mają na celu jedynie zlokalizowanie przyczyny potencjalnych problemów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sie 2014, o 20:36 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Podstawy debugowania problemow opisywal mirekk w ktoryms poradniku. Podpowiem, poswiec jeden pin megi i podlacz do niego diode (z rezystorem) i zapal sobie ta diode w odpowiednim miejscu. I patrz kiedy ci sie przestanie zapalac. A jak juz masz LCD to w ogole wypas.

I juz dzis komus dawalem porade. Skoro cos chodzace z komunikacja z UART nie dziala jak nalezy, to pierwsza rzecz to podlaczyc do PC i udawac, raz jedna strone raz druga i sprawdzic co sie dzieje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2014, o 20:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

Może to niewiele wniesie do kodu ale możesz włożyć każdą pętlę while w poprzednią żeby uzyskać zawsze zbieranie informacji w tej samej kolejności :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2014, o 21:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

I oczywiście te delaye też są warte sprawdzenia...

A jak wygląda symulacja w terminu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2014, o 21:38 
Offline
Nowy

Dołączył(a): 15 cze 2014
Posty: 10
Pomógł: 0

Panowie problem rozwiązany, żadna opcja z wysyłaniem komend w pętli głównej oraz blokowaniem pętli w oczekiwaniu na znak ">" nie działała. Po prostu program się blokował w chwili oczekiwania i nie obsługiwał poszczególnych funkcji wyświetlających dane na LCD. W końcu postanowiłem zmienić koncepcję. W pętli while znajduje się tylko obsługa zdarzenia UART_RX_STR_EVENT(bufor). Przed pętlą wysyłam jednokrotnie zapytanie o obciążenie uart_puts("010r\r), a następne zapytanie wysyłam dopiero w programie obsługującym zdarzenie od komendy 0104 (odbieram dane na temat obciążenia, wyświetlam je na LCD a pod koniec funkcji wysyłam zapytanie o kolejną wartość(temperaturę) uart_puts("0105/r), i tak robię jeszcze w trzech kolejnych funkcjach a w ostatniej znów pytam o pierwszy parametr (0104). I dopiero takie rozwiązanie daje zadawalające rezultaty. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2014, o 22:28 
Offline
Użytkownik
Avatar użytkownika

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

Tak to jest kiedy na forum przedstawiany jest tylko pewien fragment kodu, a pozostały może oddziaływać na całą resztę.
To świetnie że udało się rozwiązać problem, ale na przyszłość, mimo iż wydaje się to niepotrzebne, warto dodać również te elementy które są również pośrednio powiązane, a bardziej celowo uda się pomóc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sie 2014, o 08:36 
Offline
Nowy

Dołączył(a): 15 cze 2014
Posty: 10
Pomógł: 0

Racja ;) Następnym razem postaram się lepiej przedstawić problem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 kwi 2015, o 17:26 
Offline
Użytkownik

Dołączył(a): 30 paź 2013
Posty: 32
Pomógł: 0

Moglbys podpowiedziec jak interpretowales sygnal np. obciazenia ktory wychodzi juz elma do avr. Tzn. wysegregowales dane do przetworzenia, bo elm wysyla to chyba w czwartym bicie.

ups.odkopalem temat z przed roku, ale moze ktos cos pomoze.



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

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