Skocz do zawartości

Kurs C od ABXYZ


bundz

Pomocna odpowiedź

Witam, czytam ten moment już chyba 20 raz i nadal nie mogę pojąć dlaczego w linijce PINB bit PB1 ma wartość 0 a nie 1 i tym samym PB2 ma wartość 1 zamiast 0 ? Proszę mi to jakoś objaśnić bo z tabeli podpisanej "Konfiguracja równoległych portów we/wy mikrokontrolerów AVR" wynika, że powinno być inaczej.... 🙄 link do kursu http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=2

Pozdrawiam

Link do komentarza
Share on other sites

Skoro linie PB0..PB3 są wejściami i ktoś dla przykładu podał na wyprowadzenie PB0 stan wysoki napięcia, a na PB1 stan niski, więc w rejestrze PINB bit 0 ma wartość 1, a bit 1 ma wartość 0.

Czy ta ilustracja jest faktycznie tak niezrozumiała i myląca ?

Link do komentarza
Share on other sites

Nie wiem. Morduję się z tym jakoś i nie mogę przełknąć. Coś mnie albo zmyliło wcześniej albo juz sam nie wiem. Nie powinno to wyglądać tak?

art002portbzzz.jpg

Link do komentarza
Share on other sites

PB0..PB3 - to nazwy wyprowadzeń AVR, które zostały w przykładzie skonfigurowane jako wejścia,

kolor czerwony oznacza, że na to wejście podano wysokie napięcia, a niebieski, że niskie.

W przykładzie na wyprowadzenia PB0..PB3(wejścia) podano stany napięcia kolejno: WYSOKI, niski, WYSOKI, niski, Więc z dolnej połówki rejestru PINB można odczytać wartość 0101.

Jeśli wejścia PB0..PB3 byłyby niepodłączone, wtedy na PB0,PB1 byłby stan wysoki, bo te wejścia zostały

wewnętrzne podciągnięte przez rezystor do napięcia zasilania, natomiast na PB2,PB3 stany przypadkowe.

Czy może kolega wcześniej używał mikrokontrolerów 8051? W AVRach porty we/wy działają nico inaczej.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Podłączam się do tego posta zacząłem czytać ten artykuł o programowaniu bo chcę się tego nauczyć ale już na drugiej części siadłem ponieważ nie rozumie o co chodzi z tym DDRx PORTx itp DDRx oznacza że mamy wejscie bądź wyjście tak?

a portx czy chcemy mieć na nim stan wysoki 1 lub niski 0? a jak tworzy sie taka tabelke z PINx? jeżeli ktoś z forumowiczow posiada jeszcze jakies inne podstawy programowania uC w języku C oprócz tych z diody to proszę o pomoc

załamka nie rozumiem tego może ktoś potrafiłby mi to rozrysować schematem strzałkami skąd się wzieły 0 i 1

https://www.forbot.pl/forum/upload_img/obrazki/IMG_4ac4f774670172753.jpg

Link do komentarza
Share on other sites

ciscoc napisał: "a wejście to przecież 0 a my mamy 1 dlaczego nierozumiem"

?

Na wejścia AVRa można podać wysoki lub niski stan napięcia - oczywiste, a stan dowolnego wejścia możemy zbadać odczytując rejestr PINx. I tyle ..

Jeszcze raz to piszę. W przykładzie (ilustracja z kursu) na wyprowadzenia PB0..PB3(wejścia) podano stany napięcia kolejno: WYSOKI, niski, WYSOKI, niski, Więc z dolnej połówki rejestru PINB można odczytać wartość 0101. Jeśli wejścia PB0..PB3 byłyby niepodłączone, "wisiały w powietrzu", wtedy na PB0,PB1 byłby stan wysoki, bo te wejścia zostały wewnętrzne podciągnięte przez rezystor do napięcia zasilania, natomiast na PB2,PB3 stany przypadkowe.

Link do komentarza
Share on other sites

Witam mam pytanie czy zapis np. PORTB I= _BV(6) jest równoważny z zapisem PORTB= PORTB+ _BV(6) mogę tak zapisywać ustawienie bitu? Bądz zerowanie bitu

PORTB &= ~(_BV(6)) czy jest równoważne PORTB= PORTB* ~ (_BV(6)) ?

Link do komentarza
Share on other sites

OK,dzięki

[ Dodano: 11 Paź 09 12:17 ]

Jeżeli możecie miałbym prośbę żebyście mi wyjaśnili program jak w załączniku polegający na wyświetleniu liczb od 0 do 99 na wyświetlaczu LCD(foto b1). Nie rozumie dlaczego muszę zadeklarować trzy zmienne 8 bitowe i,k,m .i,k domyślam się że k obsługuje wyświetlacz W0 zaś i wyświetlacz W1 a poco jest m ? O co chodzi z zagnieżdżeniem tych trzech pętli for?

Czy wyswietlacz działa w ten sposób wyświetla nam najpierw 01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,itd.

[ Dodano: 11 Paź 09 12:18 ]

b1

b.thumb.JPG.4b4ccaf5fad04c917f402e62b944b95f.JPG

b1.thumb.JPG.a55eb0718bc51f1b50ec9a08baa6ca26.JPG

Link do komentarza
Share on other sites

Pętkla dla zmiennej m jest tylko po to aby 10 krotnie zwolnić prędkość wyświetlania kolenych liczb. A wyświetlanie działa tak, że na zmiane w dość szybkim tępie musimy zapalać pojedyncze segmenty wyświetlacza. Więc przy takim sposobie wyświetlania użycie funkcji delay do spowolnienia wyświetlania skończyło by się tylko pojedynczymi mrygnieciami wyswietlacza.

Najlepiej jakbys sam poeksperymentował z kodem, np zakonentuj tego for(m.....), albo spraw żeby liczył do 100 lub 200, zobacz co się stanie jak będziesz zmieniać wartośc funkcji delay itp.

Link do komentarza
Share on other sites

Witam w kursie częśći 2 http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=2

nie rozumię tego zapisu czy byłby ktoś w stanie mi go wytłumaczyć oraz jak się

tworzy rejestr PINC. Byłbym wdzięczny za pomoc.

if(!(PINC & 0x01)) PORTD=0x0F;

czy on jest równoważny zapisowi

PORTD= ~PINC & 0x01;

oraz

if(!(PINC & 0x02)) PORTD=0x0F;

PORTD= ~PINC & 0x02;

---------PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0

DDRC---0----0-----0----0----0----0----0----0

PORTC--0----0-----0----0----0----0----1----1

PINC----?----?------?----?----?----?----?-----?

PC0 i PC1 sa przyciskami odpowiadającymi za swiecenie LED

są to wejscia z podciągnieciem do VCC

[ Dodano: 05 Lis 09 03:35 ]

Ponawiam pytanie czy ktoś może wyjaśnić mi zasadę tworzenia PINx (PINC)

1.thumb.JPG.5304233d332d98ded12e6ffe86ab85ee.JPG

Link do komentarza
Share on other sites

Nierozumiem pytania

jak się

tworzy rejestr PINC.

Jest to zdefiniowana nazwa rejestru mikrokontrolera (definicja jest dostępna po załaczeniu pliku avr/io.h)

if(!(PINC & 0x01)) PORTD=0x0F;

czy on jest równoważny zapisowi

PORTD= ~PINC & 0x01;

to nie jest to samo

Pierwsze: jeśli wartośc bitu 0 na porcie C wynosi 0 ustaw wartośc portu D na 0x0F

Drugie: do poru D wpisz wartość ~PINC & 0x01

przykład

Pierwsze:

PINC==0xAF -> nierób nic

PINC==0xAE -> PORTD=0x0F

Drugie:

PINC==0xAF -> PORTD=0x01

PINC==0xAE -> PORTD=0x00

PS: proponuje sie napierw nauczyć podstaw programowania w C, dobry kurs http://pl.wikibooks.org/wiki/C

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.