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



Teraz jest 25 lut 2025, o 21:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 25 sty 2017, o 10:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

Obrazek

Najważniejsze rejestry służące do konfiguracji portów wejścia/wyjścia w mikrokontrolerach PIC to:

TRISx - ustawia port jako wejście lub wyjście
PORTx - odczyt/zapis faktycznej wartości portu
LATx - rejestr zatrzaskowy portu (zapis ostatniej wartości portu lub odczyt zapisanej wartości)
ODCx - ustawia piny wyjściowe jako zwykłe piny lub z otwartym drenem
AD1PCFGLx - umożliwia ustawienie niektórych pinów wejścia jako analogowe lub cyfrowe (piny oznaczone ANx domyślnie są analogowe) . Piny do których trzeba zastosować ustawienia tego rejestru oznaczone są jako ANx


Konfiguracja portów jako wejścia lub wyjścia :
Każdy port (port to zbiór pojedynczych pinów), posiada swój rejestr TRISx, który odpowiada za ustawienie czy określone piny są wejściem czy wyjściem. Jeżeli do bitu powiązanego z określonym pinem jest zapisane "1" pin jest wejściem, natomiast jeżeli zapiszemy "0", port staje się wyjściem.
Port TRISx może być również oczywiście odczytany, dostaniemy wtedy ostatnio zapisaną tam wartość.
Po włączeniu zasilania, wszystkie piny są skonfigurowane jako wejścia.

Zapis/odczyt wartości portu :
Jeśli chodzi o zapis i odczyt portów wejścia/wyjścia mamy do dyspozycji dwa rejestry PORTx oraz LATx. Odczytując rejestr PORTx, odczytujemy bezpośrednio wartość logiczną panującą na pinach portu, zapisując do tego rejestru zmieniamy bezpośrednio wartości pinów portu.
Zapis do rejestru PORTx powoduje również zapis do odpowiadającego mu rejestru LATx.

Rejestr LATx, można odczytywać jakby był to zwykły rejestr, w którym jest duplikat ostatnio zapisanej wartości do portu, zapis do LATx powoduje zmianę stanów na pinach portu, tak samo jak zapis do rejestru PORTx, ale odczyt z tego rejestru jest odporny na zakłócenia na liniach portu, bo nie jest fizycznie podczas tej operacji czytany port, tylko jego rejestr, to znaczy, że nie możemy odczytać napięcia panującego faktycznie na pinie, jedynie wartość jaką ostatnio zapisaliśmy.

Podsumowując:

Kierunek portu/pinu ustawiamy w rejestrze TRISx
Zapis do portu możemy dokonywać przez zapis do PORTx lub LATx
Odczyt wartości z końcówek portu dokonujemy przez odczyt PORTx
Odczyt ostatnio zapisanej wartości do portu, dokonujemy przez odczyt rejestru LATx
Jeśli chcemy uzyskać podwyższoną odporność na zakłócenia zapis i odczyt realizujmy za pomocą rejestru LATx .


Konfiguracja portów jako cyfrowe lub analogowe :
Wszystkie porty które mogą być wejściami analogowymi domyślnie nimi są, ponieważ rejestr AD1PCFGLx, który odpowiada za to ustawienie domyślnie ma zapisaną wartość 0x0000. Jeżeli chcemy używać portów analogowych z cyfrowymi peryferiami, takimi jak Timery czy UART, musimy ustawić je jako cyfrowe przez ustawienie określonych bitów rejestru AD1PCFGLx, dodatkowo kiedy porty są ustawione jako analogowe wejścia, próba odczytania ich wartości przez rejestr PORTx skończy się pobraniem samych zer, tak jakby na pinach panował logiczny stan 0.

W przypadku mikrokontrolera PIC24HJ128GP502 piny analogowe przyporządkowane są do AN0-AN5 i AN9-AN12. Po uruchomieniu procka piny te są ustawione jako analogowe wejścia. Aby to zmienić należy wpisać wartość hex 0x1E3F (operujemy na 16 bitach) do rejestru i wtedy mamy wszystkie piny jako cyfrowe.

Do rejestrów możemy zapisywać całe wartości portów, lub odwoływać się do indywidualnych pinów. Do dyspozycji mamy wygodne makra i struktury zdefiniowane w pliku nagłówkowym naszego mikrokontrolera . Plik znajduje się w katalogu kompilatora XC16. W przypadku Linuxa jest dostępny pod ścieżką : /opt/microchip/xc16/v1.30/support/PIC24H/h

Poniżej fragment pliku z makrami i strukturami do sterowania wyjściami i wejściami. dla mikrokontrolera PIC24HJ128GP502:

Dyrektywy dla portów : zainkludować plik p24HJ128GP502.h z xc16/v1.30/support/PIC24H/h

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


Z powyższych makr wynika , że w mikrokontrolerze PIC24HJ128GP502 mamy do dyspozycji 5 x I /O (RA0 – RA4) na porcie A i 16 x I/O (RB0-RB15) na porcie B.

Poniżej układ bitów w rejestrach sterujących I/O.

Obrazek

Obrazek

Jeśli chcemy korzystać z wyjść jako cyfrowe to musimy wyłaczyć ADC w rejestrze AD1PCFGL na tych wyjściach gdzie są (nie wszystkie), patrz oznaczenia na nóżkach ANx

Obrazek

Przykłady :

Ustawiamy kierunek czyli wejście lub wyjście za pomocą rejestru TRISx :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Ustawiamy stan na wyjściach za pomocą rejestru PORTx :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Ustawiamy stan na wyjściach za pomocą rejestru LATx :
Wartość jaką wpiszemy w rejestr zatrzaskowy LATx jest przepisywana automatycznie do rejestru PORTx.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


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

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


Reasumując dostęp do rejestrów I/O i operowanie na nich w PIC jest stosunkowo sympatyczne.
Przyczynia się do tego ładne opisanie rejestrów dyrektywami i strukturami.
Prezentowana w artykule specyfika rejestrów jest typowa dla PIC.
Mam nadzieję, że przybliżyłem w przystępny sposób zagadnienie portów I/O w mikrokontrolerach PIC.

Ponieważ sam PIC-ami od niedawna się zainteresowałem a przygoda ta trwa od ok 1 miesiąca :) .Pozwoliłem sobie stworzyć skromnego amatorskiego bloga : strefapic.blogspot.com w którym będę dokumentował w miarę na bieżąco odkrywany przeze mnie świat PIC-a.

Życzę miłego dnia Szanownym Kolegom .

_________________
http://strefapic.blogspot.com



Ostatnio edytowano 25 sty 2017, o 21:16 przez wat1970, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 17:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 715
Lokalizacja: Zielona Góra
Pomógł: 75

Bardzo fajny poradnik, bardzo przystępnie opiasne zagadnienie dot. portów i/o, gratuluję, a ja mam pytanko - zapewne programujesz PIC'e ;) PIC KIT'em 3, ale czy oryginalnym czy klonem, bo szukam dokumentacji na sprawdzonego klona.

_________________
pozdrawiam
phill2k



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 19:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

phill2k napisał(a):
PIC KIT'em 3, ale czy oryginalnym czy klonem, bo szukam dokumentacji na sprawdzonego klona.

Kupiłem PICkita3 w opcji klonowej :) za ok 100 zł z przesyłką na allegro. Działa bez zająknięcia. Bardzo dobrze współpracuje z MPLAB-X IDE. Nie trzeba było żadnych zewnętrznych plików do instalacji, wszystko się samo wykryło i zainstalowało.
Na razie mam same pozytywne wrażenia ze współpracy z PICkit3.

tu podaje link z porównaniem PICkit2 i 3.

http://www.easy-soft.net.pl/artykuly/na ... -i-roznice

Pozdrawiam

_________________
http://strefapic.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 20:17 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

wat1970 napisał(a):
Możemy również identycznie jak w mikrokontrolerach AVR użyć przesunięcia bitowego i zrobić coś takiego
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie wydaje mi się
_TRISA1 służy do bezpośredniego ustawienia bitu 1 w rejestrze TRISA i wystarczy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Te struktury to fajna rzecz. Przykładowo wpisuje się nazwę rejestru i słówko bits i kropkę TRISAbits. i mamy od razu wyświetlone wszystkie dostępne bity, więc nie ma mowy o pomyłce. Dla AVR mogę 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.

Kompilator to łyknie i bit WGM00 zostanie ustawiony, bo za WGM00 i PB0 kryje się po prostu 0.

Natomiast same bity ze znakiem podkreślenia to jeszcze prostszy zapis i jak chcę odczytać stan na wejściu portu A o numerze 4 to wystarczy:
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łę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 21:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

Krauser napisał(a):
wat1970 napisał(a):
Możemy również identycznie jak w mikrokontrolerach AVR użyć przesunięcia bitowego i zrobić coś takiego
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie wydaje mi się
_TRISA1 służy do bezpośredniego ustawienia bitu 1 w rejestrze TRISA i wystarczy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Natomiast same bity ze znakiem podkreślenia to jeszcze prostszy zapis i jak chcę odczytać stan na wejściu portu A o numerze 4 to wystarczy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Bardzo dziękuję Szanownemu Koledze za wykrycie pomyłki. Usunąłem zapisy z postu aby nie wprowadzać w błąd. Znalazłem jednak w pliku nagłówkowym mikrokontrolera dyrektywy stosowne do sytuacji i możliwość poprawnego zapisu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tylko robi się wtedy zbyt rozwlekły zapis.

_________________
http://strefapic.blogspot.com



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

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