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



Teraz jest 27 wrz 2024, o 14:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 41 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 17 lut 2017, o 00:03 
Offline
Użytkownik
Avatar użytkownika

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

Jarosław J napisał(a):
Kurcze. Sam już nie wiem. Wydaje mi się że jest wszystko w porządku.


Moim zdaniem nie

policz jak często kasujesz wszystko ?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 00:07 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Wszystko kasuję przy każdym wejściu do przerwania - czyli 500 razy na sekundę. Zaraz potem zaświecam kolejną cyfrę i czekam do następnego przerwania. Jak powinno być Twoim zdaniem?



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

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

Jarosław J napisał(a):
Wszystko kasuję przy każdym wejściu do przerwania - czyli 500 razy na sekundę.


czyli 500 x na 1 sekundę gasisz wyświetlacz

Jarosław J napisał(a):
Zaraz potem zaświecam kolejną cyfrę i czekam do następnego przerwania. Jak powinno być Twoim zdaniem?


a zapalasz cyfrę 1 x na 500 ticków timera

teraz pomyśl jak to działa?

Częściej się nie świeci niż świeci?
Dobrze to rozumie czy się mylę?


Dlatego też jak dasz cli i sei w ws2812b to widzisz jak wyświetlacz głupieje

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 13:12 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Cytuj:
Częściej się nie świeci niż świeci?
Dobrze to rozumie czy się mylę?



Nie wiem jak kolega to rozumie, ale wyświetlacz działa poprawnie. Gasi cyfrę tylko na początku funkcji przerwania bo musi. Zaraz potem zapala kolejną cyfrę i ona tak się świeci do następnego przerwania - tak więc ma właściwą moc, nie mruga i działa poprawnie.

Cytuj:
Dlatego też jak dasz cli i sei w ws2812b to widzisz jak wyświetlacz głupieje

Nie napisałem że wyświetlacz głupieje tylko taśma chaotycznie się przesuwa, kiedy wyłączam przerwania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 13:15 
Offline
Użytkownik

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

A w jakim celu masz w przerwaniu taki warunek?
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 tracisz jeden obieg licznika i to tak jakbyś miał mniejszą częstotliwość odświeżania.
Nie musisz wyłączać i katod i anod na wyświetlaczu.
Skoro są ze wspólną anodą to wystarczy, że wyłączysz anody.
Wtedy na wyświetlaczu już nic się nie będzie wyświetlać.
Potem w if'ach ustawiasz nową wartość na katodach i na końcu if'a zapalasz odpowiedni wyświetlacz.
Znów zyskujesz cenne takty pracy procesora.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 13:43 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Faktycznie musiałem dodać jeszcze jeden przebieg pusty na początku bo coś eksperymentowałem, a później zapomniałem o tym. Skutkowało to tylko ominięciem jednego przerwania natomiast nie zmieniło to nic w czasie trwania tego przerwania. Usunąłem wyłączanie katod i też działa. Zaoszczędziłem trochę czasu ale nie rozwiązało to problemu. Taśma nadal losowo zapala piksele.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 14:45 
Offline
Użytkownik
Avatar użytkownika

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

U mnie też przerwanie powodowało losowe zapalanie
poradziłem sobie wyłączając przerwanie na czas wysłania komendy ws2812_asm_send

Poradziłem sobie z tym w poniżeszj funkcji wstawiłem cli i sei

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


i nie dość, że działa uart i pozostałe rzeczy bez problemu to i ledy świecą tak jak chce.
Powyższe komendy ASM są dla 16.000.000 więc możesz spokojnie to skopiować i wkleić u siebie bo może tutaj masz babola ? Tego nie wiem nie analizowałem ale sprawdzić nie zaszkodzi.

Ponadto nie mam pojęcia po co aż tak katujesz timer w sensie wstawiasz mu tyle linii większość z tych rzeczy możesz wyprowadzić do pętli while i działanie ich uzależnić od timera.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 16:55 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

majster - wkleiłem Twój kod i moc nie dało. Poniżej na filmie efekty. Chyba się poddam i dam drugi procesor na tę taśmę bo pomysły mi się skończyły. Taśma na tym samym kodzie bez przerwań (test na arduino ) - chodzi dobrze




Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 21:30 
Offline
Użytkownik
Avatar użytkownika

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

Mnie to wygląda, że w lib od 1-Wire lum przy samej funkcji odczytu temperatury masz spore delay.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2017, o 22:27 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Też tak pomyślałem. Wywaliłem z pętli głównej konwersję i wyświetlanie temperatury, i nic nie dało. W tych samych konfiguracjach - te same błędy.

Jeszcze spróbuję odchudzić program tak, żeby wyłącznie używał wyświetlacza i funkcji asm. Potem po kolei będę włączał bloki i zobaczymy który da awarię. Ale to już jutro Nie mam dziś już chęci.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2017, o 18:53 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Zmieniłem kwarc na 20MHz, bez efektu.

porobiłem różnego rodzaju pułapki programowe - jedyny wniosek jaki wyciągam to tyle, że nie daje rady obsłużyć jednocześnie przerwań i funkcji assemblerowej.

Kiedy w pętli głównej wywołuję funkcję "ws281x_asm_send(pasek, WS_LED_CNT, WS_PIN);" bez wyłączenia przerwań - na pasku mam sieczkę - Logiczne bo pewnie kolejne przerwania generują opóźnienia i system nie działa Kiedy to robię z cli() i sei() na wstawkę assemblerową - mruga mi wyświetlacz - też logiczne, bo jak wyłączam przerwania, to wyświetlacz staje.

Obsługa w przerwaniu, w dodatkowej - wirtualnej pozycji wyświetlacza - daje wynik identyczny jak powyżej.

Zanim się poddam, chce jeszcze dopytać:
Czy jest możliwość, żeby obsługę wysyłania danych na pasek obsłużyć bez NOPów - jakąś flagą?
Czy można tu zastosować jakąś funkcję typu INLINE albo Atomic Block? Czy coś to da? Nie mam praktyki w stosowaniu takich rozwiązań, nie wiem jak je stosować.

Jeśli macie jakieś pomysły - dajcie znać.



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

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