Skocz do zawartości

Oryginalność mikrokontrolerów AVR z Chin


Sabre

Pomocna odpowiedź

Elvis, podoba mi się Twoje spojrzenie. Gdybym nie miał zastrzeżeń co do zupełnej bezbronności procesora na losowe przerwania od przycisku, pomysł z przełączaniem nieskończonych zadań za pomocą przerwania rzeczywiście uznałbym za fajny. Niestety, ponieważ trzeba na zewnątrz wypracować porządny sygnał z pojedynczym zboczem a wszelka ciekawsza obsługa przycisku (np. autopowtarzanie zmian efektów) byłaby trudna nie mówiąc już o dalszej rozbudowie grafu przejść interfejsu użytkownika, pomysł moim zdaniem pozostaje jedynie ciekawostką. Oczywiście wciąż przy założeniu przemyślanej i poprawnej realizacji. Ale idea ma swój urok na który na pewno bym nie wpadł 🙂

nse: "Na moment obsługi LED'ów wystarczy zablokować przerwania"

To właśnie nazywam sekcją krytyczną i przecież właśnie to postulowałem.

Link do komentarza
Share on other sites

nse, kolejny Twój post z kąśliwą uwagą pod moim adresem, a nie związany z meritum tematu skończy się ostrzeżeniem. Nie będę bezczynnie się przyglądał Twoim postom.

kolega "Sabre" nie ma pojęcia o assemblerze i źle reaguje na wskazywane błędy w napisanym przez siebie kodzie

No proszę Cię, nie wskazałeś ani jednego błędu w kodzie, nie napisałeś też jego poprawnej wersji, takiej, której działanie byłoby identyczne z obecnym.

Tak sobie gdybam, mam nadzieje że kolega nie jest tak wrażliwy jak Sabere ??

Proszę Cię żebyś nie przeginał i trzymał się meritum.

Ostatni raz przypomnę Wam wszystkim. Tu już nie chodzi o obsługę pilota czy przycisku. Chodzi o to, że po problemach wziąłem działający kod, którego używam w lampkach choinkowych i wgrałem go do 2 mikrokontrolerów z Chin i na nich nie działa poprawnie. Dlatego powstał ten wątek. Muszą być jakieś różnice pomiędzy tymi mikrokontrolerami skoro na jednym można wduszać przycisk i wywołując przerwanie zmieniać efekty a na drugim po dojściu do przedostatniego efektu mikrokontroler przestaje reagować na kolejne przerwania. O tym miał być ten wątek, a to co wyszło przy okazji to już jest inna kwestia.

Link do komentarza
Share on other sites

Sabre, bez urazy, ale czy Ty czytasz wszystkie nasze posty czy tylko ostatni pod którym dopisujesz swój? Może nie warto w takim razie pisać? Przecież dostałeś kilka przykładów programów które mogą działać inaczej w zależności od tego na którą sztukę zostaną wgrane i musiałeś zrozumieć, że takie możliwości istnieją bez uciekania się do awarii procesorów. Napisz choć słowo co o tym myślisz, bo teraz powstaje wrażenie jakbyś tego w ogóle nie przeczytał. Co ja mam myśleć czytając Twój powyższy post? Że olewasz to co piszę bo ważniejsze są przepychanki z nse?

A dalsza dyskusja jest bardzo fajna - doceń to, jak Elvis docenił co (moim zdaniem nieświadomie) zrobiłeś. Pomijam nieuzasadnione osobiste wycieczki - też można się zjeżyć. Spoko. To cenny wątek i ciekawe wnioski.

Link do komentarza
Share on other sites

nse

Adres powrotu z przerwania nie ma znaczenia, ponieważ program z przerwania nie wraca - nie używa instrukcji RETI, więc resetu też nie będzie.

To po co stosować przerwanie ?

Jak ktoś chce być "artystą" to niech maluje obrazy pisze wiersze i zda się na ocenę odbiorców swoich dzieł, a i w sztuce obowiązują pewne zasady.

https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf

w podanej dokumentacji jasno wynika że są ścisłe wymagania czasowe dotyczące obsługi tych Ledów, a kolega "S" swoją erystykę niech sobie wsadzi.

Administratorów proszę o usunięcie mojego konta z tego portalu, nie będę się wkurzał nad pseudo artystami !

Dziękuję wszystkim za uwagę 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

marek1707, czytam każdy post, Ty jako jedyny napisałeś o takiej możliwości. Dla mnie jest to bardziej niż dziwne, że 2/2 a nawet 3/3 mikrokontrolery pochodzenia chińskiego zachowywują się inaczej niż jeden kupiony u nas. Wierzcie mi, że post nie powstałby gdyby nie wgranie kodu od lampek na arduino mini, arduino uno i mikrokontroler z Chin.

Z obsługą pilota poradziłem sobie przez dopisanie "nosave" jeszcze przed tym gdy ktokolwiek o tym napisał. Tak naprawdę ani ja ani nikt inny do końca nie wie co robi kompilator Bascoma i jak interpretuje takie właśnie rzeczy. Nie jestem programistą 24/7, robię to hobbystycznie i jak do tej pory moja znajomość Bascoma w zupełności mi wystarczała do pisania przeróżnych programów. Wiadomo, każdy się cały czas uczy czegoś nowego, ja również. Dlatego nie zamknąłem się na fakt, że kod jest napisany niepoprawnie, czy niezgodnie ze sztuką. To są lampki choinkowe, które działają tak jak chciałem. Podświetlenie szafki sterowane z pilota, które również już działa tak jak chciałem. Mimo to, chcę ten program poprawić tak, aby był napisany zgodnie ze sztuką, ale aby działał tak jak ja tego chcę, a nie bo tak będzie poprawnie. Napisałem, że wieczorem usiądę do płytki i wprowadzę uwagi Elvisa i zdam relację. Potem przepiszę obsługę przerwania a podprogramy przerzucę do pętli warunkowych w głównej pętli. A co do obsługi przycisku przez przerwania, cały świat tak robi i nie słyszałem żeby to był błąd.

A mój post wyżej tyczył się głównie zachowania nse.

Link do komentarza
Share on other sites

Panowie, spokojnie - mamy wreszcie bardzo ciekawy i zaawansowany temat, szkoda popsuć go przez niepotrzebne emocje.

Oczywiście program można napisać na wiele sposobów. Sabre wybrał bardzo oryginalny. W pierwszej chwili też zareagowałem jak większość. Jednak może dlatego że ostatnio sam piszę podobne rzeczy, zaczynam dostrzegać głęboko ukryte piękno tego rozwiązania.

Przerwanie jest potrzebne, żeby po pierwsze szybko reagować na zdarzenie, ale najważniejszym chyba plusem jest uproszczenie kodu. W przypadku polling-u musielibyśmy co chwila sprawdzać stan wejścia, a tak piszemy prosty kod / zadanie, a jeśli się trzeba będzie przełączyć zrobi to za nas "system".

Link do komentarza
Share on other sites

"To po co stosować przerwanie ?"

Powiem Ci po co:

Bo w koncepcji wymyślonej przez Sabre a dopracowanej przez Elvisa przerwanie jest sprzętowym wymuszaczem wyjścia z nieskończonej funkcji efektowej i wejścia do schedulera przełączającego efekty. Nie musisz niczego podczytywać z portów. Jedyną ceną jest niestandardowe podejście i właśnie konieczność restartowania stosu po każdym przerwaniu. Plus brak możliwości zrobienia czegoś bardziej skomplikowanego, ale w tym dokładnie urządzeniu nie jest to wielką wadą. Teraz rozumiesz? Ma to swój urok. Żaby to zobaczyć, wystarczy wyjść poza swoją strefę komfortu. Do prawdziwej sztuki programowania jeszcze daleko (i chyba nie w tę stronę), ale pomysł ciekawy.

EDIT: Sabre: Chciałem żebyś zrozumiał, że stany pamięci i rejestrów po włączeniu nie są kompletnie losowe tylko w dużym stopniu przywiązane do sztuki układu lub nawet całej ich partii technologicznej. Wzorce jedynek i zer powtarzają się bo to zależy od wielu czynników wspólnych dla danej partii. Akurat Tobie zdarzyło się tak, że "nasze" działają a "chińskie" nie. Jeśli kupisz jeszcze w innym sklepie, z innym identyfikatorem partii/daty produkcji będzie tak lub tak. Nie ma reguły. Nie twierdzę, że zachowanie Twojego programu jest zależne od nieinicjalizowanej zmiennej ale to, że błędy tego rodzaju mogą być związane ze sztuką/partią scalaka. Popracuj trochę nad kodem, sprawdź jak to jest ze stosem a uzbrojony w taką wiedzę prześledź dokładnie zachowanie programu. Możesz robić np. zrzuty przez UART całego RAMu. Mając mapę pamięci z kompilatora będziesz widział gdzie masz zmienne a gdzie stos. Możesz na początku kodu wyzerować cały dostępny RAM (jednak bez rejestrów) i oglądać jak stos go pożera. Co się wtedy stanie zależy od tego jak kompilator poprzydzielał pamięć na zmienne, które z nich są obecnie używane i jakim adresem powrotu (przypadkowym jak przypadkowy jest czas wciśnięcia przycisku względem wykonywania kodu) efektowego stos je zamaże.

Link do komentarza
Share on other sites

Panowie, spokojnie - mamy wreszcie bardzo ciekawy i zaawansowany temat, szkoda popsuć go przez niepotrzebne emocje.

Oczywiście program można napisać na wiele sposobów. Sabre wybrał bardzo oryginalny. W pierwszej chwili też zareagowałem jak większość. Jednak może dlatego że ostatnio sam piszę podobne rzeczy, zaczynam dostrzegać głęboko ukryte piękno tego rozwiązania.

Przerwanie jest potrzebne, żeby po pierwsze szybko reagować na zdarzenie, ale najważniejszym chyba plusem jest uproszczenie kodu. W przypadku polling-u musielibyśmy co chwila sprawdzać stan wejścia, a tak piszemy prosty kod / zadanie, a jeśli się trzeba będzie przełączyć zrobi to za nas "system".

Tak tylko że z kontekstu wynika że to przerwanie jest wywołane tylko raz, cała reszta działa już w wywołanym przerwaniu w zamkniętej pętli, Panowie czy nie widzicie że to jest bez sensu ? Najpierw trzeba prawidłowo napisać obsługę tych diod tak by funkcja je obsługująca spełniła kryteria czasowe !

Ja mam dość obrażać się nie pozwolę, mam swoje lata i wzamian za chęć pomocy, otrzymuje jakieś tanie erystyczne chwyty. Przykro mi ale źle się tu czuję 🙁

Dlatego wszystkich grzecznie teraz żegnam 🙂

Link do komentarza
Share on other sites

nse, nie obrażaj się i nie poddawaj tak łatwo. Nie do końca zrozumiałeś sztuczkę z przerwaniami. Przerwanie wywoływane jest wiele razy, tylko jego obsługa jest nietypowa. Nie ma w tym nic złego, o ile oczywiście jest zaimplementowanie poprawnie. Jądro praktycznie każdego systemu operacyjnego robi takie sztuczki - omawiany przykład daje więc okazję do poznania jak coś takiego się pisze.

Link do komentarza
Share on other sites

nse, nie czytasz moich postów albo masz problem ze zrozumieniem ich. Tak się składa, że z obsługą WS2812B nie mam problemu a kod do obsługi jest napisany właśnie w asemblerze (nie jestem jego autorem) ze względu na jak to nazwałeś krytyczne czasy obsługi. Kod ten działa i za każdym razem wyświetla to co ja chcę żeby się wyświetlało.

Link do komentarza
Share on other sites

nse, nie obrażaj się i nie poddawaj tak łatwo. Nie do końca zrozumiałeś sztuczkę z przerwaniami. Przerwanie wywoływane jest wiele razy, tylko jego obsługa jest nietypowa. Nie ma w tym nic złego, o ile oczywiście jest zaimplementowanie poprawnie. Jądro praktycznie każdego systemu operacyjnego robi takie sztuczki - omawiany przykład daje więc okazję do poznania jak coś takiego się pisze.

Ok, to na spokojnie i dużymi literami tak by mój tępy umysł pojął, po co z AVR'a robić DeepBlue , skoro ten program można napisać bez takich wymyślnych sztuczek ??

Link do komentarza
Share on other sites

@Sabre co do rzekomych różnic pomiędzy procesorami z TME i z Chin, może spróbuj wgrać na ten działający procesor swój kod jeszcze raz i przetestuj dokładnie...

Ehh, czy to co coś zmieni? Skoro na odwrót nie działa, wgrałbym dokładnie ten sam kod, który wgrywałem do arduino mini, uno i na płytkę testową z propoxa, do której jest włożony Atmega328P z Chin. I co rozumiesz pod pojęciem dokładnego testowania? Za każdym razem robię dokładny test.

Ok, to na spokojnie i dużymi literami tak by mój tępy umysł pojął, po co z AVR'a robić DeepBlue , skoro ten program można napisać bez takich wymyślnych sztuczek ??

To powiedz proszę na spokojnie, jak zrobić to równie szybką obsługą naciśnięcia przycisku i przeskoku do innego efektu jak za pomocą obsługi skoku z przerwania.

Link do komentarza
Share on other sites

Ja nie twierdzę, że ten program jest napisany w najlepszy, czy jedyny możliwy sposób. Chodzi o to, że daje dobrą okazję na poznanie innych możliwości niż najczęściej spotykane.

W tym konkretynym przypadku mamy pewien problem - aplikacja czasem działa, czasem nie. Warto spróbować znaleźć przyczynę, chociażby dla własnej satysfakcji.

Dla mnie temat jest o tyle ciekawy, że ostatnio sporo programuję na poziomie jądra systemu, więc zabawa z manipulacją stosu to zwykły dzień pracy.

Link do komentarza
Share on other sites

@Sabre co do rzekomych różnic pomiędzy procesorami z TME i z Chin, może spróbuj wgrać na ten działający procesor swój kod jeszcze raz i przetestuj dokładnie...

Ehh, czy to co coś zmieni? Skoro na odwrót nie działa, wgrałbym dokładnie ten sam kod, który wgrywałem do arduino mini, uno i na płytkę testową z propoxa, do której jest włożony Atmega328P z Chin. I co rozumiesz pod pojęciem dokładnego testowania? Za każdym razem robię dokładny test.

Jak wygląda użycie zasobów przez program (flash, ram)?

Bo jeśli jest to problem ze stosem a te chińskie atmegi328 tylko udają że mają 2 kB SRAMu to program się zawiesza po 40 razach zamiast po np. 500.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.