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



Teraz jest 24 kwi 2024, o 21:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 64 ]  Przejdź na stronę Poprzednia strona  1, 2, 3  Następna strona
Autor Wiadomość
PostNapisane: 26 lut 2012, o 22:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

To ja tak z ciekawosci sie zapytam.
A nie dało by tego załatwić jedną tablicą oraz dwoma pętlami które by latały po tablicy i wystawiały odpowiednio stany na portach ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2012, o 23:26 
Offline
Moderator
Avatar użytkownika

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

Malutki_27 napisał(a):
To ja tak z ciekawosci sie zapytam.
A nie dało by tego załatwić jedną tablicą oraz dwoma pętlami które by latały po tablicy i wystawiały odpowiednio stany na portach ?


Pewnie by dało radę ale o wiele bardzie edukacyjne byłoby gdyby kolega przedstawił tu kod swojego pomysłu bo z tego początkujący mogliby skorzystać - a tak? ;) takie opisy im nie dadzą za dużo. Dlatego warto wrzucać swoje pomysły - to zawsze może być dobrą inspiracją dla kogoś innego - jeśli się okaże, że fajnie zrobione.

Ja mogę powiedzieć, że to też jest jeden ze standardowych sposobów.

_________________
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: 26 lut 2012, o 23:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Własnie siędzę nad tym. A żę kompa mam po formacie to się lekko irytuję że coś jest nie zainstalowane albo brak jakiegoś sterownika lub jeszcze coś innego :| . Tak czy siak obiecuję że wrzucę także swoje wypociny :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 00:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Jak obiecałem, tak i zrobiłem :)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 07:41 
Offline
Moderator
Avatar użytkownika

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

No i proszę jedno z lepszych rozwiązań poza tą zmienną i typu int, zdecydowanie powinno się czegoś takiego unikać - i nadać typ zmiennej int8_t ;) (chodzi o prawidłową gospodarkę pamięcią RAM oczywiście). Ale jeśli chodzi sam pomysł na realizację to bardzo fajny i jest to alternatywny wzór dla początkujących warty uwagi i zrozumienia.

chociaż zwrócę uwagę na jeszcze małe niedociągnięcie, bo otóż przy linijce:

Kod:
PORTC |= EN|A0|A1|A2 ;          // podciąganie do vcc


mamy komentarz jak widać, że jest to podciągnięcie do vcc - niestety to nieprawda. O podciągnięciu do VCC może być mowa tylko podczas ustawienia pinów jako WEJŚCIA, a w tym przypadku gdy są wyjściami po prostu ustawiasz na nich stan wysoki w tym na wejściu EN układu co spowoduje zapalenie się od razu ostatniej diody LED z uwagi na wysokie stany A0, A1, A2

kolejna sprawa to dlaczego w tablicy negujesz każde wyrażenie ???

Kod:
                                        ~(EN),                  // 1
                                        ~(A0|EN),               // 2
                                        ~(A1|EN),               // 3
                                        ~(A1|A0|EN),    // 4
                                        ~(A2|EN),               // 5
                                        ~(A2|A0|EN),    // 6
                                        ~(A2|A1|EN),    // 7
                                        ~(A2|A1|A0|EN)  // 8


przecież przez to niestety tak na prawdę całość by nie działała już choćby z faktu że EN będzie = 0 - ale ja uznaję to tylko jako literówkę, bo wystarczy zdjąć te tyldy (czyli negacje) i wszystko będzie OK ;)

_________________
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 lut 2012, o 09:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Proszę o wybaczenie ;) ale ostatnią edycję tego kodu robiłem po 1 w nocy.

Co do negacji masz rację w przypadku gdy ona występuje stany wyjść był ustawiane dokładnie odwrotnie.
A pojawiła się tylko dlatego że łatwiej było mi patrzeć na zapalające się diody niż na gasnące :)
Z racji późnej pory zapomniałem po prostu ją usunąć :|

Łoki poniżej zamieszczam poprawiony kod wedle sugestii

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 09:26 
Offline
Moderator
Avatar użytkownika

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

Bardzo ładnie teraz i jak mówiłem - te negacje potraktowałem właśnie jako literówkę bo sama idea się liczyła, która jest tu bardzo dobra. Ponieważ kolega SunRiver rozdał już swoje nagrody to ja mogę tu przyznać nagrodę pocieszenia, za takie dopracowanie kodu i jeśli kolega nie posiada programu MkAvrCalculator a by się przydał niechcąco - to proszę się zgłosić do mnie na maila ;)

_________________
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 lut 2012, o 09:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Dziekuję za miłe słowa. Cały zestawik już posiadam, a najlepsza nagrodą jest uznanie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 12:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

Ale czy naprawdę trzeba używać tutaj tablicy? Przecież na wejścia a0-a2 trzeba podawać po kolei stany od 0 do 7 i z powrotem.

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 13:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Pewnie że nie trzeba. Tylko że za pomocą tablicy wydało mi się najprostsze do zrobienia. Można też zrobić to samo za pomocą kilku pętli for ale taka kombinacja byłaby zbyt skomplikowana w stosunku do potrzeb. Natomiast przy tablicy gdzie masz zdefiniowane stany dla wyjść, wygodniej się "lata" pętlami. Dodatkowo przy tablicy nie martwisz się o stany na portach, bo zrobiłeś to już raz i po kłopocie. :) , i odwołujesz się już tylko do konkretnych zapisów z tablicy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 14:49 
Offline
Moderator
Avatar użytkownika

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

Ani sposób z pętlą ani sposób z tablicą nie jest bardziej czy mniej skomplikowany w takim przypadku. Za to warto pamiętać, że można to zrobić na takie przynajmniej dwa sposoby a przecież jest ich jeszcze o wiele wiele więcej ;)

zamiast używania linia po linii zapalania kolejnych - stosując proste programowanie liniowe brrrrr

_________________
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 lut 2012, o 15:15 
Offline
Moderator
Avatar użytkownika

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

A przy okazji - pomyślał ktoś o takim sposobie żeby zorganizować to wszystko w jednej krótkiej pętli ??????

Poniżej w takim razie mój sposób - spróbujcie go przeanalizować - na pewno działa i na pewno jest jeszcze milion innych ;)

Kod:
   int8_t i = 7;
   while(1) {
      PORTC = ~(1 << ( i * ((i>0)?1:-1)) );
      if( --i == -8 ) i = 6;
      _delay_ms( 100 );
   }


efektem działania tej pętli jest jedna zapalająca się dioda od lewej do prawej a potem od prawej do lewej i tak w kółko ;)

To jest takie troszkę bardziej matematyczne podejście do zagadnienia i myślę że godne waszej uwagi panowie. Bo każdy z was użył co najmniej dwóch pętli - chociaż w tym rozwiązaniu z tablicowaniem już można było użyć tylko jednej ;) także.

Hmmm w zasadzie to mogłem z tego zrobić kolejne zadanie - zagadkę polegającą na tym, żeby ktoś podał odpowiedź co robi ta procedura ;)

_________________
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 lut 2012, o 15:26 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

mirekk36 napisał(a):
zamiast używania linia po linii zapalania kolejnych - stosując proste programowanie liniowe brrrrr


hihihihihi... to mój pierwszy pomysł... ;)
Ale na szczęście szybko z niego zrezygnowałem na korzyść pętli

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 15:36 
Offline
Moderator
Avatar użytkownika

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

A dlaczego zrezygnowałeś ? toż to sposób dobry jak każdy inny a co więcej często bywa bardziej optymalny jak się wszystko dobrze przemyśli.

_________________
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 lut 2012, o 15:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

ależ oczywiście kolego Malutki pisz na PW dostaniesz DG swojego :)
zasłużyłeś :) i widać że ci się chciało i się starałeś i właśnie to zostanie docenione :)

:)

pozdrawiam

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 15:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

mirekk36 napisał(a):

Kod:
   int8_t i = 7;
   while(1) {
      PORTC = ~(1 << ( i * ((i>0)?1:-1)) );
      if( --i == -8 ) i = 6;
      _delay_ms( 100 );
   }




A ja wiem tylko nie powiem :P Całkiem nie dawno użyłem bardzo podobnego sposobu do zrobienia tego samego ale z trzema wędrującymi diodami :)
W tym wszystkim najważniejsze jest << a reszta to matematyka :)

Jak nie będzie chętnych w wyjaśnianiu to mogę opisać krok po kroku :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 15:59 
Offline
Moderator
Avatar użytkownika

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

Malutki_27 napisał(a):
W tym wszystkim najważniejsze jest << a reszta to matematyka :)

Jak nie będzie chętnych w wyjaśnianiu to mogę opisać krok po kroku :)


Dokładnie tak jak mówisz ;) .... ale zróbmy tak (ponieważ sam już z takich sposobów korzystasz na co dzień, to poczekajmy może ktoś mniej zaawansowany w tym zakresie spróbuje podjąć rozwikłania się tej zagadki a my mu pomożemy. A jeśli się nie znajdzie nikt - to wtedy spróbuj to wytłumaczyć/opisać po swojemu OK ?

_________________
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 lut 2012, o 16:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Jestem za i jak najbardziej popieram

Kolego Malutki właśnie o taką postawę mi chodziło :)
Twój sposób obsługi DG jest naprawdę bliski tej procedurce której ja używam , a której
celowo nie ujawniam - właśnie w celach edukacyjnych :)

Niebawem pojawi się nowe zadanie może nawet trudniejsze :)

I pisz mi na PW adres bo jutro idą wysyłki :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 17:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

mirekk36 napisał(a):
A przy okazji - pomyślał ktoś o takim sposobie żeby zorganizować to wszystko w jednej krótkiej pętli ??????


A ja tu widzę dwie pętle :D


Takie pokrętne wytłumaczenie. Sprytne to, tyle, że nie spełnia założeń co do tej łamigłówki :D


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

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 17:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

dobre :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lut 2012, o 18:11 
Offline
Moderator
Avatar użytkownika

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

miszczo napisał(a):
A ja tu widzę dwie pętle :D


No to coś źle kolega widzi ;) bo oczywiście specjalnie na potrzeby łamigłówki starałem się zaplątać sporo do jednej linii ;) ... pomimo to fakt iż można to rozbić na taki warunek:

Kod:
if(i > 0)
PORTC = ~(1 << i );
else
PORTC = ~(1 << i * -1);


wcale nie oznacza, że są tu dwie pętle - ale może coś się koledze pomyliło - pętle to konstrukcje typu: for(), while() albo do {} while() ..... a to powyżej to po prostu warunek IF i to wszystko - nie pełni to roli żadnych dwóch pętli ;)


miszczo napisał(a):
... tyle, że nie spełnia założeń co do tej łamigłówki :D


Spełnia spełnia - tylko wystarczy zdjąć negację no i pozbyć się przesunięcia (1<< - ale za to PLUS że sobie poradziłeś z rozpisaniem tego na poszczególne zadania. Dokonałeś tzw "reverse engeneering" ;) ... dobrze - to teraz czas stosować takie pomysły na co dzień w programowaniu - oczywiście niekoniecznie przy miganiu diodami - to ma zastosowanie w wielu wielu momentach.

_________________
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 lut 2012, o 19:11 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

mirekk36 napisał(a):
A dlaczego zrezygnowałeś ? toż to sposób dobry jak każdy inny a co więcej często bywa bardziej optymalny jak się wszystko dobrze przemyśli.

Bo pisania dużo i pewnie po kompilacji też trochę zasobów skonsumuje. Wprawdzie skompilowałem obie wersje, ale zajętości procka to już nie sprawdzałem :(
A poza tym spojrzałem jeszcze raz na tabelę prawdy i wyszło mi, że to po prostu kolejne liczby. A to znaczy, że wcale nie trzeba tak dużo pisać. I właśnie dlatego napisałem drugi programik.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lut 2012, o 15:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

PRZESYŁKI WYSŁANE POCZTA POLSKĄ

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2012, o 19:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Czy już doszły scalaczki i wszyscy zadowoleni - w swych tajnych kryjówkach knują do czego by je użyć ??

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2012, o 20:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

Niestety moja jeszcze jedzie z chin xp



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2012, o 20:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

no trochę cierpliwości panowie bo poszły zwykłym priorytetem przesyłki :(
co ciekawe pewnie ty jesteś najbliżej wiec do ciebie dojdzie najpóźniej
tu u mnie na wiosce to wysyłka z jednej na druga ulicę pocztówki trwa tydzień :(

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2012, o 21:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

Spokojnie mi się nie śpieszy :)


...



...



... Cholera kiedy do mnie przyjdzie!!! ... :D joke



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2012, o 21:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

heh

ja czekam już piaty miesiąc na amortyzatory do auta :(

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2012, o 21:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

No tak ostatnio przesyłki między galaktyczne lubią błądzić :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 mar 2012, o 15:52 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

SunRiver napisał(a):
Czy już doszły scalaczki i wszyscy zadowoleni - w swych tajnych kryjówkach knują do czego by je użyć ??

Do mnie wczoraj też jeszcze nie dotarła.
Może dziś jak wrócę z pracy... Będzie czakała na mnie miła niespodziewajka ;)

_________________
Jestem początkujący i moje porady mogą być błędne



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: 64 ]  Przejdź na stronę Poprzednia strona  1, 2, 3  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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