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



Teraz jest 5 lip 2026, o 13:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 9 sty 2016, o 12:49 
Offline
Nowy

Dołączył(a): 24 lis 2014
Posty: 8
Pomógł: 0

Witam

Mam następujący problem jest sobie jakiś adres 0x07 pod tym adresem jest 8 bitów przykładowo chcę ustawić na "1" bit 4 i wyzerować bit 6 używając I2C:
TWI_write(ADRR, 0x07, (1<<4)) - tutaj ustawie 4 bit na "1"
TWI_write(ADRR, 0x07, ???????) - jak wyzerować ten 6 bit???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 13:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

A taki zapis nie jest Ci znany? Zeruje w X bit o numerze BIT (robi and-a z liczbą mającą tylko wyzerowany bit numer BIT):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 13:27 
Offline
Nowy

Dołączył(a): 24 lis 2014
Posty: 8
Pomógł: 0

Dzięki za odpowiedz, podany przez Ciebie zapis jest mi znany, niestety nie wiem jak go użyć w tym przypadku, co mam wpisać pod X?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 13:29 
Offline
Moderator
Avatar użytkownika

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

zrozumiec napisał(a):
Dzięki za odpowiedz, podany przez Ciebie zapis jest mi znany, niestety nie wiem jak go użyć w tym przypadku, co mam wpisać pod X?


Panie, panie - w zapisie 0x07

nie ma żadnego iKSA pod którego coś musisz podstawiać .... toż to format zapisu liczb HEX w języku C

0x07
0xAB

_________________
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: 9 sty 2016, o 13:33 
Offline
Nowy

Dołączył(a): 24 lis 2014
Posty: 8
Pomógł: 0

Hehe to ja wiem chodziło mi oz zapis Pana Roberta X &= ~(1 << BIT); o ten X mi chodzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 13:36 
Offline
Moderator
Avatar użytkownika

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

zrozumiec napisał(a):
o ten X mi chodzi.


Ty zrozum lepiej co to jest WYRAŻENIE w języku C, jak widzisz np taki zapis

(1<<3)

to traktuj to jako wyrażenie, które musi zostać obliczone i będzie prezentowało pewną wartość, w tym przypadku wartością tego wyrażenia będzie jaka liczba ? No liczba =8 zgadza się ?

A więc co to za różnica co to będzie ten X ?

czy to będzie rejestr, czy jakaś zmienna w programie itp itd - co tylko zechcesz

_________________
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: 9 sty 2016, o 13:43 
Offline
Nowy

Dołączył(a): 24 lis 2014
Posty: 8
Pomógł: 0

Dalej nie rozumiem jak to zrobić w tym konkretnym przypadku, kiedy mam podany tylko adres i numer bitu. TWI_write(ADRR, 0x07, ~(1<<6)) - tak będzie dobrze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 14:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

X to jest jakaś wartość. Takie matematyczne X. I w nim jest zerowana wartość bitu o numerze BIT.
Sam zapis ~(1 << BIT) ustawia liczbę z wyzerowanym jednym bitem o numerze BIT a resztą jedynek.
(1 << BIT) robi przesunięcie w lewo o BIT razy liczbę jeden, co jest równoważne z pomnożeniem jeden przez 2 podniesionym do potęgi BIT ( (1 << BIT) = 1 * 2^BIT ). A daje to przy BIT = 6 liczbę 64, co w hex daje 0x40 a binarnie daje 0b01000000. Użycie negacji ~ daje ci zanegowanie tej wartości czyli binarnie 0b10111111.

Pooglądaj poradniki Mirkowe https://www.youtube.com/watch?v=kZ32DsDWzDg&list=PLtXXWLsA5QNi26MlYAaug9Uvh_vXWCGGF

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 5 minutach ]

Jeżeli chcesz tylko uzyskać jakąś stałą to nie korzystasz z X tylko wpisujesz samo ~(1 << BIT).
Zapis był pokazany, bo na pewno masz go u siebie przy, na przykład, inicjalizacji portów. Coś w stylu:
http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 14:19 
Offline
Moderator
Avatar użytkownika

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

zrozumiec napisał(a):
Dalej nie rozumiem jak to zrobić w tym konkretnym przypadku, kiedy mam podany tylko adres i numer bitu. TWI_write(ADRR, 0x07, ~(1<<6)) - tak będzie dobrze?

Masz może Bluebooka ? Jeśli nie to jednak polecam żeby właśnie to lepiej zrozumieć:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

_________________
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: 9 sty 2016, o 14:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Masz może Bluebooka ? Jeśli nie to jednak polecam żeby właśnie to lepiej zrozumieć

Dokładnie tak. Widać, że zaczynasz swoją drogę z programowaniem, więc warto zaopatrzyć się w Bluebooka.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 14:34 
Offline
Nowy

Dołączył(a): 24 lis 2014
Posty: 8
Pomógł: 0

Dzięki Robert. Mam nadzieję, że teraz zrozumiałem. Ogólnie rzecz biorąc, chciałem wyzerować tylko ten jeden konkretny bit 6 bez modyfikacji pozostałych, ale w tej postaci jest to niemożliwe. Musiałbym najpierw odczytać wartość wszystkich rejestrów pod adresem 0x07, przypisać do zmiennej(x) i wtedy ta zmienna(x) &= ~(1<<6) wyzerowałaby mi tylko ten 6 bit bez modyfikacji pozostałych, dobrze zrozumiałem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 15:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Ogólnie rzecz biorąc, chciałem wyzerować tylko ten jeden konkretny bit 6 bez modyfikacji pozostałych, ale w tej postaci jest to niemożliwe. Musiałbym najpierw odczytać wartość wszystkich rejestrów pod adresem 0x07, przypisać do zmiennej(x) i wtedy ta zmienna(x) &= ~(1<<6) wyzerowałaby mi tylko ten 6 bit bez modyfikacji pozostałych, dobrze zrozumiałem?

Tak. Tylko nie wszystkich rejestrów a jednego rejestru a wszystkich bitów :)
Tak dokładnie się robi jak się steruje wyjściami procesora. Tylko w ich wypadku jest to jedna linijka od razu to robiąca:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tutaj nie masz bezpośredniego dostępu do wartości, więc musisz ją najpierw odczytać a potem po modyfikacji zapisać.

C ma taką fajną właściwość, że możesz sobie zrobić funkcję np. TWI_modify_bit() i w niej zrobić te operacje (odczytu, modyfikacji i zapisu) a w programie wykonywać modyfikację poprzez tę funkcję, nie zastanawiając się więcej jak to jest robione. Tylko ma to sens jak takie operacje w programie robisz w wielu miejscach na różnych komórkach i bitach.

--
Pozdrawiam,
Robert



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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