• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Jak ustawić funkcje czasu wyjścia na określony i off
#21
(06-07-2019, 10:50)Robson Kerman napisał(a): Znowuż zmieniając preskaler zegara, trzeba pamiętać, że to Arduino i użytkownik nie ma wpływu na pracę innych peryferiów poustawianych przez producenta tegoż urządzenia.
Nie "tegoż urządzenia" tylko "tegoż badziewia".
Jedynym pozytywem Arduino, jest to, że Mirek K. zyskuje coraz mniej klientów.

(06-07-2019, 10:50)Robson Kerman napisał(a): A te nie synchronizują się z zegarem, tylko patrzą na millis,
które są co ok1ms zamiast dokładnie co 1ms. To jest dopiero chore. Domyślam się, że przerwania od przepełnienia a nie porównania, są dlatego, aby bez problemu uruchomić inne funkcje timera 0 np PWM. Czy jednak, nie lepiej było, użyć uC z większa ilością timerów a przy okazji większa ilością RAM?

(06-07-2019, 10:50)Robson Kerman napisał(a): nie wiem po co.
W każdym razie pewnie coś popsujemy i przestanie działać jakiś wyświetlacz, albo komunikacja Smile
Pewnie USART ale można w sofcie zmienić mu UBRR.
Problem millis można rozwiązać ustawiając przerwania od porównania T0 ustawione na 128. Wektor IRQ skierować na procedurę IRQ od OVR. GCC ma nawet taki bajer jak alias dla wektorów IRQ.

Mamy więc znów sytuację, da się ale trzeba się nakombinować aby zrealizować coś, co w normalnym przypadku zajmuje kilka linijek kodu.
Arduino nadaje się do pomigania ledem, sprawdzania czy LCD lub inny układ peryferyjny działa i to wszystko. Aby zbudować funkcjonalne urządzenie, trzeba zapomnieć o Arduino, jego beznadziejnym IDE bez debugera, beznadziejnych bibliotekach i najczęściej beznadziejnej konstrukcji..

(06-07-2019, 10:50)Robson Kerman napisał(a): Często się zastanawiam, dla czego Arduino ma tylu zwolenników, skoro pracując normalnie na rejestrach w normalnym IDE powyższe zadanie można zrobić szybciej, przyjemniej i bez stresu (z browarkiem w ręku)?
Podobnie jest z HAL na STM32, jest proste. Arduino, może używać nawet debil, leń a tych nie brakuje. Niestety, aby zrobić coś poważniejszego, ani HAL a tym bardziej Arduino nie wystarczy, trzeba "jeździć" po rejestrach.
 
Odpowiedź
#22
No dobra skoro tak już się rozpisaliście, może palnę głupotę ale co powiecie na timer programowy? Nazywa się Ticker?? gorszy czy lepszy?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#23
(06-07-2019, 12:16)Jarewa0606 napisał(a): No dobra skoro tak już się rozpisaliście, może palnę głupotę ale co powiecie na timer programowy? Nazywa się Ticker?? gorszy czy lepszy?
Gorszy ale ju z pisałem
Cytat:Prościej, skuteczniej, użyć przerwań od timera, bo w tym przypadku, sprzętowe sterowanie wyjścia timerem, to przerost formy nad treścią.
Timer programowy też wystarczy bo w tym przypadku, jakaś super precyzja odmierzanych czasów nie jest potrzebna.
 
Odpowiedź
#24
No wiem ze pisałes w poruwnaniu z sprzętowym ale ta biblioteka jest lepsza od funkcji millis()? czy to na jedno kopyto?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#25
(06-07-2019, 12:43)Jarewa0606 napisał(a): No wiem ze pisałes w poruwnaniu z sprzętowym ale ta biblioteka jest lepsza od funkcji millis()? czy to na jedno kopyto?
Mogę porównać ale pokaż źródła tej biblioteki.
 
Odpowiedź
#26
Ticker jest namillisach i microsach.
Jak już szukać rozwiązania w dostępnych bibliotekach, to proponuję taką korzystającą z przerwań. Np. https://github.com/devalfrz/TimerOne
Przerobiłem kod Brendego na powyższej bibliotece i nawet nieźle działa.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#27
(06-07-2019, 13:55)Robson Kerman napisał(a): Ticker jest namillisach i microsach.
Potwierdzam, bo znalazłem https://github.com/sstaub/Ticker/blob/master/Ticker.cpp

(06-07-2019, 13:55)Robson Kerman napisał(a): Jak już szukać rozwiązania w dostępnych bibliotekach, to proponuję taką korzystającą z przerwań. Np. https://github.com/devalfrz/TimerOne
Tez miałem zaproponować timerOne. Pozwolę sobie na mały wywód na jej temat i AVR.
TimerOne zabiera jedyny zaawansowany timer i to nie tylko w Mega328. Większość AVRmega, nawet jak ma 4 czy 6 timerów, to tylko Timer1 jest 16-bit, pozostałe 8-bit. Tylko nieliczne AVR, np Mega1281 mają więcej timerów 16-bit.
Co robi tak naprawdę TimerOne? Oto jej kod: https://github.com/PaulStoffregen/TimerO...merOne.cpp
Jeśli przerwania, mają wykonywać się co ok 1ms, wystarczy uruchomić przerwania od porównania timera0. Dostępne są takie dwa przerwania. Daje to możliwość generowania przerwań co ok 500us. Jeśli potrzeba częściej, można zrobić np tak:
Kod:
ISR(TIMER0_COMPA_vect)
{
byte t = OCR0A;
  if( t <= 0x40) OCR0A = 0x80;
  else if ( t <= 0x80) OCR0A = 0xC0;
  else if ( t <= 0xC0) OCR0A = 0xFE;
  else OCR0A = 2;
  Timer0.isrCallback();
}
Co spowoduje generowanie przerwać co ok 250us. Podobnie można generować przerwania z inną częstotliwością. Należy unikać przerwania przy wartości max i min bo przy zmianie z FF na 0 jest generowane przerwanie OVR.

Jak wiec widzicie panowie, wszystko w Arduino jest spie...
Ticker to zabawka, nakładka na millis, niczym Windows 3.xx, który z systemem operacyjnym nie ma wiele wspólnego, tak jak Arduino z IDE a AVR z uC.

Nawet proste zadania ciężko na Arduino realizować, używając bibliotek Arduino zwłaszcza z AVR.
Wymagania użytkowników rosną. Kiedyś wystarczyło aby zegarek wyświetlał czas, teraz ma się synchronizować z NTP i odtwarzać MP3, a AVR jest do tego za słaby.


Jak patrzę teraz na AVR z punktu widzenia ARM, to wygląda on jak kiedyś 8051 z punktu widzenia AVR.
Technika idzie do przodu i trzeba się do tego dostosować.

Choć potrafię wiele wycisnąć z AVR :
- http://avt.4ra.pl/viewtopic.php?id=12
- http://avt.4ra.pl/viewtopic.php?id=2
to wymaga to dużego nakładu pracy, więc po co się męczyć, jak wszystkie te zadania łatwiej, co ważne TANIEJ, zrealizować na nowoczesnych uC.?
 
Odpowiedź
#28
No to co wstawiłeś to widzę że na mils, ale mam tu przykłady z ESP i nie za bardzo kumam

https://github.com/esp8266/Arduino/blob/...Ticker.cpp
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#29
(06-07-2019, 17:05)Jarewa0606 napisał(a): No to co wstawiłeś to widzę że na mils, ale mam tu przykłady z ESP i nie za bardzo kumam
Na ESP softu nie piszę.
 
Odpowiedź
#30
(06-07-2019, 17:05)Jarewa0606 napisał(a): No to co wstawiłeś to widzę że na mils, ale mam tu przykłady z ESP i nie za bardzo kumam

Bo ta biblioteka, z Twojego linku, korzysta z os_api, a dokładnie z funkcji os_timer, która nomen omen działa jak micros (lub korzysta z ogólnie pojętych dobrodziejstw Arduino i im podobnym). Ale nie sprawdzałem, bo mi się nie chciało
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości