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.

Podstawy z mikrokontrolerami

pachu80 31 Paź 2011 15:06 1739 14
  • #1 31 Paź 2011 15:06
    pachu80
    Poziom 9  

    Witam
    Jestem początkujący w tej dziedzinie, więc proszę o wyrozumiałość i mam kilka pytań :
    1. Czy jest jakaś różnica miedzy używaniem sbi(),cbi() a DDR,PORT i która opcje lepiej stosować ?
    2. Jak dokładnie działają & | ^ ~ proszę o wytłumaczenie jak najprościej
    3. I ostatnie pytanie jak lepiej pisać PORTB = _BV(1) | _BV(2) czy może PORTB = 0x06 jest jakaś różnica ?
    Proszę o wyrozumiałość i odpowiedz
    Z góry dziękuje :D

    0 14
  • #3 31 Paź 2011 15:40
    mirekk36
    Poziom 42  

    pachu80 napisał:

    1. Czy jest jakaś różnica miedzy używaniem sbi(),cbi() a DDR,PORT i która opcje lepiej stosować ?


    to nie ma za wiele wspólnego ze sobą, bo sbi() cbi() służą do ustawiania, kasowania wybranych bitów natomiast nazwy DDRx, PORTx oraz PINx to są nazwy rejestrów dzięki którym dokonujemy komunikacji z procesorem.

    DDRx - służy do ustawiania kierunku pinów portu

    PORTx - służy do wystawiania stanu 0 lub 1 na pinie jeśli jest on ustawiony jako WYJŚCIE za pomocą powyższego rejestru DDRx (albo do podciągania programowego pinu do VCC)

    PINx - z tego rejestru odczytujemy natomiast stan jaki jest na pinie który jest ustawiony jako wejście (np przy sprawdzaniu stanu klaiwszy)

    pachu80 napisał:
    2. Jak dokładnie działają & | ^ ~ proszę o wytłumaczenie jak najprościej


    To są operatory służące m.in do operacji na bitach ale nie tylko, tu warto sięgnąć po jakąś książkę - nawet taką do czystego języka C dla komputerów PC albo do wikipedii - będzie sporo dokładnych opisów

    pachu80 napisał:
    3. I ostatnie pytanie jak lepiej pisać PORTB = _BV(1) | _BV(2) czy może PORTB = 0x06 jest jakaś różnica ?


    Jeśli już wybierać spośród tych dwóch sposobów które przedstawiłeś to korzystaj z makr _BV(). Aczkolwiek jest jeszcze trzeci i wg mnie o wiele lepszy sposób, np jeśli chcesz odwołać się do jakiegoś bitum np ustawić na jedynkę to używaj tzw operatorów przesunięć bitowych, o tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ale nigdy nie stosuj zapisu typu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    bo to jest masakra i najgorszy styl programowania w C.

    Pomyśl sobie gdy np będziesz miał ustawić preskaler i tryb CTC w rejestrze konfiguracyjnym timera to jaki zapis powie ci dużo więcej taki?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    czy może taki:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    no chyba ten drugi prawda? bo od razu widzisz jasno z kodu, jakie bity ustawiasz ;)

    0
  • #4 31 Paź 2011 16:58
    xamrex
    Poziom 28  

    A ja Ci polecam na początek może jakąś książkę.
    Do wyboru są 2 z czego jedna jest już trochę dla bardziej doświadczonych..
    Więc szczerze polecam Ci zainteresować się tą pozycją.
    http://atnel.pl/wydawnictwo

    0
  • #6 31 Paź 2011 17:52
    pachu80
    Poziom 9  

    hmm. ksiazki moze fajne tylko w okolicy 100zl :cry:

    0
  • #7 31 Paź 2011 18:01
    autoservice
    Poziom 20  

    Jeśli dopiero zaczynasz to nie pakuj się w książki z takimi przykładami, poćwicz nawet na "sucho" język na PC, najlepsza książka na świecie do języka C: "Język ANSI C -Kerrigan Ritchi" na aukcjach znajdziesz dość tanio :) z tej książki uczą się nawet profesjonaliści także tak czy siak jest to lektura obowiązkowa jeśli chcesz programować w języku C.
    Pozdrawiam

    0
  • #8 31 Paź 2011 18:04
    pachu80
    Poziom 9  

    ja tak troche znal skladnie (tzn komendy i ich zastosowanie z PHP) tylko potrzebuje cos bardziej pod mikrokontrolery obsluga wyjsc itp

    0
  • #9 31 Paź 2011 19:13
    autoservice
    Poziom 20  

    jeśli tylko obsługa wyjść to wystarczy Ci samouczek języka C z help'a kompilatora...bo pewnie w bascom tego nie robisz. nie ma znaczenia co chcesz zrobić, na początek podstawowa lektura to wspomniany kerrigan i ritchie.
    Pzdr.

    0
  • #11 01 Lis 2011 10:36
    pachu80
    Poziom 9  

    pare kursów widzialem w necie ale wlasnie tam stosowane jest zapis np: DDRD = 0x0C ,a mowicie ze lepszy jest PORTB = (1<<PB1) | (1<<PB2); wiec mogę prosic zeby ktos opisal jak to działa ? np ustawiajac port i go kasujac.
    Z gory dziekuje

    0
  • #12 01 Lis 2011 10:50
    excray
    Poziom 39  

    Są też dobre kursy w necie. Na początek polecam:
    http://hobby.abxyz.bplaced.net/index.php?pid=4&cid=1
    oczywiście nie zastąpią porządnej literatury.

    pachu80 napisał:
    pare kursów widzialem w necie ale wlasnie tam stosowane jest zapis np: DDRD = 0x0C ,a mowicie ze lepszy jest PORTB = (1<<PB1) | (1<<PB2);

    Dlatego że w kursach nie chcą Cię rzucać z miejsca na głęboką wodę. Zobacz że dalej pewnie przestaną stosować ten pierwszy zapis a sukcesywnie będą wpajać drugi.

    0
  • #13 01 Lis 2011 11:16
    tmf
    Moderator Mikrokontrolery Projektowanie

    pachu80 napisał:
    pare kursów widzialem w necie ale wlasnie tam stosowane jest zapis np: DDRD = 0x0C ,a mowicie ze lepszy jest PORTB = (1<<PB1) | (1<<PB2); wiec mogę prosic zeby ktos opisal jak to działa ? np ustawiajac port i go kasujac.
    Z gory dziekuje


    No więc jednak zaglądnij do K&R, bo bez znajomości podstaw daleko nie zajdziesz. A skoro pytasz o różnice pomiędzy powyższymi zapisami to najwyraźniej od tych podstaw trzeba zacząć. Dopiero jak powyższe zapisy i im podobne nie będą miały dla ciebie tajemnic to zrób następny krok. Bo na razie wyglądasz na człowieka, który znając kilka angielskich słówek bierze się za czytanie Shakespeare w oryginale :) Bynajmniej nie odbieraj tego jako złośliwość, tylko dobrą radę, kogoś kto też kiedyś zaczynał.
    Co do niecałych 100zł za książki - czy to dużo? Procesor kosztuje 10-40zł/sztuka. 100zł to wyjście do kina lub knajpy, parę godzin zabawy i nic z tego nie ma.

    0
  • #14 01 Lis 2011 15:29
    pachu80
    Poziom 9  

    nie odbieram nic za zlosliwosc. slycham rad innych, ktorzy maja juz doswiedczenie i pojecie. Wlasnie na podstawie tego kursu co podał link excray zaczynam z ta dziedzina programowania (wczesniej to PHP,MySQL i HTML+CSS) i wlasnie zapis bitow odbywa sie w postaci szesnastkowej, ale racja pozniej jest juz z przesunieciami :D lecz lepiej sie upewnic bo najwazniejsze to dobrze umiec podstawy :D A co do tej ceny to jest to prawda, ze jest to nic, lecz jak mozna to zrobic inaczej to czemu nie

    Dodano po 1 [godziny] 1 [minuty]:

    aha mialbym jeszcze jedna prosbe mianowicie moge prosic o jakies niezbyt skomplikowane schematy plytek testowych/uruchomieniowych pod Atmega8/Atmega16

    0
  • #15 01 Lis 2011 17:22
    dondu
    Moderator Mikrokontrolery Projektowanie

    pachu80 napisał:
    aha mialbym jeszcze jedna prosbe mianowicie moge prosic o jakies niezbyt skomplikowane schematy plytek testowych/uruchomieniowych pod Atmega8/Atmega16

    Ponieważ zwracasz uwagę na koszty, to zacznij od stykówki i garści elementów: http://mikrokontrolery.blogspot.com/
    A później albo sam zaprojektujesz taką jak Ci będzie odpowiadać, abo kupisz to co będzie Ci potrzebne.

    0