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



Teraz jest 26 gru 2024, o 04:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 30 cze 2013, o 20:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

Mam układ, który zbudowałem, ma on za pomocą RS232 sterować wypełnieniem na dwóch kanałach (PWM)
Do komunikacji używam FT232 (to raczej mało ważne)

Wymyśliłem, że zamiast wynajdywać sposób komunikacji, jakieś kody etc spokojnie mogę posłużyć się systemem binarnym i tak, mam ramkę 8 bit,n,1

W tych 8 bitach chcę zapisać następująco:
Pierwsze cztery najmłodsze bity mają określać stan wypełnienia
50 - 100 %
Następny bit ma określać kanał A,B

Czyli mamy:

0b000CXXXX

Gdzie: C - kanał
X - wartość wypełnienia

Kolejnych 3 najstarszych też użyję ale to później, jak rozgryzę to.

Taka forma komunikacji pozwoliłaby mi w bardzo prosty sposób sterować urządzeniem, bez zabawy z kodami ASCII, nadmiarowością etc. (broń boże o szybkość mi nie chodzi, o prostotę)

--- Problem ---
Chcę na LCD wyświetlić to co "przyleciało" do uC, jednak wszystko w postaci binarnej.
Gdy użyję itoa to zjada mi zera, a w przypadku np C mam dwa kanały, jeden określa zero, drugi jedynka.

Mam nadzieję, że rozumiesz póki co.

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

Ale wyświetla mi głupoty, nie wiem czemu... Może jestem zmęczony? Wracam do operacji bitowych, maskowania i wydaje mi się że myślę dobrze.

Prosiłbym o pomoc w rozwiązaniu problemu ;[

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2013, o 21:20 
Offline
Użytkownik
Avatar użytkownika

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

Sposób z pętlą for jest dobry tylko pętla powinna zacząć liczenie o 7 a nie od 8. Zmienna test jest typu uint8_t czyli ma 8 bitów, a liczenie jak zwykle zaczynamy od zera. Czyli bit na "pierwszym" miejscu oznaczamy jako zero a "ostatni" bit jako 7.
A żeby pętla liczyła od 7 do 0 z uwzględnieniem zera to zmienną "i" można zdeklarować jako int8_t czyli zmienna może przyjmować wartości ujemne. A w pętli for taki warunek i>=0. Wtedy pętla będzie się wykonywać jeśli zmienna "i" będzie miała wartość w przedziale od 7 do 0.

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2013, o 22:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

Zrobiłem właściwie tak jak pisałeś. A liczyłem od 1 do 8 świadomie, co oczywiście było błędem wystarczy popatrzeć na porty np PD0-PD7 i wszystko jasne :)

Pochwała dla Ciebie kolego

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2013, o 22:25 
Offline
Użytkownik
Avatar użytkownika

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

Można liczyć od 8 do 1 i zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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