f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - Pytanie o 2 lekcje

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
Przesunięty przez: piotr94
Pon Lut 25, 2013 9:11 pm
Pytanie o 2 lekcje
Autor Wiadomość
radek86b 

Wiek: 31
Dołączył: 21 Lut 2013
Posty: 17
Skąd: Siedlce
Wysłany: Pon Lut 25, 2013 6:53 pm   Pytanie o 2 lekcje

Powiecie że czepiam się bzdur ale czy ten tytuł jest poprawny?:
"-Porty procesora jako wyjścia i wyjścia"
A nie czasem wejścia i wyjścia ?
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pon Lut 25, 2013 9:15 pm   

Dziękuję za uwagę - literówka poprawiona.
_________________
http://www.piotr94.net21.pl/
 
     
radek86b 

Wiek: 31
Dołączył: 21 Lut 2013
Posty: 17
Skąd: Siedlce
Wysłany: Wto Lut 26, 2013 8:17 pm   

Cytat:
Dokonamy tego dopisując 2 linijki do naszego programu:
Config Pinb.1 = Input
Set Portb.1
Config Pinb.2 = Input
Set Portb.2


1Czy dobrze rozumiem że jeśli już mamy jakiś ustawiony pin jako wejście czyli:
Config Pinb.1=Input
na samym początku to aby aktywować rezystor to potem wystarczy dopisać tylko
Set Portb.1 lub Set PinB.1 '?

2 Dlaczego skoro rezystory muszą być na wejściach to trzeba je oddzielnie aktywować a nie aktywują się automatycznie jak tylko ustawimy port czy pin jako wejście?
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Wto Lut 26, 2013 11:25 pm   

Po pierwsze, koniecznie Set PortN.X - ustawienie w rejestrze PinN.X może mieć, w zależności od modelu i wersji procesora trochę różne działanie.
Co do pierwszej części tego zdania tak - Kombinacja ustawień: Wejście + Set PortN.X powoduje aktywowanie rezystora podciągającego.

Dlaczego nie są one aktywowane automatycznie? Bo taka jest konstrukcja procesorów AVR (ATMEL8051 np. miały tylko możliwość pracy jako wejście z pull-upem lub wyjście pull-down), bo nie zawsze jest to pożądane przez programistę.
Akurat w naszym przypadku przyciski zwierają do masy, a w przypadku ich zwolnienia pin nie ma z niczym połączenia. Ale już np. w przypadku podłączenia jakiegoś innego urządzenia, które wystawia zarówno stany wysokie i niskie włączenie na stałe takich rezystorów zwiększałoby pobór prądu przez urządzenie, co przy zasilaniu z baterii ma spore znaczenie.
_________________
http://www.piotr94.net21.pl/
 
     
radek86b 

Wiek: 31
Dołączył: 21 Lut 2013
Posty: 17
Skąd: Siedlce
Wysłany: Sro Lut 27, 2013 5:38 pm   

1.W programie w lekcji 2 jest tak że gasimy diodę jednym przyciskiem , a drugim zapalamy
A czy jest możliwość gaszenia i zapalania tylko jednym przyciskiem ?

Napisałem coś takiego:

Kod:
$regfile = "m644pdef.dat"
$crystal = 16000000
Config Portb.0 = Output
Config Portb.1 = Input
  Set Portb.1
  Do
  If Pinb.1 = 0 Then Set Pinb.0
  Waitms 5
  If Pinb.1 = 0 Then Reset Pinb.0
  Waitms 5
   Loop
End


Ale dioda zachowuje się dziwnie,lekko przygasa raz da się włączyć i wyłączyć a czasami trzeba dłużej przytrzymać przycisk

2.Czy jeśli na początku programu ustawię port jako wejście (input) i np. już mi te wejście będzie nie będzie potrzebne to będę mógł ustawić je jako wyjście -jednym słowem czy wejścia i wyjścia procesora ustawia się na stałe i koniec!?!?
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Lut 27, 2013 9:22 pm   

1. Musisz w tej sytuacji po pierwsze eliminować drgania styków - nie wiem dlaczego, ale w którymś momencie umknęło mi umieszczenie tego fragmentu - poprawiłem w związku z tym lekcję numer 2.
Poza tym po raz kolejny zwracam uwagę: REJESTR PIN SŁUŻY DO ODCZYTU WEJŚĆ, ZAŚ DO USTAWIANIA WYJŚĆ SŁUŻY REJESTR PORT - pisałem o tym przecież w kursie i parę postów wyżej - Twój kod, pomijając brak eliminacji drgań styków i złą konstrukcję (zakładasz, że uda Ci się wcisnąć przycisk na mniej niż 5ms???), i tak nie zadziała, gdyż reset bitu w rejestrze Pin nie spowoduje zupełnie żadnego efektu...

2. Piny można re-konfigurować w dowolnym momencie. Trzeba jednak pamiętać, żeby nie doprowadzić do zwarcia w przypadku takiej rekonfiguracji, gdyż Input z włączonym podciąganiem po zmianie na Output spowoduje wystawienie na pinie stanu niskiego (jego podłączenie na zewnątrz do masy spowoduje uszkodzenie procesora) i odwrotnie przy wyłączonym podciąganiu - pin będzie wystawiał stan niski po rekonfiguracji na wyjście.
_________________
http://www.piotr94.net21.pl/
 
     
radek86b 

Wiek: 31
Dołączył: 21 Lut 2013
Posty: 17
Skąd: Siedlce
  Wysłany: Pią Mar 01, 2013 1:46 pm   

No to teraz kolejny może ...brak rozumu u mnie... :oops:

Poprawiłem ten program powyżej z uwzględnieniem drgań styków:



Kod:
syntax=basic4gl$regfile = "m644pdef.dat"
$crystal = 16000000

Config Portb = Input
Set Portb.0
Config Porta = Output
Do
If Pinb.0 = 0 Then
Waitus 5

If Pinb.0 = 0 Then Set Pina.0
If Pinb.0 = 0 Then
 Waitus 5
 If Pinb.0 = 0 Then Reset Pina.0
 Waitms 500
End If
End If
Loop
End


Ogólnie chodziło mi w nim żebym za pomocą jednego przycisku mógł gasić i zapalać diodę. To się w miarę udało (pomijając tzw.drgania styków-co w programie uwzględniłem)

Teraz natomiast chcę aby za pomocą jednego przycisku (gasić/zapalać wszystkie diody na porcie A) ustawiać stan niski lub wysoki na CAŁYM NARAZ porcie A (wyjsciowym) Tylko że jak wpisuję tam gdzie jest PINA.0 -PORTA to się nic nie dzieje lub program podpowiada żeby wybrać PORTA.0 tylko że wtedy jest tylko jeden pin czyli na to samo wychodzi co przy PINA.0

Rozumiem że jak wpisze PORTA to całym portem powinienem sterować a tu zonk...
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pią Mar 01, 2013 2:40 pm   

Po pierwsze i ostatnie - NIE ZAPISUJ PINA ANI NIE RÓB Set/Reset PINA. Jak jeszcze jeden taki program zobaczę - to dalszej pomocy nie ma ;)
Do takich celów zastosuj zapis PORTA=&B11111111 - wszędzie stan wysoki; PORTA=&B00000000 - wszędzie stan niski; PORTA=&B10101010 - co druga dioda zapalona.
Poza tym Twój program dalej jest zły - dalej liczysz, że drgania styków trwają 5 mikro sekund?
Poza tym totalnie nie masz pojęcia które endif do której instrukcji jest...
Powinno być:
Kod:

$regfile = "m644pdef.dat"
$crystal = 16000000

Config Portb = Input'cały PORTB jako wejście
Set Portb.0'podciąganie PB0
Set Portb.1'podciąganie PB1
Config Porta = Output'cały porta jako wyjście
Do

If PINB.0 = 0 then
     Waitms 50
     If PINB.0 = 0 then
          Toggle PORTA.0 'zmieniamy stan diody na przeciwny
          Waitms 200 'czekamy chwilę po tej operacji
     Endif
endif

If PINB.1 = 0 then
     Waitms 50
     If PINB.1 = 0 then
          PORTA = Not PORTA 'zmieniamy stan wszystkich diodek na przeciwny
          Waitms 200 'czekamy chwilę po tej operacji
     Endif
endif

Loop
End
_________________
http://www.piotr94.net21.pl/
 
     
radek86b 

Wiek: 31
Dołączył: 21 Lut 2013
Posty: 17
Skąd: Siedlce
Wysłany: Pią Mar 01, 2013 8:20 pm   

piotr94 napisał/a:

Poza tym totalnie nie masz pojęcia które endif do której instrukcji jest...


Niom :lol: no jasnowidzem to raczej nie jestem(a narazie siedzę tylko 2 lekcji i 3 tylko "liznełem") ,a w drugiej lekcji nawet na ten temat komentarza zielonego nie ma.

1Choć END IF to można się domyśleć że oznacza koniec warunku tego pierwszego i jedynego
ale gdy są dwa...to z tego co czytałem gdzie indziej ostatni zapis END IF odnosi się do pierwszego warunku (tego wyżej zapisanego) a przedostatni END IF do drugiego warunku (tego niżej)
Czy mam rację ?

2 Czym to się właściwie różni (tego też w 2 lekcji nie ma chyba że gdzieś dalej...)
NOT? a TOGGLE ? i to to zmienia stan na przeciwny więc dlaczego 2 sposoby zapisania ,pewnie ma to jakiś sens tylko jaki ?

PS PRZEPRASZAM ZA MOŻE CZASAMI GŁUPIE PYTANIA ZADAJĘ ALE PROSZĘ PAMIĘTAĆ
PO PIERWSZE JESTEM STANEM NISKIM :lol: JEŚLI CHODZI O PROGRAMOWANIE
A PO DRUGIE DOBRY UCZEŃ TO DOCIEKLIWY UCZEŃ Dziękuje. :wink:
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pią Mar 01, 2013 8:48 pm   

Co do punktu drugiego - będzie o tym dalej.
End If kończy najbliższy warunek idąc od niego w górę.
A z tymi poradami śmieję się, bo ciągle, mimo mojego trzykrotnego ZAKAZU używasz Set Pina co jest błędem.
_________________
http://www.piotr94.net21.pl/
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group