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



Teraz jest 30 mar 2026, o 22:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 19 sty 2015, o 22:22 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Witam

Potrzebuję napisać program do sterowania światłami poprzez właśnie DMX. Znalazłem opis: Opis protokołu DMX. Według opisu napisałem program:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście nie działa :lol: . Problem polega na tym, że mam za dużo kodu w przerwaniu, które wykonuję się co 4us... Gdy zrobię eksperyment: nie uruchamiam przerwań(nie piszę sei()) to po wpisaniu w main kodu z delay do migania LED-em miga on co określony przeze mnie czas. Jednak gdy włącze przerwania (sei()) to np. _delay_ms(500) wykonuję się około 20 sekund :( . Jak na tak krótki czas przerwania to chyba "troszeczkę" za dużo tych poleceń:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wpadłem na pomysł aby zrobić tablicę zmiennych i zrobić coś w stylu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W kodzie wyżej po prostu w jakiejś funkcji bym ustawił kolejne bity/ramki do wysłania, a w przerwaniu bym tylko zmieniał stan pinu. Na 3 kanały działało, ale za dużo by to ramu zżerało i to nie wypali (512 kanałów * 11 bitów/ramek + MTBF = dużooo ;) )
Więc teraz nie wiem jak się napisać ten protokół..... Bardzo byłbym wdzięczny za podpowiedzi jak to można napisać i czy to wogóle możliwe ;) . :?: :idea:

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2015, o 22:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

A może by wrzucić do FLASH'a zamiast do RAMu?
Odczytywać poprzez zmienną i tam ewentualnie zmieniać te bity co potrzebujesz (przed samym wysłaniem)


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 00:15 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

mokrowski napisał(a):
No a jeśli kolega się upiera że jednak nie wspomoże się sprzętowo tylko ,,międlenie bitów" to sugeruję:

Na pierwszy rzut oka myślałem, że nie będzie innej opcji, jak napisanie tego tym "międleniem bitów" :lol: ,ale jak się dokładniej przyjrzałem to:
Obrazek
to co jest zaznaczone na czerwono to jest idealny odpowiednik dla uartu z parametrami: 250000 8N2 :) wcześniej tego nie zauważyłem, już zacząłem pisać nowy kod :).

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 00:23 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Przecież to się samo prosi, aby wysyłać dane sprzętowo. Wygenerować Break i MAB w zmieniając zbocza w przerwaniu ( mierząc odstęp między nimi timerem )i po upływie czasu trwania MAB uruchomić nadajnik, wysłać UART-em bajt SC i później bajt danych( CD ). Cały bajt to też 44 us ( 11 bitów0, więc spokojnie zdążysz załadować kolejny do bufora nadawczego. Dla kolejnego kanału masz przecież dużo czasu (MTBF ), więc tu też spokojnie się wyrobisz. Tylko trzeba by tak dobrać kwarc, by osiągnąć szybkość transmisji 250kbps.

Pozdrawiam, QuadMan.

P.S. O... widzisz - gdy to pisałem, sam wymyśliłeś oczywiste rozwiązanie :-).


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 11:48 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Już mi się udało zaprzęgnąć do tego uarta i wysłanie sygnałów do świateł :) . Tylko teraz problem :D tego uarta potrzebuję też używać do komunikacji o prędkości 9600 i nie wiem czy mogę "dynamicznie" zmieniać jego prędkość na początku funkcji BAUD=250000, a na koniec znowu BAUD=9600 ? Można w programie zmieniać tak często prędkość?

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 13:33 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Właśnie tu jest problem, bo uC na jakim to robię to Atmega32. Jestem zmuszony "pobawić" się tym uartem.

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 14:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Przychodzi mi do głowy pytanie
czy fizycznie podłączone jednej linii RX do dwóch odbiorników
(sytuacja : nadaje PC o odbiera uC i sterownik świateł)
nie będzie to się zakłócać . ?
Połączenie RS jest jeden do jeden.

Takie moje luźne myśli :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 16:44 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Ale Tx z PC idzie do Rx ATmegi, a dopiero Tx Atmegi idzie do świateł :) . Rx w PC nie będzie używane.

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 17:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

No i rozjaśniły się moje myśli :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2015, o 02:04 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

mokrowski napisał(a):

Tu wystarczy sam układ nadawania szeregowego. Nie potrzeba żadnego dodatkowego timera. Nikt przecież nie broni zmienić format ramki nadawania wlocie i nadawać same stany wysokie lub niskie :-) Nawet można się zastanowić czy nietypowy format (nie 8N2), nie będzie wygodniejszy. ,,Przepołowienie bajtu" (że tak ujmę kolokwialnie) może skutkować zrzuceniem na sprzęt większej części pracy i zostawi więcej mocy obliczeniowej w samym MCU (np. nadanie początku bez bitów stopu, areszty z bitami stopu). Ale to już zostawiam pytającemu :-) Myślę że sam do tego dojdzie :-)


Do mi głowy nie przyszło, że przecież można zmieniać format danych i prędkość transmisji w locie, cenna wskazówka :-). Ale w tym konkretnym przypadku jakoś tak mi się wydaje, że te "nietypowe" BREAK i MAB prościej wysłać generując zbocza niż "przenicowywać" w locie UARTA, co kto lubi :-).

P.S. No dobra @mokrowski, BREAK to co najmniej 88us , z kolei MAB to 8 us - ni jak nie mogę wykombinować jak prosto wysłać tą sekwencję UARTEM. Powiedzmy, że MAB to 1 bit stopu ( mniejsza o szybkość transmisji ), a przy takim założeniu wcześniej musimy wysłać 11 bitów ( BREAK ) pierwsze "0" - to bit startu, potrzebujemy jeszcze 10 bitów "0" - to se ne da pane Habranek :-). No chyba, że tak dobierzemy prędkość transmisji, że te 88 us to będzie 8n0 ( czyli 9 bitów ( licząc z bitem startu, bez bitu parzystości i bez bitu stopu ), ale wtedy MAB to już chyba lepiej zrobić programowo albo timerem ( bo to raptem 8 us ). Napisz proszę , jak Ty to widzisz.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2015, o 10:32 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Udało mi się zrobić to na timerach, wszystko śmiga jak należy :) .
mokrowski napisał(a):
(np. nadanie początku bez bitów stopu, areszty z bitami stopu)

Jest możliwe wysyłanie bez bitów stopu? Z tego co wiem musi być chociaż 1 bit stopu?

_________________
http://elektropanel.pl



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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