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

[C] PORTA |= (1<<PA3); prośba o rozpisanie jak z 0 robi się tu 1

masterbix 18 Cze 2012 06:06 1701 16
  • #1 18 Cze 2012 06:06
    masterbix
    Poziom 12  

    Witam
    Dopiero zaczynam moją przygodę z programowaniem, operacjami logicznymi itp.
    Systematycznie przerabiam dostępne kursy i jakkolwiek wiem że wynikiem operacji
    PORTA |= (1<<PA3); będzie stan 1 na nóżce PA3 to za nic nie mogę rozkiminić skąd to się bierze? Skoro standardowo PORTA jest ustawiony na wejście czyli stan 0 to logicznym jest że PA3 też ustawione jest na 0 przesuwając w lewo 0 o jedną pozycję to tak jakby mnożyć przez 0 czyli wynik powinien być 0 a jest 1.
    Mój problem wynika na pewno z braków w mojej wiedzy na temat operacji logicznych ale mam nadzieje że koledzy pomogą i wyjaśnią mi to łopatologiczne :)

    0 16
  • #2 18 Cze 2012 06:58
    mirekk36
    Poziom 42  

    Przecież PA3 to stała, która ma wartość = 3. Zatem całe wyrażenie wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    zatem do rozważenia masz najpierw (1<<3) co to znaczy?

    wartość = 1 przesuń o 3 pozycje w lewo, czyli dostaniesz liczbę = 8

    czyli najpierw wyobraź sobie w bajcie jedynkę ;) będzie to zapalony bit na najmłodszej pozycji po prawej - zgadza się ? I teraz masz tę jedynkę przesunąć o 3 pozycje czyli trafi ona w miejsce bitu nr.3 ;) dzięki czemu wykona się operacja:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    skoro w PORTA po resecie było zero to operacja logiczna OR ustawi jedynkę na 3 bicie w PORTA

    Kierunek portu nie ma nic z tym wspólnego. Kierunek ustalasz rejestrem DDRA wstawiając w odpowiadające bity zera (weścia) albo jedynki (wyjścia)

    za to masz jeszcze oddzielnie dwa rejestry PINA oraz PORTA

    zresztą zobacz sobie tutaj:

    http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html

    0
  • #3 18 Cze 2012 07:21
    masterbix
    Poziom 12  

    Rejestry mam akurat przyswojone chodziło mi tylko o rozwiązanie matematyczne po prostu nie wiedziałem że "PA3" to stała myślałem że to odniesienie (nazwa) pinu, stąd przyjąłem że ma tak jak wartość rejestru wartość 0 i mi się ogólnie popindoliło chciałem przesuwać PA3 (w moim założeniu 0) o 1 w lewo co jest nielogiczne poza tym to 1 się przesuwa :). Bardzo dziękuję za twoją pomoc teraz już wiem z czym to się je i gdzie popełniłem błąd. Dla utrwalenia załóżmy że chcę ustawić pin PA0 na wyjście. PA0 to stała która ma wartość 0 (1<<0) czyli przesuwam 1 o 0 czyli o 'nic' i zostaje 1 (0000 0001) dobrze to rozumiem?

    0
  • #4 18 Cze 2012 09:01
    mirekk36
    Poziom 42  

    No o to chodzi ;) dobrze rozumiesz - a jeśli nie wiesz skąd te stałe PA3, PA0 itd - to weź sobie ECLIPSE - podjedź kursorem myszy na napis PA3 i trzymając lewy CTRL kliknij lewy klawisz mychy ;) od razu pięknie przeniesiony zostaniesz do odpowiedniego pliku nagłówkowego w którym zobaczysz te wszystkie definicje, stałe itp dla procesora na który piszesz program. Mam nadziej, że korzystasz z Eclipse ? ;) a nie kociego AVR Studio 5/6?

    0
  • #5 18 Cze 2012 09:32
    masterbix
    Poziom 12  

    LoL wlaśnie z AVR studio korzystam :) dzięki wielkie za pomoc i info o tym eclipse ściągnę go jak najszybciej :) Temat do zamknięcia :)

    0
  • Pomocny post
    #6 18 Cze 2012 11:20
    mirekk36
    Poziom 42  

    No zobacz sobie tutaj:

    http://mirekk36.blogspot.com/2011/11/dlaczego-eclipse-zamiast-avr-studio.html

    a tu masz krok po kroku instalkę jak zrobić z pluginem

    http://mirekk36.blogspot.com/2012/04/eclipse-instalacja-avr-plugin.html

    i poczytaj jeszcze inne artykuły n/t eclipse na tym blogu ;)

    Dodano po 48 [sekundy]:

    A temat sam musisz zamknąć - klikając na dole ten klawisz "rozwiązano" ;)

    0
  • #7 18 Cze 2012 13:21
    LordBlick
    VIP Zasłużony dla elektroda

    Ależ w AVRStudio też da radę ustalić, jaką wartość ma PA3. Wystarczy przeszukać plik nagłówkowy odpowiedniego procesora. Kliknięcie jest wygodne, ale wygoda nie rozwija... ;)

    0
  • #8 18 Cze 2012 14:12
    mirekk36
    Poziom 42  

    LordBlick napisał:
    Kliknięcie jest wygodne, ale wygoda nie rozwija... ;)


    No tak rzeczywiście to lepiej wrócić może do Notepad.exe albo w ogóle do pisania na kartce papieru ołówkiem ? ;)

    Nie po to ktoś tworzy profesjonalne środowiska, które mają ułatwiać pracę. I to jeszcze darmowe środowiska. Ja jakoś korzystam z takich środowisk i nie wyobrażam sobie powrotu do chociażby Programmers Notepad.

    Zamiast tego "szukania" można w tym czasie zrobić panie kochany 10 innych rzeczy ;) Więc powiedzenie w tym przypadku "wygoda nie rozwija" ma się jak pięść do oka ;)

    0
  • #9 18 Cze 2012 14:23
    gaskoin
    Poziom 38  

    Nie zmienia to faktu, że autora problem nie leży w środowisku, tylko w niewiedzy. Pomijam tu już kwestie regulaminowe, ale forum jest od pomagania w problemach a nie od nauczania języka.

    0
  • #10 18 Cze 2012 14:29
    LordBlick
    VIP Zasłużony dla elektroda

    mirekk36 napisał:
    Nie po to ktoś tworzy profesjonalne środowiska, które mają ułatwiać pracę.
    Ależ nie mam nic przeciw Eclipse. Tylko zanim coś zaczniemy używać, warto poznać uniwersalne zasady działania niezależne od środowiska. To że jest automatyczne wyszukiwanie to jest super, ale warto wiedzieć na jakiej zasadzie to działa. Możemy np. akurat mieć dostęp do komputera, gdzie nie ma akurat Eclipse, łącze z Internetem jest bardzo cienkie i co wtedy ? Poświęcić godziny na ściągnięcie jedynego środowiska, w którym damy radę, czy w 5 minut znaleźć odopwiedni plik ?

    0
  • #11 18 Cze 2012 14:36
    mirekk36
    Poziom 42  

    gaskoin napisał:
    ... ale forum jest od pomagania w problemach a nie od nauczania języka.


    No sorki, przepraszam ale to już się robi jakieś strasznie dziwne podejście. To może w ogóle niedługo na forum o nic nie będzie mógł zapytać taki początkujący - bo powinien najpierw się sam douczyć. Zwrócił się autor z problemem bo się zaciął - i uzyskał pomoc w problemie.

    Dodano po 5 [minuty]:

    LordBlick napisał:
    ...warto poznać uniwersalne zasady działania niezależne od środowiska. To że jest automatyczne wyszukiwanie to jest super, ale warto wiedzieć na jakiej zasadzie to działa.


    Zgadzam się, że warto wiedzieć, ma kolega tu całkowitą rację - tyle że taki Eclips znacząco w tym pomaga - ponieważ od razu - od ręki - pokazuje konkretny plik w którym znajdują się takie definicje a przy okazji takiego niewinnego PA3 można sobie poprzeglądać ten plik i dowiedzieć się właśnie że tam znaleźć można także definicje np wektorów przerwań i wiele innych ważnych rzeczy. Od razu też człowiek widzi skąd się biorą te stałe i jak są tworzone. Same zalety. Tymczasem niejednokrotnie początkujący, który męczy się w PN, szuka takich informacji gdzieś po internecie często trafiając na jeszcze gorsze podpowiedzi i rozwiązania - zamiast wejść na własny dysk do folderu WinAVR. Niezbyt wiele poradników o takich niby prostych sprawach mówi. Więc skąd oni mają wiedzieć na początku tej drogi gdzie szukać?

    A tu klik i już jest , i już wiadomo. O to tylko mi chodzi.

    0
  • #12 18 Cze 2012 14:46
    LordBlick
    VIP Zasłużony dla elektroda

    mirekk36 napisał:
    A tu klik i już jest , i już wiadomo. O to tylko mi chodzi.
    A tak, tak, tylko ze jesteśmy uzależnieni i mniej potrafimy, jeśli nie radziliśmy sobie wcześniej w trudniejszych warunkach.

    0
  • #13 18 Cze 2012 14:50
    gaskoin
    Poziom 38  

    Mirku chyba się ze mną zgodzisz, że to o co pyta autor to podstawa. Przesunięcia bitowe, makra i dodawanie to jest przecież podstawa podstaw. Z postu wynika, że autor nie wie co to za operator | (bo chwilę dalej pisze o mnożeniu). Nie przesadzajmy, jakby to było coś trudniejszego to ok, ale na litość Boską nie róbmy z forum szkółki języka dla leni. Po to między innymi jest regulamin. Jeśli masz inne zdanie niż ktoś, kto go wymyślił, to jedyną drogą jest niewchodzenie na forum.

    I pamiętaj, że rozwiązaniem na to, że w samochodzie nie działa np kierownica wcale nie jest kupno nowego samochodu.

    0
  • #14 18 Cze 2012 14:55
    mirekk36
    Poziom 42  

    gaskoin --> przede wszystkim nie zamierzam się z tobą kłócić, ale zdecydowanie się nie zgadzam, że kwestia przesunięć bitowych i to jeszcze jak człowiek nie wie co to PA3, to jakieś podstawy typu mnożenie czy dzielenie albo dodawanie wcale nie mogą się temu równać. Dla ludzi którzy nie mieli do czynienia z językiem C nigdy wcześniej to czarna magia. Sam pamiętam swoje początki i dobrze to rozumiem. Ale zgodzę się że dla ciebie to na pewno podstawy ..... Zatem to jest twoja bardzo subiektywna ocena i pozostawmy ją moderatorom jak już. Bo tak samo ty możesz nie wchodzić na to forum i nie oglądać takich pytań. Jak widać wystarczyło lekko popchnąć i kolega autor ruszył ładnie dalej.

    0
  • #15 18 Cze 2012 15:05
    gaskoin
    Poziom 38  

    W Twojej pierwszej książce operatory i preprocesor też są w rozdziale podstawy :)
    http://witmir.pl/spis_pdf/mikrokontrolery-avr-jezyk-c-podstawy-programowan-918275.pdf

    W książce, którą właśnie trzymam w rękach stałe są na 2 stronie natomiast operatory na 5.

    Też się nie chcę kłócić, ale bez przesady. Ostatnio tu na forum był temat, który mnie rozbawił "jak obsłużyć SPI?" odpowiedź teoretycznie złośliwa - "przeczytaj sobie w nocie", "dzięki, faktycznie wszystko tam było razem z wykresami" :D
    Chciałem tylko wyłudzić (dla Ciebie) od autora pieniądze na książkę :)

    0
  • #16 18 Cze 2012 15:19
    mirekk36
    Poziom 42  

    Nie no dobra ja nie dyskutuję dalej bo jak mówię nie mi oceniać czy to daje się podciągnąć pod regulamin czy nie ;) może masz rację ..... ale jak mówię to już moderator pewnie zdecyduje. Ja po prostu sam pamiętam czasy swojego stratu w C i jak widziałem taką linię programu:

    for(int i=*p, a=**z; i<=*(int)(&tab[k++]); i++, a++) {

    to dostawałem gęsiej skórki ;) .... i przeklinałem w myślach próbując się tego nauczyć, kto takie głupoty powymyślał - a dzisiaj? też mógłbym powiedzieć, że to podstawa. W szkołach uczą matematyki ale już przesunięć bitowych nie za bardzo. Dlatego tylko ja nie dziwię się takim pytaniom.

    0
  • #17 18 Cze 2012 18:22
    masterbix
    Poziom 12  

    Ok widzę że mój mały problem przerodził się w jakąś dziwną dyskusję. Bardzo dziękuję Panu mirekk36 bardzo mi pomógł i doradził. Co do środowiska moim zdaniem każdy może pisać w czym mu się żywnie podoba i dyskusja które środowisko jest lepsze jest bezsensowna. Co do mojej niewiedzy, operacje logiczne mam już przyswojone. Mój problem polegał na tym że nie wiedziałem ze PA3 to stała, bo w kursach internetowych z których korzystam nie było o tym napisane, googlowałem za tym dobre 2 dni bez skutku więc uznałem że dział o mikrokontrolerach z podtytułem POCZĄTKUJĄCY do dobre miejsce by się o to zapytać. Dobrze że są na tym forum dobrzy ludzie jak Pan Mirek którzy bez zbędnego trolowania i hejtowania wskażą palcem początkującym w którą stronę iść gdy się zatną na jakimś drobiazgu.

    0