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



Teraz jest 21 maja 2026, o 05:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 25 sty 2014, o 23:56 
Offline
Nowy

Dołączył(a): 25 sty 2014
Posty: 5
Pomógł: 0

Witam,
Prosiłbym bardzo o pomoc w lepszym zrozumieniu rejestru PINx
Do portu C podpiąłem diody LED
Ustawiłem rejestry w taki sposób

1) DDRC = 0xFF;
2) DDRA =0;
3) PORTA = 0b11110000;
4) PORTC = PINA;

Wydaje mi sie, że na porcie C powinny zaswiecic diody połączone do pinów od 7 do 4 (starszy bajt) A swiecą wszystkie DLACZEGO?

gdy 4 linie ustawiam tak;
PORTC = PORTA;
Oczywiście uzyskuje żądany efekt.
Ale dlaczego wyrażenie PORTC = PINA nie kopiuje podciagnietych wejśc na PORTC?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2014, o 00:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

Proponuje przeczytać to:
http://mirekk36.blogspot.ie/2012/01/avr-porty-wewy-dir-podstawy.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2014, o 00:37 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

Trzeba zapamiętać, że jeżeli mamy nowego procka M32 to przed zabawą pinami na porcie C należy wyłączyć obsługę JTAGa w fusebitach.

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2014, o 15:57 
Offline
Nowy

Dołączył(a): 25 sty 2014
Posty: 5
Pomógł: 0

Niestety ale wciąz mam z tym problem. Jesli dobrze rozumiem rejestr PINX czyta stan portu PORTX jeśli jego kierunek ustawiony jest na wejście czyli DDRX = 0; Jesli teraz podciągnę starsze bity do VCC czyli PORTX = 0xF0; to w rejestrze PINX powinienem dostać liczbę 0b11110000;
Dajmy na to że te operacje wykonałem na porcie A czyli po operacji PINA = PORTC port C powinien wyglądać tak: PORTC = 0b11110000;
I przy ustawieniu DDRC = 0xFF; diody podpiete do PORTC od 7-4 powinny swiecić a nie świecą. DLACZEGO?
JTAG nie ma z tym nic wspólnego poniewaz juz nie użylem PORTC,
po przeczytaniu http://mirekk36.blogspot.ie/2012/01/avr ... stawy.html równiez nie znalazłem odpowiedzi.

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

sprawdzałem to na PORCIE D a nie C tym razem. (Z pospiechu napisałem że C)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2014, o 16:26 
Offline
Moderator
Avatar użytkownika

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

blaco napisał(a):
Wydaje mi sie, że na porcie C powinny zaswiecic diody połączone do pinów od 7 do 4 (starszy bajt)


A mi się wydaje, że aby zadać poprawne pytanie to wypadałoby:

1. pokazać kod źródłowy a nie w podpunktach co robisz (bo już tu możesz popełniać błędy)

2. pokazać schemat albo chociaż wspomnieć jak masz podłączone diody (katodą czy anodą do pinu itp)

3. napisać dokładniej ze dwa zdania co ma na celu to ćwiczenie bo np wcale nie jest tak, że TYLKO:

blaco napisał(a):
Niestety ale wciąz mam z tym problem. Jesli dobrze rozumiem rejestr PINX czyta stan portu PORTX jeśli jego kierunek ustawiony jest na wejście czyli DDRX = 0;


z tej wypowiedzi można byłoby zrozumieć - że dla ciebie to rejestr PINx czyta TYLKO stan portu PORTx. Owszem może czytać - ale to tak przy okazji ... bo rejestr panie kolego PINx - nic nie czyta ... to ty jako programista - odczytując rejestr PINx widzisz jakie stany są na wejściach ... ale ....

ale nie doczytałeś - że poza stanami takimi jak WYSOKI czy NISKI jest jeszcze stan HiZ (stan wysokiej impedancji) i właśnie u ciebie się to sprawdza w ten sposób ... że akurat żadne diody na młodszych bitach ci nie świecą, a mogłyby np wszystkie świecić albo tylko niektóre ... z tych 4 .... A to dlatego że zewnętrznie nie wymusiłeś na tych liniach wyraźnego stanu JEDEN albo ZERO. A tak się złożyło że złośliwy ;) stan HiZ przyjął u ciebie wartości np tylko ZERO albo tylko JEDEN .... i to jest prawidłowe zachowanie

wstaw sobie ostatnią linię w pętlę



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


i wtedy nawet jak paluchami będziesz dotykał 4 młodszych bitów portu A to okaże się że diody będą ci się zapalać i gasić jak od dziwnych zdezelowanych klawiszy....

mi się wydaje, że gdzieś czytasz skrawki informacji z internetu zamiast książkę i dlatego tak to wychodzi na razie

_________________
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: 26 sty 2014, o 21:16 
Offline
Nowy

Dołączył(a): 25 sty 2014
Posty: 5
Pomógł: 0

Witam, Panie Mirku
Oczywiście ma Pan rację na swoje usprawiedliwienie napiszę tylko, że jestem nowy na tym forum. Umieszczenie kodu byłoby dobrym pomysłem. Kod jest prosty:

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

Czyli podciagnąlem wewnętrznie starsze bity portu D do 1. (Schematu nie zamieszcze bo jeszcze nie zacząlem kursu w Eagle:)) Ale po prostu podpiałem diody do portu A anodą do nóżek mikrokontrolera, katodą do masy. Wydaje mi sie że po operacji PORTA = PIND powinienem uzyskac takie stany na PORTA, PORTA = 0b11110000; ale po diodach widze że tak się nie dzieje. Jeśli natomiast w kodzie zrezygnuje z ustawienia PORTD = 0xF0 i podciagne PORTD zewnętrznie do VCC i GND to otrzymuje żądany efekt - co jest dla mnie w pelni zrozumiałe.
P.S. Książke niedawno zakupiłem i staram się czytac uważnie - chociaz moglem cos przeoczyć:)

Kod wklejamy przy pomocy syntax=c - Różowy J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2014, o 21:50 
Offline
Moderator
Avatar użytkownika

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

Ok rozumiem - ale poczytaj co ci tam dalej napisałem i przetestuj to tak jak zaproponowałem ...

bo wcale nie musisz mieć na pinach 0..3 ustalonych jasnych precyzyjnych stanów ? bo skąd .... czy już wiesz co to jest stan nieustalowny? HiZ

_________________
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: 26 sty 2014, o 22:10 
Offline
Nowy

Dołączył(a): 25 sty 2014
Posty: 5
Pomógł: 0

Czyli mam rozumieć że programowo moge tylko podciagnąc piny do VCC? na tych na ktorych zostaną zera (tak jak w moim przypadku mlodsze 4 bity) ustala się stan HiZ?
Myslalem po prostu że takie zdefiniowanie portu PORTD 0xF0 nie tylko okresli jednoznacznie stany 1 na starszych bitach ale równiez stany 0 na młodszych bitach.
W moim przypadku rzeczywiscie na mlodszych bitach wystepuje stan HiZ.
Co w takim razie znajduje się w mlodszych bitach rejestru PIND?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2014, o 22:17 
Offline
Moderator
Avatar użytkownika

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

blaco napisał(a):
Co w takim razie znajduje się w mlodszych bitach rejestru PIND?


No WŁAŚNIE stan wysokiej impedancji ....

toż piszę już po raz kolejny ;)

Panie kolego - rejestr PORTx rzeczywiście służy do wystawiania stanów na zewnątrz pinów ale TYLKO WTEDY (zrozum) gdy piny ustawione są jako WYJŚCIA za pomocą DDRx

a ty próbujesz ustawić piny jako WEJŚCIA .... Wtedy działanie PORTx jest nieco inne. JEDYNKA w bicie włącza podciąganie do VCC i to tyle ... a zero - nic nie robi .. w tych prockach nie ma podciągania programowego do GND - i dlatego masz stan HiZ

_________________
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: 26 sty 2014, o 22:23 
Offline
Nowy

Dołączył(a): 25 sty 2014
Posty: 5
Pomógł: 0

I teraz w pełni rozumiem.
Wielkie dzięki;)



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 3 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO