Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 13 mar 2025, o 00:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 27 maja 2014, o 09:09 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Witajcie.
Jestem całkowitym świeżakiem jeśli chodzi o uC i ich programowanie. Tradycyjnie jak wszyscy zacząłem od migania diodą. Udało się i działa. Radość była wielka. :) Jednak postanowiłem pomigać czterema diodami podpiętymi do różnych portów. I tak diody podpięte do atmega8 poprzez R220om do pinów PB1, PB0, PD0, PC5.

Kod wygląda tak:
Kod:
#include <avr/io.h>
#include <util/delay.h>

int main(void) {

    DDRB |= (1<<PORTB);
    DDRC |= (1<<PORTC);
    DDRD |= (1<<PORTD);

   while(1){

      const int t=5000;
      const int p=350;

      PORTB |= (1<<PB1);
      _delay_ms(t);
      PORTB = (0<<PB1);
      _delay_ms(p);
      PORTD |= (1<<PB0);
      _delay_ms(t);
                PORTD = (0<<PB0);
      _delay_ms(p);
                PORTD = (1<<PD0);
      _delay_ms(t);
           PORTD = (0<<PD0);
      _delay_ms(p);
      PORTC = (1<<PC5);
      _delay_ms(t);
      PORTC = (0<<PC5);
      _delay_ms(p);

  }
}


Teraz moje pytanie. Niby wszystko działa ale dlaczego tylko dioda PD0 działa prawidłowo (świeci pełną mocą) a pozostałe ledwo się jarzą ?

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 09:11 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

Kliknij tylko w googla hasło

"avr jtag"

i zobaczysz MILIARDY - wciąż powtarzanych na forach tego typu pytań i odpowiedzi jednocześnie - że fusebitu JTAG nie wyłączyłeś i dlatego nie wszystkie diody podłączone do PORTC ci działają ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 09:20 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Dzięki za odpowiedź, ale wiesz początki są trudne. Wszędzie jest pełno "zasadzków". Twoja odpowiedź wyjasniłą mi tylko dlaczego port PC5 nie działa ale dlaczego port PB0 i PB1 któy jeszcze przed chwilą działał prawidłowo - teraz lewo żyje ?

Ps. Kod mam w ogóle dobry ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 09:22 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

Powiedz mi pan co to wg ciebie znaczy ? ale tak dokładnie wyjaśnij :


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


bo już tu zaczyna się bonanza :(

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 09:33 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Jak to zrozumiałem tak:
DDRB |= (1<<PORTB); <--- cały port B ma być wyjściem
DDRC |= (1<<PORTC); <--- cały port C ma być wyjściem
DDRD |= (1<<PORTD); <--- cały port D ma być wyjściem


A potem: PORTB |= (1<<PB1);
_delay_ms(t);
PORTB = (0<<PB1);

Konkretny pin portu B (PB1) ma zmieniać swój stan z wysokiego na niski po czasie t.

Ale chyba coś źle zrozumiałem z tego wynika ...

-----------------------------------

metodą prób i błędów zmieniłem na
DDRB |= (1<<PB1);
DDRC |= (1<<PC5);
DDRD |= (1<<PD0);
DDRB |= (1<<PB0);

i działa ale przyznam się szczerze, że nie rozumiem tego kiedy w tych DDRx deklaruje się konkretny pin a kiedy cały port ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 09:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

popatrz tak przy okazji co się przed chwilą ukazało ;) jeszcze ciepłe :lol:

http://mirekk36.blogspot.com/2014/05/mi ... rawki.html

a odnośnie twoich rozważań


Cytuj:
ŹLE niestety :(

DDRB |= (1<<PORTB); <--- cały port B ma być wyjściem
DDRC |= (1<<PORTC); <--- cały port C ma być wyjściem
DDRD |= (1<<PORTD); <--- cały port D ma być wyjściem


oj oj :( kolega mocno nie rozumie jeszcze operacji przesunięć bitowych << niedobrze .... dlatego z pełną odpowiedzialnością polecam przede wszystkim książkę

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

bo tam jest to wyjaśnione - a po to aby cały port B miał być wyjściem to robimy np tak:\

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


mówi to panu coś ? ;) (wszystkie bity rejestru DDRx ustawiamy na wartość = 1) ... jeśli jeszcze nie masz tej książki (bluebooka) to posiłkuj się chociaż poradnikami z mojego bloga w jakimś zakresie - tu na pewno przyda ci się ten:

http://mirekk36.blogspot.com/2012/01/av ... stawy.html

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 10:05 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Książkę zamówie za tydzień razem z programatorem. Na razie posiłkuje się różnymi tutorialami i właśnie na jednym z nich jest coś takiego:
Kod:
  int main(void){

 

                 DDRB |= (1<<PORTB);

           

                 while(1){

                          PORTB ^= (1<<PB0);

                          _delay_ms(1000);

         }

}


Czy możesz mi wyjaśnić dlaczego w tym przypadku jest DDRB |= (1<<PORTB) a nie DDRB |= (1<<PB0) ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 10:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 kwi 2013
Posty: 381
Lokalizacja: Łowisko
Pomógł: 32

Wlasnie przez takie pseudoporadniki wielu poczatkujacych sie zniecheca, dlatego tez kupuj ksiazke i czytaj

Wysłane z mojego DRIVE przy użyciu Tapatalka

_________________
невозможно ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 10:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

aren napisał(a):
Na razie posiłkuje się różnymi tutorialami i właśnie na jednym z nich jest coś takiego:


ale wiesz co ? no sorki ja jednak nie będę się rozwodził na temat - "dlaczego ktoś w jakimś tutorialu w internecie pisze takie mega bzdury" :(

Cytuj:
DDRB |= (1<<PORTB); // mega KICHA :(


Pokazuję tobie jak zrobić to dobrze jeśli chcesz ustawić cały port jako wyjście czyli

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


albo jeśli chcesz ustawić TYLKO jeden pin jako wyjście:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a tobie polecam jak najszybciej zamknąć ten swój tutorial w internecie i do niego więcej nie zaglądać bo jak widzisz będziesz miał więcej przez to szkody niż pożytku. Bo wiesz - dzisiaj jest moda na poradniki - każdy je robi ... tylko nie każdy początkujący potrafi ocenić jakość każdego z tych poradników .... i często wybiera ten największy pasztet :( ..... (niezależnie jakiej dziedziny to dotyczy czy programowania, czy samochodów, czy szydełkowania czy gotowania) ....

a ty sam też powinieneś pójść po rozum do głowy - że jeśli tobie nie wychodzi z tutoriala w internecie coś tak mega prostego - to chyba znaczy że coś jest nieteges z tym tutorialem ..... delikatnie mówiąc

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 10:18 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Może podam linka do tego gdzie ja to znalazłem i zobacz czy może zostało to użyte w innym celu:
[ edytowano: ------------- nie będzie LINKU na naszym forum do takich tutoriali (ze względu na ten właśnie poziom) - ZAPOMNIJ kolego, przykro mi ----- mirekk36 -------------- ]



Czyli podsumowując nigdy nie wstawia sie w DDR Portu tylko konkretny pin ?

Jeszcze jedno ostatnie pytanie mam. Czy jak mam np 4 piny portu B musze je wypisywać jedno pod drugim po kolei czy mozna je wypisać po jakimś przecinku czy średniku ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 10:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

aren napisał(a):
Czyli podsumowując nigdy nie wstawia sie w DDR Portu tylko konkretny pin ?


DDRx - to jest rejestr portu x, ktory określa które piny są wejściami a które wyjściami.
odpowiednio DDRA - portA, DDRB - portB itd

Rejestr ma 8 bitów, każdy bit odpowieda jednemu pinowi w porcie. Zero oznacza wejście, jeden oznacza wyjście:
00000000 - wszystkie piny wejściowe
11111111 - wszytkie piny wyjściowe
00000010 - pin1 wyjście reszta wejście
10000001 - pin0 i pin7 jako wyjścia reszta wejścia.

DDRB = 0xFF ustawia w całym rejestrze jedynki czyli cały port (8 pinów jest wyjściami)
Równie dobrze można napisać DDRB = 255; Bo liczba 0xFF (hex) to jest to samo co 255 dziesiętnie i to samo co 11111111 binarnie

DDRB |= (1<<PB0) ustawi jedynkę TYLKO na pinie zerowym
Jest to równoważne z PORTB |= (1<<0);

------------------------ [ Dodano po: 11 minutach ]

Widziałem ten poradnik, do którego link podałeś. No muszę powiedzieć, że takich bzdur dawno nie widziałem.
To jest lepsze od teorii ognia piekielnego na stykach przycisków...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 11:07 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

aren napisał(a):
Może podam linka do tego gdzie ja to znalazłem i zobacz czy może zostało to użyte w innym celu:
[ edytowano: ------------- nie będzie LINKU na naszym forum do takich tutoriali (ze względu na ten właśnie poziom) - ZAPOMNIJ kolego, przykro mi ----- mirekk36 -------------- ]


Bardzo cię proszę na przyszłość - nie wklejaj linków na tym forum do takich tutoriali - chcesz? proszę bardzo ucz się z tego tutoriala.

------------------------ [ Dodano po: 2 minutach ]

aren napisał(a):
Czyli podsumowując nigdy nie wstawia sie w DDR Portu tylko konkretny pin ?


Panie kochany - czy zajrzałeś CHOCIAŻ RAZ do tego linku ?

http://mirekk36.blogspot.com/2012/01/av ... stawy.html

(podawałem ci go już wyżej) ....

bo widzę że nie .... więc jeśli nie chcesz się uczyć, a wolisz dalej wypisywać bzdury ze swojego ulubionego tutoriala do którego skasowałem link to proszę cię bardzo .... tylko proszę bez rozpowszechniania tych bzdur na forum ok ? to moja gorąca prośba.

------------------------ [ Dodano po: 9 minutach ]

sq8dsr napisał(a):
Widziałem ten poradnik, do którego link podałeś. No muszę powiedzieć, że takich bzdur dawno nie widziałem.
To jest lepsze od teorii ognia piekielnego na stykach przycisków...


Ja swego czasu obejrzałem kilka tych "ala poradników" .... no myślałem że z krzesła spadnę. Jednym z "lepszych" jest tam (tzn na kanale youtube tego człowieka) .... recenzja pewnej książki do nauki C .... Jakby ktoś chciał umrzeć ze śmiechu to fakt - warto obejrzeć, i dowiedzieć się co to znaczy dla dzisiejszej młodzieży słowo "recenzja" .... CAŁKIEM nowe znaczenie ..... :lol: ... chyba że już to skasował ....

więc masz rację sq8dsr ---> mogą być lepsi od tych co to straszą ogniem piekelnym na stykach mikrosłiczy :lol:

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 11:44 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Spokojnie. Wstawiając tego linka chciałem, żeby ktoś zerknął czy ja coś źle zrozumiałem, czy cały tutorial jest zły. Nie chciałem to robić nim jakiejś konkurencji dla Twoich tutoriali :) Okej usuwam ze swojej pamięci to co tam zobaczyłem i biore się za Twój tutorial o diodach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 11:53 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27363
Lokalizacja: Szczecin
Pomógł: 1043

aren napisał(a):
Nie chciałem to robić nim jakiejś konkurencji dla Twoich tutoriali


Uwierz mi, link do dobrego tutoriala może spokojnie być na naszym forum ... sam niejednokrotnie podaję linki np dotutoriali czy to o elektronice czy programowaniu do edw.pl (tam był super tutorial do języka C) .... I nie traktuję takich linków jako konkurencję .... im więcej dobrych tutoriali w necie tym lepiej dla wszystkich .... No ale .... ale coś takiego na co ty się powołałeś - to już jest poniżej krytyki .... Polecam ci zapamiętaj sobie gdzieś ten link i zajrzyj tam za kilka miesięcy gdy już się nauczysz chociaż troszkę języka C ... to wtedy sam się zdziwisz i wręcz zbaraniejesz gdy usłyszysz co w tym tutorialu "twoim" się dzieje .....

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2014, o 17:33 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Dzisiejszy tutorial rewelacja. Znałem sposób matematyczny ale tablicowy to jest rewelacja :) Super przekazana wiedza i podoba mi się, że jak coś nie wychodzi to nie robisz ciach i film stop tylko na bieżąco "naprawiasz: błąd.
Od strony technicznej tutorial mega profesionalny.

Aż się nie mogę doczekać BB żeby doczytać więcej ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 07:51 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

W ramach zadania domowego odnośnie migania diodami wymyśliłem sobie że diody będą zaświecały się od środka linijki i rozchodziły się na prawo i lewo i znowu do środka. Jednak działają tylko diody od 5-8 a 1-4 nie świecą. Możesz zerknąć na kod ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czy to co ja sobie wykombinowałem czyli dodanie drugiej tablicy i wrzucenie jej do pętli jest prawidłowe ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 08:28 
Offline
Użytkownik

Dołączył(a): 16 mar 2013
Posty: 157
Pomógł: 6

kolego a nie lepiej to zrobić za pomocą jednej tablicy?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tylko, że ja mam podłączone wszystkie diody do portu A i w zależności od tego jak masz podłączone diody musi być ~tab[i] bądź tab[i]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 08:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Wstaw za
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jakieś opóźnienie bo teraz to dane z tab1 wyświetlają ci się na bardzo krótka chwilę.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 08:42 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

No rzeczywiście, za dużo kombinowałem a nie pomyślałem o najprostszym... opoźnienie ..... ehhh



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 11:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 kwi 2013
Posty: 187
Lokalizacja: Kobiernice
Pomógł: 13

można by też

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zamienić na
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


;)

_________________
zapraszam na bloga http://bakcyl8bit.blogspot.com/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2014, o 20:03 
Offline
Nowy

Dołączył(a): 10 mar 2014
Posty: 1
Pomógł: 0

Jeśli można też chciałbym zademonstrować swój kod :) widziałem na YT ćwiczenia z led i z chwila wolnego czasu wróciłem do książki po długiej przerwie :)
oczywiście program działa zgodnie z oczekiwaniami
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem z którym nie mogę sobie poradzić zaczyna się w momencie gdy chce na atmega8 płynnie migac diodami między Portami
będę wdzięczny za kod do przeanalizowania w którym np 3 diody będą płynnie biegać od PORTD do PORTB. Na pewno jest na to prosty sposób a ja kombinuje jak zwierze na 2 litery pod gore ;]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2014, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Użyj timera PWM

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 14:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Poda ktoś linka do tej recenzji? Obejrzałem już wszystkie kabarety na jutubach i nie mam co robić :(

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO