Skocz do zawartości

Czy serial.print działa jak delay?


Rayu85

Pomocna odpowiedź

buchbuch potwierdziłeś moje przypuszczenia co do samej idei tego rozwiązania ale nadal nie bardzo rozumiem jak to działa "od kuchni".

Jeśli dobrze rozumiem wyświetlacz podłączamy do naszego dodatkowego kontrolera np.ATtiny25 (w dalszej części będę używać tej nazwy w rozumieniu dodatkowego kontrolera).

A ten podłączamy do głównego kontrolera np. Arduino.

1. Rozumiem że ATtiny25 musi zostać zaprogramowany osobnym programem przez programator USB?

2. Czy nasz ATtiny25 zostaje zaprogramowany do nasłuchiwania i wyświetlania komend w sposób "uniwersalny" czy każda zmiana głównego programu wymaga zmiany również w programie ATtiny25?

3. W jaki sposób wydawane są komendy w programie na głównym kontrolerze? mam tu na myśli skąd np. Arduino wie że ma nie przetwarzać danych komend tylko przesłać je dalej do ATtiny25?

Mam wrażenie, że dla mnie jest jeszcze za wcześnie na ten wątek, z jednej strony bardzo mnie zainteresował a z drugiej czuję że brakuje mi jeszcze wiedzy żeby do tego usiąść a nie chcę zadawać sterty pytań o rzeczy "oczywiste".

deshipu Jestem świadom, że są gotowe moduły, które można za małe pieniądze kupić i nie głowić się jak to zrobić samemu, ale jednak moim głównym celem jaki sobie postawiłem jest zrozumienie tego wszystkiego. A niestety zakup gotowego modułu, niewiele daje wiedzy na temat tego jak sam moduł funkcjonuje i jest zbudowany 🙂

Zakup gotowca jest świetny jak wiemy jak to działa i jak jest zbudowane ale chcemy oszczędzić sobie czasu, pieniędzy i zachodu na robienie tego samemu lub gdy chcemy po prostu osiągnąć cel i nie interesuje nas co dzieję się w środku 😉

Niestety to jest moja mała wada wrodzona, że posiadam uczulenie na gotowce 😋

Choć coraz lepiej sobie radzę z korzystaniem z gotowych rozwiązań🙂

Link do komentarza
Share on other sites

Odpowiadając po kolei:

ad 1: Tak, każdy procek musi być zaprogramowany programatorem. Twoje arduino też było tylko kupiłeś już zaprogramowane (bootloader inside 😉 ) jak się nauczysz to napiszesz sobie lepszy albo stwierdzisz, że to nie ma sensu. Jeśli jeszcze nie masz takiego programatora to polecam kupić choćby najtańszy (USBasp) - na pewno się przyda.

ad 2: To zależy jak napiszesz taki program, najlepiej napisać tak żeby nie trzeba było czyli piszesz raz a działa cały czas i może jeszcze koledze uda się go sprzedać 😉 . ATtiny25 to tylko przykład można śmiało wykorzystać attiny2313 lub atmegę8 albo coś tym podobnego i obejdzie się bez ekspandera (attiny 13, attiny25 mają po 8 odnóży). ale sam ekspander to interesująca zabawka 😃

ad 3: Sprowadza się to do wybrania danego urządzenia pinem CS i skopiowania zmiennej do rejestru SPI. np:

SPDR = twoja_zmienna;

i poszło. SPI działa bardzo szybko więc nawet nie zauważysz tytułowego delay bo czekaniem na dogadanie się z wyświetlaczem zajmie się jego sterownik. W gotowym programie może to wyglądać np. tak:

spi.lcd.komenda(twoja_zmienna);
spi.lcd.napis("napis do wyswietlenia");
...
uint32_t probka_ADC;
probka_ADC = spi.24_bitowe_ADC(channel_1);
spi.lcd.dane(probka_ADC);
spi.lcd.dane(spi.24_bitowe_ADC(channel_2));

do SPI i I2C można podłączyć wiele różnych urządzeń i używać ich po kolei wedle uznania.

Arduino od strony programowej całe działa jak "delay" dlatego go nie lubię ale jest wiele zastosowań w których to nie przeszkadza. Osobiście używam płytek arduino ale nie korzystam z bootloadera i bibliotek domyślnych.

Link do komentarza
Share on other sites

Jestem świadom, że są gotowe moduły, które można za małe pieniądze kupić i nie głowić się jak to zrobić samemu, ale jednak moim głównym celem jaki sobie postawiłem jest zrozumienie tego wszystkiego. A niestety zakup gotowego modułu, niewiele daje wiedzy na temat tego jak sam moduł funkcjonuje i jest zbudowany

Zakup takiej wiedzy nie daje. Tą wiedzę daje lektura jego noty katalogowej, która jest dostępna także bez zakupu.

Link do komentarza
Share on other sites

Dwie rzeczy: rozróżniłbym gotowce zawierające lub wykonujące jakieś ukryte i skomplikowane działania, np. moduł GSM (to może przegięcie) albo "skomputeryzowany" (sprocesorowany?) sterownik silnika BLDC bo zakup takiego modułu i jego użycie kompletnie niczego nie uczy ani o sieci komórkowej ani o algorytmach komutacji faz, od gotowców typu znakowy wyświetlacz LCD z I2C gdzie mamy prosty jak drut ekspander I2C a zrozumienie idei działania tego to 30 sekund lub dwa zdania pomocy na Forum 🙂 Tak więc w sprawie korzystania z gotowych rozwiązań: oszczędzają czas a jeśli naprawdę lubisz wiedzieć co i jak, wybierz taki moduł o którym wszystko wiadomo. Większość - szczególnie tych prostych - taka jest. Dokumentacje są podlinkowane już w sklepach a w razie wątpliwości - pytaj.

A druga sprawa to sam wyświetlacz w systemie. Jeśli musimy korzystać z drugiego procesora do wykonywania prostych operacji na znakowym LCD to znaczy, że nie umiemy projektować i pisać programów. Częstym błędem jest wyświetlanie czegoś tak często jak wynika to np. z pętli obliczeniowej. Np. jeśli przetwarzamy próbki audio lub inne pomiary to nie musimy z częstotliwością 8kHz wypisywać czegoś na LCD bo tak jest łatwiej, tylko robimy osobny proces wypisujący info np. tylko gdy coś się zmienia lub 5 razy na sekundę - wystarczy. To samo w przypadku oparcia jakiegoś timingu systemowago na opóźnieniach i/lub generalnie na czasie wykonywania jakichś funkcji - to błąd. Jeśli komunikacja jest oparta na sprzęcie (SPI, I2C, UART) to można korzystać z jego przerwań, ale nawet jeśli nie (przypadek znakowego LCD podłączonego równolegle) to można tak rozłożyć operacje zapisu w czasie by nie przeszkadzały w czymś bardzo krytycznym a niepodziewanym. Przykład: robimy "ekran" w pamięci RAM a wszystkie funkcje typu print() piszą znaki tylko do niego. Taka operacja trwa tyle co dostęp do tablicy więc dobrze poniżej 1us. W przerwaniu od zegara systemowego (i tak zawsze takie coś jest w nietrywialnym programie) wysyłamy za każdym razem jeden znak do LCD. To wydłuża obsługę przerwana o 1us ale powoduje, że nie żadne operacje nie kumulują się w czasie. Teraz wystarczy, by zegar systemowy pracował np. na 500Hz a mamy wysyłanie całego ekranu 2x16 znaków ponad 15 razy/s "za darmo", w niewidzialny dla programu głównego sposób. Co więcej, robiąc to inteligentnie od razu mamy mruganie całych pól (wystarczy wskazać które znaki mają mrugać np. podczas edycji itp). Tak więc: projekt przede wszystkim, ocena procesów pod względem krytyczności ich wykonania, zajmowanego czasu, ich priorytety.. Proces obsługi wyświetlacza jest zwykle na szarym końcu i na prawdę nie przeszkadza reszcie. Dużo gorzej jest z graficznymi z uwagi na ilość przesyłanej informacji, ale to już zupełnie inny problem 🙂

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

Fajnie się czyta rozmowy fachowców ale Marek1707 jakbyś mógł, najlepiej na prostym przykładzie wyjaśnić to zdanie początkującym:

"Przykład: robimy "ekran" w pamięci RAM a wszystkie funkcje typu print() piszą znaki tylko do niego. Taka operacja trwa tyle co dostęp do tablicy więc dobrze poniżej 1us. W przerwaniu od zegara systemowego (i tak zawsze takie coś jest w nietrywialnym programie) wysyłamy za każdym razem jeden znak do LCD."

Jeśli da radę, z góry dziękuję 😃

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.