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



Teraz jest 25 sty 2025, o 00:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 3 kwi 2013, o 14:44 
Offline
Nowy

Dołączył(a): 13 gru 2012
Posty: 2
Pomógł: 0

Witam.To mój pierwszy post mimo że przeglądam to forum już od dawna więc proszę o wyrozumiałość.
Staram się uruchomić radyjko oparte na si4703.Rejestry mają pojemność 16 bitów.
Czy w obsłudze TWI z niebieskiej książki wystarczy zmienić zmienne bufora i funkcji z uint8_t na uint16_
aby poprawnie się komunikować?

No i liczbę odebranych bajtów ustawić na 2.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 14:55 
Offline
Moderator
Avatar użytkownika

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

ale po co w ogóle zmieniać zmienne bufora z uint8_t na większe ? ;)

pomyśl sobie masz np wysłać po TWI jakiś rozkaz 16-bitowy do swojego radyjka, niech będzie, że na przykład ma on wartość (strzelam) np:

Kod:
uint16_t rozkaz1 = 0xA42B;


no to co za kłopot zapakować do bufora nadawczego

Kod:
bufor[0] = rozkaz1>>8;
bufor[1] = rozkaz1;


i CIACH - wysyłasz bufor 2 bajtowy .... i poszło - radyjko łyknęło i czuje się dobrze - nawet reaguje ochoczo na rozkaz ;)

no chyba że zgodnie z notą PDF radyjka miałby najpierw przyjść młodszy bajt a starszy jako drugi - to co za problem ?

Kod:
bufor[0] = rozkaz1;
bufor[1] = rozkaz1>>8;


A przecież gdybyś zmienił wielkość zmiennych bufora - to można owszem - ale miałbyś więcej roboty bo trzeba by było sobie bibliotekę przerabiać - po co komplikować sobie życie takimi pomysłami ? skoro C daje TAKIE fajne różne możliwości ;)

_________________
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 kwi 2013, o 16:09 
Offline
Nowy

Dołączył(a): 13 gru 2012
Posty: 2
Pomógł: 0

Ok.Jeśli napiszę

uint8_t bufor[1];

bufor[0]=0x8100 warning!
bufor[1]=0x8100>>8

dostaje warninga. Dzieje się tak że do pierwszego elementu bufora chcę zapakować zmienną dwubajtową. Jeśli się mylę proszę o wyrozumiałość:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 16:30 
Offline
Moderator
Avatar użytkownika

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

no ale dziwisz się ? a nie widzisz przykładów jak ci wyżej napisałem ???? coś nie rozumiem o co teraz tobie chodzi :(

toż same błędy w tym kodzie porobiłeś :(

uint8_t bufor[1]; czyli zdefiniowałeś bufor z JEDNYM TYLKO elementem a później chcesz pakować do niego dwa elementy ??? no jak to ? - toż jak chcesz wpakować do niego 2 alementy to weź że zdefiniuj bufor 2 elementowy

Kod:
uint8_t bufor[2];


to po pierwsze

a po drugie ......

oczywiście warning może się pojawić bo próbujesz zapakować wartość 16-bitową do elementu 8-bitowego i kompilator daje ostrzeżenie pytając czy na pewno wiesz co robisz ? ... żeby zamknąć mu usta wystarczy napisać:

Kod:
bufor[0] = (uint8_t)0x8100;
bufor[1] = (uint8_t)0x8100 >> 8;


czyli robisz jawne rzutowanie

ale z drugiej strony - jeśli twoje komendy są dwubajtowe to co za kłopot napisać to tak?

Kod:
bufor[0] = 0x00;
bufor[1] = 0x81;


no i teraz żadnego warninga a słowo 2 bajtowe sam ręcznie rozdzieliłeś na dwa bajty - młodszy i starszy - widzisz to ?

nie wiem np jeśli taka komenda miałaby mieć nazwę np (strzelam VOL_UP) to ja bym sobie zrobił tak:

Kod:
uint8_t vol_up[2] = { 0x00, 0x81 };


i wysłał za pomocą funkcji z książki bufor o nazwie vol_up o długości 2 bajtów i masz wysłaną jakąś tam komendę, a dzięki takiemu zapisowi możesz sobie zdefiniować ładnie w kodzie wiele takich komend, no tu możliwości jest mnóstwo

ale podejrzewam, że troszkę skoczyłeś na głęboką wodę bez kamizelki ratunkowej - bo nie ogarniasz jeszcze to znaczy za mało poćwiczyłeś i rozumiesz w ogóle tablice w języku C - więc co chwilę będziesz miał problem - jednak TABLICE to podstawa! sam widzisz na powyższym przykładzie.

_________________
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  
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ł: Majestic-12 [Bot] i 5 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