Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATMEGA32][BASCOM] zwarcie pinu do GND a możliwość upalenia

09 Cze 2012 22:33 1578 12
  • Poziom 16  
    Witam.

    Czy polecenie portb = %B11111111 powoduje, że mogę piny tegoż portu zwierać do GND bez rezystorów? (klawiatura). Oczywiście mam na myśli sytuację, w której wcześniej ustalę config portb = input. Chodzi mi o wewnętrzne rezystory pull up. Przegrzebuję help w bascomie, przegrzebuję google, ale nie bardzo dostrzegam jasną i jednoznaczną wypowiedź.

    Bardzo proszę o jakąś wskazówkę bądź link.

    Pozdrawiam

    PS. W bascomie nie jest opisana komenda ddr, proszę o kilka słów wyjaśnienia w sprawie działania tej komendy
  • Poziom 16  
    Ja się bawię w C, ale myślę że to podobnie.

    Co do DDR to sprawa jest taka : DDRA = 0X00 - wszystkie piny portu A są wejściami
    DDRA = 0XFF - wszystkie piny portu A są wyjściami
    Czyli DDR ustawia czy dane piny portu są wejściami czy wyjściami
    Klik, link do kursu.

    A co do tego zwarcia.

    Rozumiem że te porty ustawiasz jako wejścia (czyli DDRB = 0X00), to wtedy swichem możesz zawrzeć to do GND i wtedy stan na PINB będzie 0, więc uC będzie wiedział że switch jest wciśnięty. Inna sprawa ma się jeśli było by to wyjście, wtedy z tego co wiem nie wolno tak sobie tego zwierać do GND.

    Zaznaczam że jestem dość początkujący w tym temacie ale wydaje mi się że wszystko opisałem poprawnie.
  • Poziom 16  
    Równiez jestem bardzo początkujący, dlatego proszę o wypowiedź kogos bardzo doświadczonego, bo za tę kostkę dałem 24 złote :D
    ---
    Ok, kumam czaczę.
    config portb = input 'wejscie
    ddrb = &B00000000 ' tu nie bardzo wiem, o co chodzi
    portb = &B11111111 ' to powoduje włączenie wewnętrzych rezystorów pull up

    proszę o korektę jeśli źle to zrozumiałem
  • Pomocny post
    Poziom 16  
    kiclaw napisał:
    Rozumiem że te porty ustawiasz jako wejścia (czyli DDRB = 0XFF),


    Drobna pomyłka bo powinno być DDRB = 0x00, czyli DDRB = 0b00000000.
    Niby drobiazg, ale początkującemu może namieszać.

    W procesorach AVR każda końcówka I/O powiązana jest z trzema rejestrami, które to decydują o przeznaczeniu tej końcówki. Te rejestry to:
    DDR - rejestr kierunku, ustala czy dana końcówka będzie wejściem czy wyjściem.
    PORT - rejestr wyjściowy
    PIN - rejestr wejściowy.

    Spróbuję to wytłumaczyć na przykładzie jakiejś końcówki np. PB1.
    Jeśli DDRB.1 = 0 końcówka pracuje jako wejście.
    Jeśli DDRB.1 = 1 końcówka pracuje jako wyjście.

    Jeśli końcówka pracuje jako wejście (DDRB.1 = 0) to:
    PORTB.1 = 1 włącza wewnętrzne rezystory podciągające do VCC (pull-up).
    PORTB.1 = 0 końcówka pracuje jako wejście pływające. Napięcie na wejściu "pływa" tzn. zmienia się swobodnie pomiędzy wartością GND a VCC.

    Jeśli końcówka pracuje jako wyjście (DDRB.1 = 1) to:
    PORTB.1 = 0 ustawia na tej końcówce stan niski
    PORTB.1 = 1 ustawia na tej końcówce stan wysoki.

    DDRB = &b00000000 to to samo co Config Portb = Input

    Jeśli coś będzie niezrozumiałe to pytaj.
  • Poziom 16  
    Rozumiem więc, że w bascom wystarczy, gdy napiszę, że portb = input. Właśnie o to mi chodziło, by wiedzieć, która instrukcja włacza pull up w konkretnym porcie. Oczywiście wiem, że konkretne jedynki w zapisie binarnym odpowiadają pinom kofigurowanego portu. Bardzo, ale to bardzo dziękuję!

    Mam nadzieję, że się tu odwdzięczę mniej doświadczonym (ode mnie) forumowiczom :-)

    Drobny dodatek - portb = input, a następnie portb =&B11111111 - wtedy wszystkie piny mają właczony pull up
    Pozdrawiam.
  • Poziom 36  
    Antystatyczny napisał:
    Rozumiem więc, że w bascom wystarczy,......

    .


    Nie jest ważne czy to Bascom, lub inne środowisko w którym programujesz.
    Jeżeli port ma pracować jako wejście to można zupełnie pominąć wpis w configuracji kierunku portu np:
    config portx.y = input ' nie jest konieczny
    albo
    DDRx = &B00000000
    DDRx = &H00
    DDRx = 0x00 ' co oznacza to samo

    Atmel AVR z natury ma "by default" wszystkie porty wejściami.
    Jeżeli w programie dany port był używany jako wyjśce (np LCD display) i w dalszej częsci tego programu chcemy ten sam port używać jako wejście (np: keypad) to taką procedurę należy poprzedzić wpisem configuracji tego portu jako wejście. Niemniej jednak dla przejrzystości programu, configuracja portów wejściowych może być pozostawiona bez szkody dla wielkości programu.
    Należy zwrócić uwagę że edytując bezposrednio rejestr
    "DDRx= ...."
    mamy możliwość jednoczesnej mieszanej configuracji (wejścia lub wyjścia) pinów danego portu.

    e marcus
  • VIP Zasłużony dla elektroda
    emarcus napisał:
    Atmel AVR z natury ma "by default" wszystkie porty wejściami.
    Co nie oznacza, żeby utrwalać złe praktyki programistyczne pozostawiania czegokolwiek przypadkowi. Inicjalizacja powinna być pełna i tyle.
  • Poziom 16  
    Korzystając z powyższych wskazówek napisałem, co następuje:

    Kod:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Symulacja działania programu wskazuje, że program nie reaguje na zmiany stanu na pinie B0. Gwiazdki przez cały czas wyświetlają się w górnym wierszu. Znowu coś źle zrozumiałem?
  • Poziom 29  
    Antystatyczny napisał:
    Gwiazdki przez cały czas wyświetlają się w górnym wierszu.

    Prawidłowo.

    Code:
    Locate 2 , 1

    oznacza pierwszy wiersz, drugi znak.
  • Poziom 16  
    Niestety nie mogę się z tym zgodzić. Help wyraźnie "mówi":

    locate y , x

    Też mnie to zdziwiło, bo zwyczajowo pierwszą współrzędną jest x.

    ---
    Zmieniłem komendę pinb.0 na portb.0 w instrukcji warunkowej i teraz program działa.
  • Poziom 29  
    Antystatyczny napisał:
    Niestety nie mogę się z tym zgodzić.

    Rzeczywiście, coś mi się pomieszało. Przepraszam.
  • Poziom 16  
    Cytat:

    ddrb = &B00000000 ' tu nie bardzo wiem, o co chodzi


    Ustawiając tak DDRB, ustawiasz że wszystkie piny portu B są wejściami. Gdybyś dał
    ddrb = &B11111111 - to wszystkie piny były by wyjściami.

    Switche podłączasz do wejść.
  • Poziom 36  
    [quote="LordBlick"]
    emarcus napisał:
    o nie oznacza, żeby utrwalać złe praktyki programistyczne pozostawiania czegokolwiek przypadkowi. Inicjalizacja powinna być pełna i tyle.


    Zdaje sie że ten aspekt również w któryms zdaniu nadmieniłem. Nie zauważyleś?

    e marcus