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



Teraz jest 22 gru 2024, o 04:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 25 sty 2014, o 12:40 
Offline
Użytkownik

Dołączył(a): 20 gru 2013
Posty: 60
Pomógł: 0

Zgodnie z:
http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html
mam problem zrozumieć pewne sprawy.
Czy mógłby mi ktoś zakodować prosty program który:
Gdy na jeden pin zostanie podane napięcie 5v to na innym pinie zapali się dioda.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 13:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

A masz może Niebieskiego Mirka? Bo dokładnie taki program jest opisany w trzecim albo czwartym rozdziale warsztatów ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 13:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lip 2013
Posty: 420
Lokalizacja: Kraków
Pomógł: 17

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


Gdy naciśniesz klawisz podłączony do pinu PC6 to zapali się dioda podłączona do PC7


Autor postu otrzymał pochwałę

_________________
GreenBook i BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 15:35 
Offline
Użytkownik

Dołączył(a): 20 gru 2013
Posty: 60
Pomógł: 0

Tak, z klawiszem do GND wiem jak to zrobić, ale jak gdy chcę sterować jakimś urządzeniem co puszcza 5V albo klawiszem podłączonym do Vcc?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 16:09 
Offline
Użytkownik
Avatar użytkownika

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

Jeśli program ma reagować na klawisz podłączony do VCC to mógłby wyglądać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dla pewności należało by podciągnąć linie klawisza do GND rezystorem np. 10k.


Autor postu otrzymał pochwałę


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

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

No to wtedy należy przeprowadzić nieco inne praktyki, bowiem:
- w linijce 25. kodu podanego przez programka pin key_pin podciągnięty zostaje wewnętrznym rezystorem do VCC - należy się tego pozbyć
- w warunku w linii 30 należy pozbyć się negacji, tj. zastosować konstrukcję if(PINC & KEY_PIN)
- no i w ostatnim kroku zastosować zewnętrzny pulldown (czyli połączenie poprzez rezystor, np. 10k pinu mikrokontrolera do masy układu) - z przyczyny takiej samej, dla której stosuje się pullup, a wyszczególnionej w artykule

Jeśli nie wyłączysz wewnętrznego pullupu, to przy pozbyciu się negacji program będzie cały czas wykrywał, że przycisk został wciśnięty. Natomiast niezastosowanie pulldownu może spowodować różne artefakty w rodzaju niechcianego przełączania po zbliżeniu palca i podobnych historii.
Tak pokrótce :)

EDIT: No to nie zauważyłem postu jacka, wstyd ;)


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 16:24 
Offline
Użytkownik
Avatar użytkownika

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

krokodyl1220 napisał(a):
No to nie zauważyłem postu jacka, wstyd ;)

Żaden wstyd bo fajnie i rzeczowo wytłumaczyłeś :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 16:52 
Offline
Użytkownik

Dołączył(a): 20 gru 2013
Posty: 60
Pomógł: 0

No i po pochwale, to się nazywa pomoc :) Dziękuje :)
Już to zrozumiałem, zamiast podłączać wewnętrznym rezystorem do Vcc można zewnętrznym do GND i wejście nie będzie nam pływać- na to nie wpadłem :) Bo już warunek If to nie problem :)

a co oznacza na wolne tłumaczenie PINC & KEY_PIN? I dlaczego w If zamiast PIN nie można użyć PORTx?
Czy PIN mówi nam co jest fizycznie na pinie z zewnątrz, a PORT to co DA uC na pin od siebie z wewnątrz?



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

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

PINx nalezy do rejestru wejsciowego i to nim sprawdzamy stan panujacy na danym pinie.
PORTx nalezy do rejestru wyjsciowego i to nim ustawiamy stany na danym pinie


Autor postu otrzymał pochwałę

_________________
sig off ;(



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

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

in2dex napisał(a):
a co oznacza na wolne tłumaczenie PINC & KEY_PIN?

A może być na szybkie tłumaczenie? :D (wybacz kiepski żarcik ;) )

A więc wygląda to tak, że rejestr PINC jest rejestrem wejściowym, tj. zawiera informacje o tym, co do uC "wchodzi" ;) Jedynka oznacza, że mamy stan wysoki na którymś z pinów, przy czym numer bitu z rejestru oznacza numer pinu wejściowego. Operacja oznacza iloczyn logiczny numeru pinu z rejestrem wejściowym. Można to wytłumaczyć w ten sposób, że program sprawdza, jaką wartość ma pin rejestru PINC określony przez KEY_PIN. W praktyce działa to nieco inaczej, choć efekt jest taki sam.

http://edu.i-lo.tarnow.pl/inf/alg/006_bin/0013.php

in2dex napisał(a):
I dlaczego w If zamiast PIN nie można użyć PORTx?
Czy PIN mówi nam co jest fizycznie na pinie z zewnątrz, a PORT to co DA uC na pin od siebie z wewnątrz?

Otóż to :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 20:40 
Offline
Użytkownik
Avatar użytkownika

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

Ja jeszcze dodam, że rejestr PIN można odczytywać nie tylko wtedy gdy jakaś końcówka pracuje jako wejście ale jako wyjście.
Np. na jakiś pin wystawiamy stan wysoki i zapalamy diodę. I teraz żeby sprawdzić czy na tym pinie jest stan wysoki lepiej jest odczytać stan rejestru PIN niż PORT.
Poniżej mały przykład
zamiast
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

lepiej 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.


Autor postu otrzymał pochwałę


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

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

Cytuj:
I teraz żeby sprawdzić czy na tym pinie jest stan wysoki lepiej jest odczytać stan rejestru PIN niż PORT.

Nie zebym byl jakis wredny, ale moglbys powiedziec czemu lepiej uzyc PIN? Nigdy sie nad tym nie zastanawialem, dlatego pytam ;)

_________________
sig off ;(



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

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

Gdzieś kiedyś wyczytałem (może w Oślej Łączce w Edw, nie pamiętam dokładnie), że jeśli np. uszkodzi nam się tranzystor wyjściowy w procku a my będziemy chcieli wystawić stan wysoki na wyjściu to ten stan może tam się nie pojawić. Odczyt rejestru PORT będzie wskazywał, że stan wysoki jest na końcówce ale odczyt rejestru PIN wskaże, że jednak stanu wysokiego nie ma.
Dlatego jeśli chce się odczytać faktyczny stan końcówki pracującej jako wyjście to lepiej użyć rejestru PIN.



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

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

Ciekawa sprawa. Dzieki ;)

_________________
sig off ;(



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

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

Dla mnie jest to dużo bardziej czytelne kiedy próbuje analizować
kogoś kod
Jeśli odczytuje PIN - wiem o co autorowi chodzi bo jest to rejestr wejściowy.
Jak pierwszy raz się spotkałem z czytaniem PORT-u nie mogłem załapać
o co chodziło autorowi bo do PORTx się coś zapisuje - a tu niespodzianka :) (sądziłem że to błąd)

Możliwe że są ważniejsze powody takiego rozwiązania ale ja znam tylko taki

edit :
I znowu mój refleks szachisty :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2014, o 22:50 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Tylko trzeba pamiętać, że między ustawieniem PORTx a odczytem ustawionego stanu na PINx występuje pewne opóźnienie (powiedzmy 1 instrukcji)

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2014, o 15:11 
Offline
Użytkownik

Dołączył(a): 20 gru 2013
Posty: 60
Pomógł: 0

No walczę z tym programem no i nie do końca rozumiem wszystko. Wgrywa się do klocka i jakoś działa.
No ale na logikę to tylko jeden warunek if powinien wystarczyć i tak próbowałem ale wtedy to nie działa jak należy...
Po co stosuje się opóźnienie w tym wypadku i dlaczego nie działa bez tego opóźnienia??
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



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

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

in2dex napisał(a):
No ale na logikę to tylko jeden warunek if powinien wystarczyć i tak próbowałem ale wtedy to nie działa jak należy...
Po co stosuje się opóźnienie w tym wypadku i dlaczego nie działa bez tego opóźnienia??


A przecież w książce masz to opisane .... zajrzyj jeszcze do rozdziału o funkcji SuperDebounce i tam zobacz opisy ...

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

poza tym poczytaj to:

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html


Autor postu otrzymał pochwałę

_________________
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: 4 lut 2014, o 15:33 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Kody umieszczaj w znacznikach SYNTAX C wtedy są czytelniejsze i łatwiejsze do analizy

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

A dlaczego nie działa jak należy?
Może poczytaj i pooglądaj to:
http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html

_________________
Jestem początkujący i moje porady mogą być błędne



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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