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



Teraz jest 5 lut 2025, o 18:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 4 sie 2014, o 21:00 
Offline
Nowy

Dołączył(a): 20 sty 2014
Posty: 17
Pomógł: 0

Witam,

Dorwałem wydawać by się mogło bardzo prosty kod składający się tylko z kilkunastu linii, napisany w C++ na Arduino. Chciałem go przepisać do C i stworzyć własny układ. Jednak nie wszystko działa tak jak powinno. Poniżej omawiany kod w C++:

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



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


Układ po podłączeniu do licznika prędkości powinien uruchomić w nim tryb "dealer mode". Tak się jednak nie dzieje. Może mój uproszczony sposób na ustawienie czwartego bitu w pierwszym elemencie tablicy jest błędny?

Mój zestaw to Atmega8 taktowana wewnętrznym zegarem z częstotliwością 8 MHz.



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

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

Prędkość transmisji jest poprawna (nietypowa 7800bps)?
Nie mam pojęcia za co jest odpowiedzialny pin nr 2 w Arduino w Twoim układzie, ale może brak jego ustawienia jako wyjście stanowi problem...
Poza tym nie wiem jak są napisane funckje "uart_putlong", ale jeśli mają one wyświetlać wartość liczbową to nie jest to zgodne z kodem Arduino, gdyż tam wysyłane są pojedyncze bajty (coś na wzór "uart_putc" powinno być). Jeśli są to pewne dane sterujące w formie komend, to taka różnica ma kolosalne znaczenie, ponieważ powinno być wysłane dokładnie 7 bajtów.



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

Dołączył(a): 20 sty 2014
Posty: 17
Pomógł: 0

Kod w C++ pisany był na arduino, ja używam zwykłej atmegi8 na płytce stykowej. Prędkość transmisji mam ustawioną na 7800 bps. Pin 2 to pozostałość po obsłudze obrotomierza (nie bierze udziału w obsłudze "dealer mode").

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


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


EDIT: Miałeś rację. Zmieniłem na uart_putc i licznik zaczął reagować. Dzięki! :)



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

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

Proszę bardzo :)

No i wszystko jasne - użyta w funkcji "uart_putlong" funkcja "ltoa" zamienia liczbę na jej reprezentację znakową (tekst), czyli szereg zer i jedynek, ponieważ dla parametru systemu liczbowego (radix) podana została dwójka tj. zapis binarny.
W takiej sytuacji wszystkie zera były wysyłane jako bajty o wartości 48 i 0 (znak końca łańcucha tekstowego), a liczba 16 odpowiadała szeregowi bajtów: 49, 48, 48, 48, 48, 0 :)
Na końcu oczywiście jeszcze reprezentacja binarna sumy kontrolnej.
W takim razie wysłanych było, ponad 2 * 6 + 6 + [2..9](checksum) = [20..27] bajtów zamiast 7. Ot taka moja mała uwaga ;)


Autor postu otrzymał pochwałę


Ostatnio edytowano 4 sie 2014, o 22:00 przez atmel, łącznie edytowano 1 raz

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

Dołączył(a): 20 sty 2014
Posty: 17
Pomógł: 0

No i wszystko jasne. To nie miało prawa działać :)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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