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



Teraz jest 7 kwi 2026, o 04:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 8 lip 2015, o 15:15 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 06 maja 2015
Posty: 14
Pomógł: 0

Cześć mam takie pytanie z książki bluebok na str. 175 jest taki kod:

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


i chciał bym zapytać jak jest LICZONE przez mikroprocek to działanie:
#define LED_PIN (1<<PC5)
#define LED_ON PORTC &= ~LED_PIN


Bo ja je rozumiem tak:

Najpierw ustawia 1 w piątym bicie od prawej tzn. będzie: xx1xxxxx (i tu nie wiem czy w miejsca zaznaczone na czerwono mają być zera czy jedynki, no bo nigdzie to nie jest zadeklarowane więc co tam właściwie powinno być ??)

Następnie (druga linijka) mam najpierw negację i tu jest zasadnicze pytanie (wiąże się z tum pierwszym pytaniem) jeżeli w miejscach x były by 0 to wartośc po negacji bedzie wynosić:
11011111
Jeśli były by 1 w miejscach x to wartośc taka była by:
00000000

Co raczej jest głupie i prawdopodobnie 1 opcja jest poprawna!
Więc dalej zakładam, że pierwsza opcja jest poprawna, więc dalej jest:
PORTC &= ... co oznacza PORTC mnożenie z zanegowanym LED_PIN, a więc będzie:

I tu kolejne pytanie co mam podstawić za PORTC, czy to będzie wartość:
11111111

czy:

00000000

??

Wiem jak się to wymnaża tylko nie wiem co podstawić za PORTC

Z góry thx za pomoc ;)

_________________
Dopiero się uczę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 16:15 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

Mirek rozwinął temat na video:
http://mirekk36.blogspot.com/2014/05/if ... -o-co.html
Obejrzyj proszę, bo strasznie "przekombinowujesz" :)

------------------------ [ Dodano po: 9 minutach ]

W uzupełnieniu za PORTC podstawiasz PORTC (a w zasadzie robi to kompilator).
PORTC to jeden z rejestrów, i może mieć "najdzikszą" wartość bitową, która jest poddawana operacjom bitowym z wartością 6 bitu rejestru,
czyli pinem PC5. W szczególnych przypadkach może mieć same zera lub jedynki, jak napisałeś.
W tym przypadku pin jest zerowany bez zmiany pozostałych bitów rejestru, Jeśli miał 0, pozostaje nie zmieniony.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 16:27 
Offline
Użytkownik
Avatar użytkownika

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

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

oznacza, że liczbę jeden przesuwasz o pięć miejsc w lewo czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W rezultacie otrzymasz 0b00100000

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

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

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

Za PORTC należało by podstawić aktualną wartość rejestru PORTC. Ale zauważ, że tylko bit PC5 jest ważny. Pozostałe są nieważne bo po całej operacji i tak pozostaną takie jak przed operacją. Tylko bit PC5 zostanie wyzerowany.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 16:32 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

W uzupełnieniu:
Aby dioda zaświeciła, czyli było "LED_ON", musi ona być podłaczona katodą do zerowanego portu mikrokontrolera.
W przeciwnym wypadku funkcja pinu bedzie odwrócona, czyli LED_ON będzie gasić diodę, LED_OFF ją zapalać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 16:43 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 06 maja 2015
Posty: 14
Pomógł: 0

jerrylu napisał(a):
Mirek rozwinął temat na video:
http://mirekk36.blogspot.com/2014/05/if ... -o-co.html
Obejrzyj proszę, bo strasznie "przekombinowujesz" :)

------------------------ [ Dodano po: 9 minutach ]

W uzupełnieniu za PORTC podstawiasz PORTC (a w zasadzie robi to kompilator).
PORTC to jeden z rejestrów, i może mieć "najdzikszą" wartość bitową, która jest poddawana operacjom bitowym z wartością 6 bitu rejestru,
czyli pinem PC5. W szczególnych przypadkach może mieć same zera lub jedynki, jak napisałeś.
W tym przypadku pin jest zerowany bez zmiany pozostałych bitów rejestru, Jeśli miał 0, pozostaje nie zmieniony.


Skąd wiesz, że akurat w tym przypadku PIN jest równy 0 ??

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

oznacza, że liczbę jeden przesuwasz o pięć miejsc w lewo czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W rezultacie otrzymasz 0b00100000

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

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

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

Za PORTC należało by podstawić aktualną wartość rejestru PORTC. Ale zauważ, że tylko bit PC5 jest ważny. Pozostałe są nieważne bo po całej operacji i tak pozostaną takie jak przed operacją. Tylko bit PC5 zostanie wyzerowany.


Ok to już wiem bo jak będę miał wartość 11011111 i w tym wyrażeniu zwracam uwage tylko na PC5 czyli wartość 0 to z tabeli bramki AND widzę, że nieważne cz zrobię 0 razy 0 czy 0 razy 1 to i tak bedzie zero.
Ale gdybym miął wartość bez negacji tzn. 00100000 to już mnożenie NAD nie było by równe 0. Bo gdyby wartość PORTC na 5 bicie była równa 1 to z działania AND wyjdzie na piątym bicie 1 zaś gdyby na piątym bicie było 0 to wynik z AND da wartość 0!!

_________________
Dopiero się uczę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 16:54 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

major697 napisał(a):
jerrylu napisał(a):
Mirek rozwinął temat na video:
http://mirekk36.blogspot.com/2014/05/if ... -o-co.html
Obejrzyj proszę, bo strasznie "przekombinowujesz" :)

------------------------ [ Dodano po: 9 minutach ]

W uzupełnieniu za PORTC podstawiasz PORTC (a w zasadzie robi to kompilator).
PORTC to jeden z rejestrów, i może mieć "najdzikszą" wartość bitową, która jest poddawana operacjom bitowym z wartością 6 bitu rejestru,
czyli pinem PC5. W szczególnych przypadkach może mieć same zera lub jedynki, jak napisałeś.
W tym przypadku pin jest zerowany bez zmiany pozostałych bitów rejestru, jeśli miał 0, pozostaje nie zmieniony.


Skąd wiesz, że akurat w tym przypadku PIN jest równy 0 ??


Jak napisałerm, wartość rejestru (w tym pinu 6 PC5) może być dowolna.
Instrukcja LED_ON bedzie go zerowała w przypadku gdy miał wartość 1, lub pozostawi bez zmiany, gdy było 0
(zerowanie i tak nastąpi - wykona się instrukcja i zajmie okresloną ilość czasu procesora - ale nie będzie różnicy).

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

Obejrzyj proszę kilka filmików Mirka, w tym podany wyżej, to wiele rzeczy się wyjaśni.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 17:04 
Offline
Użytkownik
Avatar użytkownika

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

Witam
major697 napisał(a):
z książki bluebok na str. 175 jest taki kod:

Wróć na str118 od:
BB napisał(a):
BARDZO WAŻNE! BARDZO WAŻNE! BARDZO WAŻNE!

...tam jest takie rozwinięcie tego tematu, że nawet ja pojąłem o co chodzi.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 17:43 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 06 maja 2015
Posty: 14
Pomógł: 0

Dobra już wiem o co chodzi. Dzięki a mam jeszcze jedno pytanie dotyczące Atmel Studio 6.
Otóż nie wiem jak "odczytywać" poprawne lub nie poprawne działanie symulatora. Nagrałem filmik po tym linkiem https://youtu.be/drN3L0cV8u0 można zobaczyć program z bluebooka i nie wiem co oznacza zapalanie się czerwonej diody i "czarnej" diody an symulatorze. Czy czerwona symbolizuje stan wysoki a "czarna" stan niski ?? Oraz jak uruchomić program aby na symulatorze była widoczna migająca dioda tak jak bym miał np program który będzie zapał diodę co 1 sekundę ??

_________________
Dopiero się uczę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 19:57 
Offline
Moderator
Avatar użytkownika

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

A tak z ciekawości zapytam - czy nie lepiej jest się tą diodą migającą na żywo pobawić zamiast w symulatorze ? Nie żebym miał coś przeciwko ... ot ciekawość

_________________
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: 8 lip 2015, o 20:17 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 06 maja 2015
Posty: 14
Pomógł: 0

Na razie nie mam kasy na zakup elementów (wiem, że to mało ale nawet tyle nie mam ;)) A mam pytanie gdybym chciał zrobic programator LPT to czy będzie on działał na takiej przejściówce:

http://allegro.pl/przejsciowka-adapter- ... 87389.html

Bo nie mam gniazda LPT na płycie głównej

Pzdr.

_________________
Dopiero się uczę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 21:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Niestety nie będzie działał jako programator to jest typowo
przejściówka do podłączenia drukarek i nawet ploter ma ciężko na tym ruszyć
a niby też posiada złącze LPT (mam na myśli mój ploter nie działa) :).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2015, o 21:52 
Offline
Moderator
Avatar użytkownika

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

Tak jak pisze kolega wyżej - zapomnij o tego typu przejściówkach LPT do takich celów :( to nie zadziała

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

Strefa czasowa: UTC + 1


Kto przegląda forum

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