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



Teraz jest 29 mar 2024, o 07:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 12 maja 2018, o 10:57 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Witam . Jestem nowym użytkownikiem forum.Od tygodnia usiłuje napisać do moje kostki 4x4x4 kod który pozwoli mi na tworzenie efektów świetlnych . I tu mam zamostkowe cały czas. Próbuję napisać kod w języku C
który będzie mi pozwalał na zapaleni diody która mnie interesuje ( taki ogólny kod żebym na jego podstawie mógł tworzyć rożnego rodzaju efekty ) . Porty których używam to PC0-PC7 i PD0-PD7 ( anody ) , PA0-PA3( katody) zapalane stanem wysokim ( high ) ( 1) . A na sam koniec po chłopsku .... Jak zapalic np. 1 diode na porcie PC2 a później żeby przeskoczyło do Portu PD5 ( bo przecież nie mogę użyć tablicy skoro zmieniają mi sie porty skąd program ma wiedzieć o jaki port mi chodzi muszę mu to jakoś powiedzieć jak?) ??

Nie wiem czy opisałem mój problem dostatecznie dobrze . Kto może to proszę o podpowiedz jak napisać kod by przy wybranej diodzie zmieniał się i mój port , w zależności co che zapalić .
Uczę się z Książki Pana Mirka Bluebook ( jest świetna ) ale hmm ...Kostki Pan Mirek nie ma a ja chciałbym coś własnego stworzyć .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2018, o 12:24 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

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


Wypełniłem trzy pierwsze elementy tablicy
Gdyby wypełnić wszystkie to każda dioda miała by swoje współrzędne
Tworząc jakąś funkcję zapal diode podawałbyś nr diody
Inna sprawa gdyby trzeba było zapalić więcej diod
wtedy trzeba by było sumować ale to już zabawa na wieczory.
Jakąś podpowiedź masz :)

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2018, o 12:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Rewner28 napisał(a):
bo przecież nie mogę użyć tablicy skoro zmieniają mi sie porty skąd program ma wiedzieć o jaki port mi chodzi muszę mu to jakoś powiedzieć jak?
Dla czego tak uważasz? Przecież możesz stan wszystkich pinów przechowywać w tablicy dwuwymiarowej zawierającej zmienne obrazujące stan poszczególnych portów np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Następnie przy pomocy jakiejś funkcji wyrzucać zawartość tych zmiennych na porty, musisz tylko pamiętać by zamaskować zmienną katod jeśli na porcie A do pozostałych pinów będziesz mieć coś podłączone:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W ten sposób każdy pierwszy wymiar tablicy to jakiś stan świecenia kostki, natomiast drugi wymiar przechowuje komplet stanów portów sterujących diodami.
A to tylko jedna z możliwości, jak to mówią pomysłów tyle ilu programistów...


Autor postu otrzymał pochwałę


Ostatnio edytowano 12 maja 2018, o 17:10 przez xentis, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2018, o 12:42 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Widziałem już wcześniej takie zapisy gdy przeglądaczem strony z budowa 4x4x4 cube . Ogółem nie do końca je rozumiem wiec nie wiedziałem tez ze sa tymi co szukam, ale skoro mówicie ze to właśnie takie zapisy pozwalają na kontrole Diod to przeanalizuje je ( oby dwa posty wyżej ) i jak już będę coś wiedział więcej to odpisze wam . Puki co proszę nie zamykać jeszcze tematu . dziękuje za odpowiedz :)
P.S Jak podawaliście mi ten kod powyżej to rozumiecie ze Katody tez zapalają diodę jak maja stan wysoki , ponieważ 16 anod i 4( 16 + 4 =20 tranzystorów) katody sterują bramka Tranzystorowy NPN . dlatego tylko stan wysoki zapala diody . Wiedząc o tym powyższy zapisek kodów dalej jest poprawny ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2018, o 17:01 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

Nie analizowałem tego gdzie ma być jedynka a gdzie zero.
Starałem się przekazać pewien pomysł który mówi że jeden element tablicy może opisywać położenie diody w sześcianie.
x,y,z
Nakładając na ten element maskę ( & 0x0f00) możesz wyłuskać ustawienia portu
A czy to jest anoda czy katoda to nie ma znaczenia dla zrozumienia idei.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



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

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

JarekB napisał(a):
Nakładając na ten element maskę ( & 0x0f00) możesz wyłuskać ustawienia portu
Jedno ale - samo maskowanie nie wystarczy bo zarówno do portu C jak i D ZAWSZE trafią same zera (bo przecież porty są 8 bitowe a maską zerujesz najmłodszych osiem bitów) trzeba jeszcze odpowiednio przesunąć zawartość w elemencie tablicy tak by fragment zmiennej odpowiedzialny za dany port znalazł się w jej najmłodszej części.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2018, o 21:30 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

No tak. Racja.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 14:17 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Starałem sie zrobić tak jak napisaliście ale wciąż mam ten sam problem . i Nie rozumiem jak go rozwiązać . Może jeszcze raz wyjaśnię : Czy jest taki sposób aby zrobić coś takiego :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To taki przykładowy kod powyżej ma na celu zobrazowania tego co staram sie osiągnąć . a teraz opisze :
Chciałbym aby wszystkie 16 podłączane do portów były jakoś oznaczone w kodzie za pomocą identyfikatora jak w sieci IP , i po rozpoznaniu tego "IP" warunek IF będzie przydzielał literkę Albo C albo D , Sklejenie dalej zrobi resztę . Tak wiece Zawartość tab1[i] by identyfikowało nam jaki port ma zostać ustalony .
Czy jest to w ogóle możliwe ?? jestem początkujący wiec może przesadzam albo na takie rzeczy sa inne sposoby . No to pytanie jest akurat do waz moi drodzy .Jak możecie to pomóżcie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 14:24 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1079
Pomógł: 73

Zerkałeś na te kody: http://www.instructables.com/id/Led-Cube-8x8x8/ ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 17:07 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Tak znam ta stronę tu nie chodzi o to ze ich nie znalazłem tyko o wytłumaczenie mi jak zrobić taki kod. Taki gotowiec jak nie wiem co i jak, prawie nic mi nie mówi. Dlatego szukam wytłumaczenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 17:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Tylko ja nie do końca rozumiem co chcesz osiągnąć. Bo w przykładzie który podałeś 3 posty wyżej próbujesz robić dziwne rzeczy np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

gdzie zmienną "z" definiujesz jako uint8_t, więc jak chcesz do takiej zmiennej przypisać litery C/D?

Rewner28 napisał(a):
Sklejenie dalej zrobi resztę
Tyle że makro sklejania nazw to polecenie dla preprocesora więc program podczas działania w procku nic przy pomocy tego makra nie sklei.

Napisz dokładnie co chcesz osiągnąć. Bo po przykładzie który zamieściłeś to nie wiem czy chcesz mieć możliwość zapalania diod w kostce podając jej współrzędne x, y, z czy chcesz zrobić bibliotekę gdzie będziesz mógł zdefiniować do jakich pinów co jest podłączone...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 18:40 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Masz Racje co do zmiennej 'z' to miał być przykład tylko hehe no fakt powinna być jako char.
Ok Moim celem jest napisanie programu który pokazuje jakieś zjawiska świetlne . Problem w mojej głowie jest taki ze podłączone diody nie są po kolei czyli jedna tu jedna tam , wiec nie sa po kolei jak dasz w szeregu 0x01 potem 0x02 potem 0x04 to nie zapali się dioda PC0 , potem PC1 a później PC2 , bo nie sa podłączone w kolejności . moze ci sie zapalić PC0 a później PC4 A później PC7 i tak dalej . Mam w glowie jeden efekt co będzie raz będzie zapala diodę na porcie D , 4 razy obieg 'for' a później idzie na port C i zapala inne 4 diody .
no i jak to rozwiązać ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 20:20 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

Nie do końca rozumiem Twojego podejścia do problemu
Ale.
Diody są ułożone w przestrzeni trójwymiarowej x, y, z
Czyli dajmy na to że mamy zapaloną jedną diodę w w położeniu 0, 0, 0
No i teraz chcemy przesuwać zapalną diodę po przekątnej w płaszczyźnie x
No to dodajemy w pętli do y +1 i z +1
Zapalona dioda przesuwa się w jednej płaszczyźnie po jej przekątnej.

Ale gdybyś zrobił x + 1, y +1, z+ 1
wtedy zapalona dioda poszła by po przekątnej kostki

Idąc dalej gdybyś stworzył obraz to w uproszczeniu możesz go tak samo przemieszczać po kostce.
Każdy punkt obrazu rządzi się takimi samymi regułami jak jeden.

To jest uproszczenie bo należy powołać reguły które będą opisywać co się stanie gdy x lub y lub z osiągnie max lub min
Zacznij od jednej diody

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2018, o 20:58 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Dobrze wiec moze tak :
Stworze taka pętle z x,y,z dla zobrazowania :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co prawda opisałeś jeden sposób na samym początku ale nie do końca zrozumiałem dlaczego użyłeś 16 bitów zamiast 8 ?? i dałeś portC = 0 ?? portD = 0 Itp ??
Może to jest ten sposób który szukam tylko go jeszcze nie rozumiem ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2018, o 07:24 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

W tym pierwszym poście nieco "nababoliłem"
Chodziło mi o to że w jednej zmiennej można zawrzeć wszystkie ustawienia diody
Ale kolega xentis słusznie mi wytknął że takie maskowanie jakie zrobiłem bez przesunięcia nic nie da
Ale też się uczę.
Wymyśliłem inny sposób z zastosowaniem struktury
Jak koledzy sprawdzą że są babole to niech czym prędzej oklepią pomysł
Ale do rzeczy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co do struktur to pooglądaj Mirkowy poradnik.


Autor postu otrzymał pochwałę

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2018, o 07:38 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Dziękuje za odpowiedz :) To jest chyba to czego szukam . Przetestuje dziękuje jeszcze raz za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2018, o 08:30 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

Daj znać jak Ci poszło.
Tak jak pisałem też się uczę.
Pewnie koledzy rzucą na to okiem i jak są jakieś babole to udzielą wytknięcia.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2018, o 13:20 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Trochę Czasu minęło , jestem dość zajęty wiec idzie to jak krew z nosa . jednakże nauka programowania na takim LED CUBE jest bardziej ( jak dla mnie ) pożyteczna gdyż , diody które się zapalają pozwalają mi na łatwiejsze wykrycie mojego błędu . Uważam ze jest to dobry sposób nauki dla takich "mistrzów " jak JA :)
Oto Fragment Kodu jaki napisałem i dział fajnie 4 diody się przesuwają do okola kostki każda z lecz w pierwszym polu zapala sie 1 dioda 1 warstwa , przeskok na 2 diode ale juz 2 warstwy , dalej 3 dioda i 3 warstwy i na końcu 4 dioda i 4 warstwy . i tak te 4 diody krążą do okola kostki.

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

Puki co nie potrafię lepiej napisać takiego kodu ktory dal by mi taki efekt tylko na taki pomysł wpadłem.

Mam 2 Pytanka jak by ktoś mógł odpowiedzieć (może ty JarekB):

1. Czy jest sposób uzyskać efekt przerwania nie używając typowej Przerwania ?? chodzi mi o funkcje która by takie wtrącenie kodu robiła .( Przerwania próbuje zostawić na rozświetlanie diody i 2 przyciski )
2. Chciałbym zęby w głównej funkcji main mieć możliwość zmiana efektów świetlnych jaki sposób doradzacie . Łącznie planuje napisać 10 efektów świetlnych ( hehe puki co mam 1 :P ) . Czy macie jakaś fajna metodę ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2018, o 06:15 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

Odnośnie pytanie nr 1
Piszesz że nie chcesz tracić przerwania bo chcesz na nim osiągnąć efekt rozświetlania i przygaszania.
No właśnie
I tu według mnie jest rozwiązanie
Załóżmy że będziesz używał to tego celu Timer1
Ustawisz go raz a, zmieniać będziesz jedynie wartość rejestrów OCR
Masz dwa efekty i dwa przerwania do zadań związanych z tymi rejestrami
Ale Timer1 ma też przerwanie od przepełnienia.
No i do rzeczy:

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



Odnośnie pytania nr 2
Nie wiem czy dobrze rozumiem ale może tak? :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2018, o 22:25 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Dzieki za Odpowiedz :) Przemyśle to co napisałeś i jak coś zrobię to wkleję dalszy ciąg kodu :) dzięki JarekB !!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2018, o 21:21 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 10
Pomógł: 0

Wiem ze sporo już czasu minęło , Jednak programowanie jest w toku . Przeprowadzka zajęła mi 3 tygodnie bez możliwości programowania wiec powrót był ciężki . Ogółem mam juz zaprogramowane 5 efektów które zajmują mi 30 % pamięcią flash i 29 % pamięci EEPROM wiece sporo jeszcze mogę wykorzystać . Na końcu oczywiście załączę filmik z pełnym kodem :) .

Na dzień dzisiejszy borykam sie z problemem operacji na bitach.

Po krotce wyjaśnię : wszystkie poprzednie efekty które tworzyłem robiłem to za pomocą funkcji
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


mam tablice 2bajtowa ze wszystkimi 64 diodami , i za pomocą tej tablicy zapalam diodę która mnie interesuje. Problem jednak jest taki ze każda dioda zapala sie i gasi bo na jej miejsce jest wpisywana kolejna zmienna która zeruje ta poprzednia . W efekcie mam zapalone wszystkie diody które che jednak maja one słabe światło gdyż każda z nich ( przypuśćmy ze ma sie palić 15 diod z prędkością 8MHZ) wiec każda z tych diod jest zapalana 1 raz na 15 razy / czyli przez kolejne 14 razy sie nie pali. i to daje mi efekt słabego świecenia diody .

Operacje na bitach OR i AND pomogły by mi w tym ale problem jest taki ze jak mam wszystkie zapalone diody na kostce to wygaszenie tylko jednej z nich za pomocą ~ a później & , powoduje ze gaśnie cala kolumna ( gdyż 16 anod jest multipleksowane) mecze sie od 2 dni i nie wiem jak napisać funkcje by tylko 1 dioda gasła . Może ktoś ma jakieś ciekawe rozwiązanie tego problemu , albo kiedyś sam projektował taki CUBE i dal by jakieś wskazówki ??



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: 21 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 10 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