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



Teraz jest 16 kwi 2024, o 19:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
 Tytuł: PORTY I/O i HiZ
PostNapisane: 28 sie 2017, o 16:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

mam pytanko poco podciąga się wszystkie piny portów do VCC wewnętrznym rezystorem stosując zapis PORTx=0xff; by uniknąć HiZ skoro to samo można zrobić ustawiając kierunek na całym porcie DDRx=0xff; na początku programu ten sam efekt i ergonomiczny ?

i też pozbywam się stanu nieustalonego na porcie bo DDRx=0x1111 1111, wtedy nie istotne czy sobie podciągnę do VCC PORTx nie będzie HiZ.

a takie rozwiązanie jest lepsze niż wystawianie tych jedynek na PORTx=0x1111 1111 czemu więc w poradniku na blogu mirek podaje coś odwrotnego że na DDRx=000... a na PORTx =111.. by uniknąć stanu nieustalonego ?

HiZ występuje tylko w jednym przypadku gdy DDRx=0x00 , PORTx=0x00.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2017, o 17:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1148
Lokalizacja: Kraków
Pomógł: 93

Ponieważ:
- za pomocą DDR ustawiasz, czy port jest WEJŚCIEM czy WYJŚCIEM
- za pomocą PORT ustawiasz stan na wejściu (podciągnięcie) lub na wyjściu.
Bluebook, wydanie II (twarda okładka), rozdział 4, od str. 177



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2017, o 17:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

by uzyskać stan odmienny od Hiz na porcie są trzy możliwości
1. DDRx=0xff; PORTx=0xff; // PORT ustawiony jako wyjścia ,stan na wyjściach wysoki
2. DDRx=0x00; PORTx=0xff; // PORT ustawiony jako wejścia , podciąganie włączone
3. DDRx=0xff; PORTx=0x00; // PORT ustawiony jako wyjście , podciąganie wyłączone

zastanawia mnie dlaczego na blogu
http://mirekk36.blogspot.com/2012/01/av ... stawy.html

Mirek na końcu napisał :
Cytuj:
Ja np zawsze pierwsze co robię w programie to ustawiam wartości wszystkich bitów każdego PORTx na 1, czyli np. dla ATmega8:

PORTB = 0xFF;
PORTC = 0xFF;
PORTD = 0xFF;

a dopiero po tym rozpoczynam właściwe konfiguracje potrzebnych mi pinów. Nawet jeśli wszystkich nie wykorzystam, to te nie używane pozostaną podciągnięte do VCC i nie będzie na nich stanu nieustalonego Hi-Z. Oczywiście, są wyjątki gdy tak się nie robi. Można tu wspomnieć o urządzeniach zasilanych bateryjnie gdzie liczy się każdy nie tylko mA ale także uA !!! .... Wtedy nie ma co na siłę podciągać nie używanych pinów do VCC ponieważ jak wiadomo każdy wewnętrzny rezystor będzie "zjadał" niepotrzebnie troszkę prądu.


nie lepiej jest zostawić to podciąganie i wystawić jedynki nie w rejestrze PORTx a DDRx ustawiam tylko kierunek a nie marnotrawię prądu podciągając nie używane piny do VCC i pozbywam się stanu nie ustalonego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2017, o 18:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Kolego ale chyba nie do końca zrozumiałeś zasady jakimi rządzą pinami I/O avr-ów. Każdy pin I/O procesora może pełnić rolę albo wejścia (gdy ustawimy w jego rejestrze DDR wartość 0) i wyjścia (gdy w rejestrze DDR ustawimy 1) stąd wynika jego nazwa "rejestr kierunku" czyli albo kierunek wyjściowy albo wejściowy.
Gdy pin jest wyjściem nie może być mowy o stanie HIZ ponieważ na w zależności od zawartości rejestru PORT tego pinu albo jest na nim stan bliski GND czyli 0, albo stan bliski Vcc czyli 1. Pin wyjściowy może czymś sterować (np diodą świecącą lub wysterowywać tranzystor a ten z kolei silnik, przekaźnik itd, itp.)
Natomiast gdy chcemy bo nasz procesor odbierał jakieś sygnały (np sprawdzał czy przycisk jest wciśnięty bądź nie) dany pin nie może być wyjściem bo np gdy na tym wyjściu ustawimy 1 czyli wystawimy stan bliski Vcc, i do tego pinu podepniemy przycisk który będzie zwierał do masy to przecież wciśnięcie przycisku zrobi zwarcie na zasilaniu (oczywiście nie będzie to pełne zwarcie tylko prąd będzie ograniczony wydajnością prądową pinu, ale pin w takim stanie pozostawiony na dłużej może ulec uszkodzeniu). Czyli by odbierać sygnały musimy pin ustawić jako wejście (czyli do rejestru DDR należy wpisać 0). Gdy równocześnie w rejestrze PORT tego pinu będzie również 0 to pin będzie wejściem w stanie wysokiej impedancji czyli w skrócie HIZ. Jeśli taki pin wisi w powietrzu (czyli nawet jak podłączony jest przycisk zwierny do masy to w momencie gdy nie jest wciśnięty na pinie nie ma sygnału) to robi za antenę czyli zbiera sobie pole elektromagnetyczne z otoczenia więc wartość napięcia na nim panującego będzie poprostu przypadkowa. Można ten pin podłączyć przez rezystor do Vcc wówczas na pinie będzie panował stan bliski Vcc który procesot jednoznacznie rozpozna jako logiczne 1. Producent pomyślał: po co się bawić z dołączaniem zewnętrznych rezystorów i zajmować miejsce na PCB? i umieścił takie rezystory wewnątrz procesora. Tylko teraz aby je załączyć trzeba by dodać kolejny rejestr... hym... Ale przecież gdy dany pin jest wejściem, jego rejestr PORT jest niewykorzystany, więc czemu nie uzależnić od jego stanu załączenie tego wbudowanego rezystora? Tak więc rezystory podciągające włącza się poprzez ustawienie 1 w rejestrze PORT podczas gdy w rejestrze DDR jest 0. W tym momencie możemy bez problemu podłączyć przycisk zwierny do masy bo jego wciśnięcie nie zrobi zwarcia bo pin nie podaje napięcia (tak jak to robi w momencie gdy jest wyjściem) tylko napięcie jest wymuszane prze stosunkowo duży rezystor (20k - 50k) wewnątrz obudowy procka, a zwarcie pinu do masy wymusi prąd o wartości Vcc/R wbudowanego rezystora.

Tak więc:
procek87 napisał(a):
czemu więc w poradniku na blogu Mirek podaje coś odwrotnego że na DDRx=000... a na PORTx =111.. by uniknąć stanu nieustalonego ?
bo gdyby ustawić tak:
procek87 napisał(a):
i też pozbywam się stanu nieustalonego na porcie bo DDRx=0x1111 1111
to nie możesz podpiąć przycisku bo jego wciśnięcie zrobi zwarcie, tak samo jak podpięcie jakiegoś czujnika czy innego urządzenia które wymusza jakieś stany.
Poza tym stan HIZ nie zawsze jest niepożądany. Gdy pin jest podłączony do magistrali która sama w sobie jest podciągnięta (np I2C/TWI) to nie trzeba włączać wbudowanego podciągania.
Czasem też wbudowane podciąganie jest za słabe np. gdy mamy przycisk na dłuższym odcinku kabla...

Co do wymuszania stanów na pinach nieużywanych to stanowisko w tej sprawie zajął sam producent:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2017, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

xentis chyba zrozumiałem jeśli wie się że będzie się świeciło diodą ustawia się wszystkie DDR na 1 jako wyjścia ,a jeśli wie się że piny portu będzie się używało jako wejścia podciąga się je do VCC to cały rejestr PORT ustawia się wtedy jako 1 ,

jeśli pod pin podłączam przycisk ustawiam cały rejestr PORT na 1 bo rejstr DDR jest już z automatu ustawiony na 0
jeśli pod pin podłączam diodę ustawiam cały rejestr DDR na 1 bo PORT mogę podciągać wew pullup pod VCC bądź wyłączać je.

Co innego w sytuacji gdy PORT będzie chciało się wykorzystać w sposób mieszany .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2017, o 21:51 
Offline
Moderator
Avatar użytkownika

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

a może by tak zajrzeć tutaj?

http://mirekk36.blogspot.com/2012/01/av ... stawy.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: 31 sie 2017, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

ok na końcu artykułu na twoim blogu poruszyłeś pewną sytuacje, chcemy nasz układ uczynić energooszczędnym , podciąganie wszystkich pinów portu do VCC programowo na pewno będzie się gryzło z tym co sobie założyliśmy wyżej co wtedy , czy ustawia się te piny jako wyjścia wtedy nie będą konsumować prądu ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2017, o 16:38 
Offline
Moderator
Avatar użytkownika

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

procek87 napisał(a):
czy ustawia się te piny jako wyjścia wtedy nie będą konsumować prądu ?

można tak dokładnie zrobić - ale też zwykle przy zasilaniu bateryjnym gdzie nie ma dużo zakłóceń przemysłowych można pozostawić też je jako wejścia bez podciągania.

_________________
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: 2 wrz 2017, o 08:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Dziękuję już rozumiem , pytanie do książki przy omawianiu obsługi przycisków rozdział 4.4 "obsługa klawiszy typu microswitch" , ustawiłeś w inicjalizacji tylko te piny na którch jest przeprowadzana operacja czy zrobiłeś to specjalnie ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2017, o 08:21 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
ustawiłeś w inicjalizacji tylko te piny na którch jest przeprowadzana operacja czy zrobiłeś to specjalnie ?

Jak to czy specjalnie? ;) aż nie rozumiem tego pytania - a jak inaczej można ? ;) co? wszystkie piny ustawiać ? no toż chyba normalne, że inicjalizujesz TO czego będziesz używał - i ciężko tu mówić czy specjalnie czy nie :D .... to jest PODSTAWOWA ZASADA ;)

_________________
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: 2 wrz 2017, o 08:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

A co z nie używanymi piny , w poradniku podciągasz wszystkie piny do vcc by uniknąć HiZ a tu tylko te na których pracujesz, co z stanem nie ustalonym na pinach które są wejście i nie są podciagniete nie będą działać jak anteny ?

Pozdrawiam dziękuję za odpowiedź.



Ostatnio edytowano 2 wrz 2017, o 09:02 przez procek87, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2017, o 09:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sie 2015
Posty: 205
Lokalizacja: UK
Pomógł: 10

procek87 napisał(a):
A co z nie używanymi piny , w poradniku podciągasz wszystkie piny do vcc by uniknąć HiZ a tu tylko te na których pracujesz , miałem na myśli ta różnice .


Nie musisz podciągać tych pinów, których nie używasz. Stan HiZ jest istotny jeżeli pin jest używany (tzn. np. jako wyjśćie dla LED lub jako wejście na switch).
Jeżeli danego pinu nie używasz to nie musisz nic z nim robić.

Generalnie inicjalizujesz tylko te piny, których używasz, ponieważ inne w tym samym porcie mogą już mieć jakąś inną funkcję w układzie (np. klawiatura) i wtedy ustawieniem DDRx = 0xFF nie dałoby się już jej obsłużyć, bo ustawiłeś wszystkie piny portu jako wyjście.

Pozdrawiam ;)

_________________
MMT Technologies



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2017, o 09:03 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Nie musisz podciągać tych pinów, których nie używasz. Stan HiZ jest istotny jeżeli pin jest używany (tzn. np. jako wyjśćie

DOKŁADNIE

------------------------ [ Dodano po: 1 minucie ]

poza tym można na SAMYM początku programu dać np dla m32:

PORTA = 0x0FF;
PORTB = 0x0FF;
PORTC = 0x0FF;
PORTD = 0x0FF;

a później normalna inicjalizacja pinów itp ... jaka potrzebna jest dla programu

_________________
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: 2 wrz 2017, o 09:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sie 2015
Posty: 205
Lokalizacja: UK
Pomógł: 10

Ja zawsze na tablicy korkowej obok biurka mam wydrukowaną i powieszoną ściągawkę z bloga i jest mega pomocna: :D

Obrazek

Pozdrawiam

_________________
MMT Technologies



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2017, o 09:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 maja 2017
Posty: 143
Pomógł: 0

Ok rozumiem dziękuje



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

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