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



Teraz jest 2 gru 2024, o 18:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 14 mar 2016, o 21:16 
Offline
Użytkownik

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

Witam. mam problem ze zrozumieniem kodu na jednej ze stron. Mianowicie chodzi mi o:

[ proszę poprawić formatowanie kodu, masz przecież instrukcję jak to robić: topic7402.html - aby wątek nie został usunięty - mirekk36 ]

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

o co chodzi z tym 0xFF? rozumiem że ta komenda 0xFF ustawia port D w mikrokontrolerze jako wyjście, ale dlaczego akurat 0xFF, a nie 1xEE?


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

o co chodzi z tym "odwraca bity" i "zeruje bity"?

Pełny kod jest tutaj:

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


Pozdrawiam.



Ostatnio edytowano 14 mar 2016, o 22:29 przez grower, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2016, o 21:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 mar 2014
Posty: 36
Pomógł: 0

Heksadecymalne = binarne
0xFF = 11111111

Wszędzie masz podane liczby heksadecymalne, w systemie szesnastkowym.
I tak 0xF0 = 11110000
itd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2016, o 21:28 
Offline
Moderator
Avatar użytkownika

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

grower napisał(a):
o co chodzi z tym 0xFF? rozumiem że ta komenda 0xFF ustawia port D w mikrokontrolerze jako wyjście, ale dlaczego akurat 0xFF, a nie 1xEE?

To może czas najwyższy jednak zapoznać się z liczbami binarnymi i hexadecymalnymi szczególnie? proszę:
http://mirekk36.blogspot.com/2014/03/li ... malne.html
http://mirekk36.blogspot.com/2014/03/li ... stawy.html

grower napisał(a):
o co chodzi z tym "odwraca bity" i "zeruje bity"?

To pokazuje - że warto zacząć od książki:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

grower napisał(a):
Pełny kod jest tutaj:

A szczególnie ten jak to mówisz pełny kod ... który jest przykładem w jaki sposób NIE POWINNO SIĘ WYJAŚNIAĆ pewnych podstaw początkującym ....

grower napisał(a):
#define F_CPU 1000000L 

A to już znana MASAKRA powielana przez mnóstwo początkujących, którzy próbują się uczyć programowania w C z takich kodów

------------------------ [ Dodano po: 2 minutach ]

Zajrzyj do uwagi w pierwszym poście o formatowaniu kodu

_________________
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: 14 mar 2016, o 22:38 
Offline
Użytkownik

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

dariuszmb napisał(a):
Heksadecymalne = binarne
0xFF = 11111111

Wszędzie masz podane liczby heksadecymalne, w systemie szesnastkowym.
I tak 0xF0 = 11110000
itd.


Okej, a generalnie mi chodzi o to czemu akurat "0xFF = 11111111" oznacza wyjście portów, zawsze to będzie 0xFF? Przepraszam ale to jest bardzo zawiłe bo na płycie od BB było to troche inaczej zrobione. Mam przed sobą tą ściągawkę gdzie jest instrukcja o ustawianiu portów. Jak to wkońcu z tym jest?


mirekk36 napisał(a):
]grower napisał(a):
o co chodzi z tym 0xFF? rozumiem że ta komenda 0xFF ustawia port D w mikrokontrolerze jako wyjście, ale dlaczego akurat 0xFF, a nie 1xEE?

To może czas najwyższy jednak zapoznać się z liczbami binarnymi i hexadecymalnymi szczególnie? proszę:
http://mirekk36.blogspot.com/2014/03/li ... malne.html
http://mirekk36.blogspot.com/2014/03/li ... stawy.html


Dziękuje, już zaczynam naukę z podanych materiałów
mirekk36 napisał(a):
grower napisał(a):
o co chodzi z tym "odwraca bity" i "zeruje bity"?

To pokazuje - że warto zacząć od książki:
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html


Posiadam obie książki ale na prawde, czytałem BB od deski do deski 2 RAZY i czuje się jakbym czytał książkę w języku szwedzkim (nie znam szwedzkiego :) ) Staram się to ogarnąć z perspektywy praktycznej śledząc zagraniczne i polskie tutoriale o "C" dla mikrokontrolerów ucząc się od innych z praktyki.

mirekk36 napisał(a):
grower napisał(a):
Pełny kod jest tutaj:
grower napisał(a):
#define F_CPU 1000000L

A to już znana MASAKRA powielana przez mnóstwo początkujących, którzy próbują się uczyć programowania w C z takich kodów



A szczególnie ten jak to mówisz pełny kod ... który jest przykładem w jaki sposób NIE POWINNO SIĘ WYJAŚNIAĆ pewnych podstaw początkującym ....
To jak sie powinno to tłumaczyc początkującym? Ta linijka jest zbędna?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
linijka oznacza taktowanie procka, to jest jasne, ale dlaczego to jest błędne?

mirekk36 napisał(a):
Zajrzyj do uwagi w pierwszym poście o formatowaniu kodu

Przepraszam. Już poprawiłem bo dawno nie wchodziłem na jakiekolwiek fora i zapomniałem niektórych nawyków.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2016, o 22:45 
Offline
Moderator
Avatar użytkownika

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

grower napisał(a):
Posiadam obie książki ale na prawde, czytałem BB od deski do deski 2 RAZY


czytając dalej:
grower napisał(a):
To jak sie powinno to tłumaczyc początkującym? Ta linijka jest zbędna?
Składnia: [ Pobierz ] [ Ukryj ]
język c
#define F_CPU 1000000L
GeSHi
linijka oznacza taktowanie procka, to jest jasne, ale dlaczego to jest błędne?

Wybacz ale uznam to za dobry wręcz rubaszny żart, że ty w ogóle czytałeś Bluebooka ... moim zdaniem przekartkowałeś go na szybko albo zajrzałeś do kilku wybranych rozdziałów bo akurat o tym #define F_CPU to piszę WYRAŹNIE w Bluebooku i wyjaśniam to .... Podobnie zresztą jak w jednym z poradników wideo: proszę bardzo DOKŁADNIE od tego momentu: https://youtu.be/UhcyBpM57vo?t=2895

poza tym dziwna rzecz - niby czytałeś Bluebooka i gdy czegoś nie rozumiesz to nie zadajesz nawet jednego pytania na forum, po czym idziesz na jakieś strony internetowe do kursów C, które uczą złych nawyków programowania i widać że też TOTALNIE nie rozumiesz - czyli co też po Szwedzku ... i? i co i jednak teraz możesz zadać pytanie na forum ?

------------------------ [ Dodano po: 2 minutach ]

grower napisał(a):
A szczególnie ten jak to mówisz pełny kod ... który jest przykładem w jaki sposób NIE POWINNO SIĘ WYJAŚNIAĆ pewnych podstaw początkującym ....
To jak sie powinno to tłumaczyc początkującym?


To już wybacz jest dla mnie najdziwniejsze - bo właśnie akurat również TO wyjaśniam w Bluebooku a ty piszesz że czytałeś go dwa razy i wszystko po szwedzku ? .... No to sorki ... rzeczywiście może tutaj podpowie tobie ktoś inny skoro nie dociera akurat do ciebie, to co ja wyjaśniam ... no trudno.

_________________
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: 14 mar 2016, o 23:03 
Offline
Użytkownik

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

mirekk36 napisał(a):
poza tym dziwna rzecz - niby czytałeś Bluebooka i gdy czegoś nie rozumiesz to nie zadajesz nawet jednego pytania na forum, po czym idziesz na jakieś strony internetowe do kursów C, które uczą złych nawyków programowania i widać że też TOTALNIE nie rozumiesz - czyli co też po Szwedzku ... i? i co i jednak teraz możesz zadać pytanie na forum ?


Pewnie teraz zostane potępiony że jestem jakimś "forumowym trollem z kontem od października 2013" ale nie, miałem dośc długą przerwę od mikrokontrolerów i od mojego "zapału" bo miałem dużo na głowie, prawo jazdy, praca, nowa szkoła, siłownia itd i dopiero teraz wróciłem do dawnej "zajawki" odkurzając bluebooka z półki którego w pewnym momencie chciałem nawet sprzedać z braku czasu ale korzystając z luźniejszego okresu właśnie powracam. Przeczytam jeszcze raz bluebooka, Od deski do deski, wyraźnie i na głos jakbym czytał lekturę szkolną i zobaczę co się będzie działo. Macie może dla mnie jakies rady które rozdziały sa najważniejsze i na czym się na początku najbardziej skupić żebym sam mógł coś napisać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2016, o 23:26 
Offline
Moderator
Avatar użytkownika

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

grower napisał(a):
Macie może dla mnie jakies rady które rozdziały sa najważniejsze i na czym się na początku najbardziej skupić żebym sam mógł coś napisać?

Zakładając, że przeczytałeś pierwszą połowę książki w której masz podstawy C, wyjaśnione typy zmiennych, operatory, (szczególnie operatory przesunięć bitowych) , funkcje itp .... a później weźmiesz pierwszy rozdział z drugiej połowy warsztatowej czyli miganie diod LED ... gdzie masz na dodatek gotowe działające kody na DVD .... to ...?

To napisz np czego nie rozumiesz z książki - zamiast pomijać .... Bo ok to można zrozumieć, że kompletnie ci np umknęło w książce to na temat F_CPU, no nie da się wszystkich szczegółów naraz zapamiętać ... ale jak mówię - nie pomijaj rozdziałów o podstawach C bo wtedy sam sobie szkodę robisz ... i np jak czytasz na temat operatorów czy czegokolwiek - i masz jakiś zaciach ....

to pytaj .... ludzie tu na forum pytają i dzięki temu raz dwa i lecą dalej ... później znowu coś i znowu pytanie ... w czym problem ?

bo co to znaczy?

"żebym mógł coś napisać?"

a co ? przykładów w książce począwszy od migania diodą LED nie ma ? no weź mi nie opowiadaj ....

po przećwiczeniu tego co w książce są też poradniki dla początkujących na kolejne ćwiczenia, proszę:
http://mirekk36.blogspot.com/2014/05/mi ... rawki.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: 14 mar 2016, o 23:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
dariuszmb napisał(a):
Heksadecymalne = binarne
0xFF = 11111111

Wszędzie masz podane liczby heksadecymalne, w systemie szesnastkowym.
I tak 0xF0 = 11110000

To może ja troszkę sprobuję: koldariuszmb podał Ci dwa przykłady ustawienia portów, czy przeliczenia hex/bin.
Jak widzisz cały czas musisz w pamięci/na kalkulatorze sprawdzać jak to zapisywać, dlatego choć nie jest to metoda błędna uważana jest za mało praktyczną i nieczytelną.
Zapis 0xFF jak widać na górze ustawia wszystkie PINY na 1, zapis 0xF0 cztery najstarsze ( tam gdzie jedynki) i jeśli chodzi o takie ustawienia to jest to czytelne. Jeżeli natomiast chciałbyś ustawić (binarnie) 01010101 czyli co drugi to zapis byłby 0x55 co już jest mało czytelne; dlatego poprawniejszą i czytelniejszą formą jest zapisywanie tego w sposób przejrzysty (np.: 1<<PB0, 1<<PB5 itp.) Nie chodzi tu u jakiś format bo dla kompilatora jest obojętnie jak mu to podasz, chodzi o to abyś po jakimś czasie nie musiał odkodowywać "co miałem na myśli pisząc 0xA4 czy w innej linijce w systemie dzies. 105"
...w zasadzie to tyle ;)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 mar 2016, o 21:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam
To może i ja coś od siebie dodam.
To może wspólnymi siłami jakoś ruszy :P bo zauważyłem że kolega grower napisał:

grower napisał(a):
Okej, a generalnie mi chodzi o to czemu akurat "0xFF = 11111111" oznacza wyjście portów, zawsze to będzie 0xFF?

Co oznacza że trzeba zacząć od samego początku.
:idea:
1, rejestry są ośmio bitowe i mogą przyjąć wartości : "0" lub "1" w każdym bicie.
dla całego rejestru ośmio bitowego "wyzerowanego" trzeba będzie wprowadzić zapis
binarnie " 0b 0000 0000 " . albo heksadecymalnie " 0x 00"
(zauważ że w tym drugim występuje "0x"-to tylko symbol wstawiany przed wartością "00".
dzięki niemu kompilator wie że podajesz wartość w systemie heksadecymalnym bo np. tak wolisz.
Te dwa zera podane w" heksie" mają taką samą wartość jak tamte osiem podane w" binie." umieszczone za "0b"...
lecimy dalej.
utrudniamy i wyjaśniamy.
zapis:
DDRD=0b 0000 0001;
("DDRD" to nazwa rejestru ośmio bitowego którym ustawiamy:czy na nóżce będzie wejście czy wyjście.
rejestr odpowiada za osiem nóżek."0" to wejścia a "1" to wyjścia.
W naszym przykładzie na końcu nazwy rejestru jest literka "D"(czyli port D).oznacza ona że jest to rejestr z nóżkami (PD7,PD6,PD5,PD4,PD3,PD2,PD1,PD0)
zauważ , jest ich osiem każda z nich może być wejściem albo wyjściem.
Ja ustawiłem w przykładzie , tą ostatnią jedynką , nóżkę "PD0" jako wyjście. kolejne pozostały wejściami bo wpisałem "0".
DDRD= 0 0 0 0 0 0 0 1; (wej. wej.wej.wej.wej.wej.wej. WYJ)
porównaj to z kolejnością nazw nóżek .
_ mam nadzieję że nadążasz jeżeli nie to pytaj.

a teraz w heksie nadal to samo.
DDRD=0x01; (DDRD-opisałem,Ox-opisałem,teraz uwaga (dwie ostatnie cyfry " 01" w zapisie szesnastkowym czyli heksadecymalnym.
pierwsza od lewej "0_"to te cztery zera po lewej stronie zapisane w binarnym."0000____"
i analogicznie"_1" to "____0001".
no dobrze .A co z tym ? np.

ten sam port c.d.

PORTD=0b00001111;
(tym rejestrem ustawiamy :
jeżeli w DDRD było "O"-czyli wejście to zapis "1" włącza podciągnięcie nóżki do zasilania rezystorem a "0" wyłącza podciąganie.
jeżeli w DDRD było "1"czyli wyjście to zapis"0" wymusi stan niski na nóżce a "1" stan wysoki.)
w naszym przykładzie pamiętając o wpisie do poprzedniego rejestru.DDRD.

(wejście bez podciągnięcia,wejście bez podciągnięcia,wejście bez podciągnięcia,wejście bez podciągnięcia,
wejście z podciągnięciem,wejście z podciągnięciem,wejście z podciągnięciem,wyjście stan wysoki).

ale nasz wpis można wprowadzić przecież w heksie.

PORTD=0x0F; to samo co PORTD=0b 0000 1111;
a dlaczego?
zero wiadomo- cztery z lewej.
0=0 1=1 2=2 3=3 4=4 5=5 6=6 7=7 8=8 9=9 10=A 11=B 12=C 13=D 14=E 15=F. ( 0b____1111)=15.
dlatego 15 = 0b 0000 1111 = 0x 0F.
ale zapis "10" != "0b10" != "0x10" !!! pierwszy ma wartość 10 drugi 2 a trzeci 16.
ja osobiście po kilku wpisach do rejestrów przerzuciłem się na
DDRD |=(1<<PD0); ( ustawienie jedynki na pierwszym bicie tego rejestru UWAGA LICZĄC OD PRAWEJ)
PORTD |=(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0); (a tu ustawienie jedynek w czterech młodszych bitach)

mam nadzieję że coś pomogłem w zrozumieniu . też przez to przechodziłem całkiem niedawno . :oops:
a pytanie dlaczego 0x a nie 1x ? teraz rozumiesz - to tak jak "dlaczego + to krzyżyk a minus to kreska. :lol:
Trzymaj się i powodzenia. ;)Darek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 mar 2016, o 21:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 mar 2015
Posty: 44
Pomógł: 2

Zdecydowałem się wgrać scany może innym też się przyda :)
kodowanie binarne hex i dec // tabele
przedrostek 0x.... - dla hex , // czyli 0xFF = dec 255 , i odpowiada binarnie 1111 1111
0b .... dla binarnych // 0b1111 1111
pisałem na szybko więc jak coś koledzy poprawią // ale w tabelach widać o co chodzi :P

Obrazek

Obrazek



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

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