22-08-2019, 00:17
Długo pisałem tamtego posta, widzę, że @Robson Kerman odpowiedział. Ale wg mnie SerialEvent nie jest tak ściśle powiązany z przerwaniami, to bardziej element loop. Dlatego go można dodać do loop jak w przykładzie z Leonardo i działa tak samo.
Funkcję do przerwań UART musiałbyś szukać dużo głębiej w core Arduino. Przerwanie od UART RX ma zwykle do zrobienia tylko przeniesienie 1 znaku z FIFO do bufora kołowego, przestawienie wskaźnika. TX przepisanie jednego znaku do FIFO i przestawienie wskaźnika w buforze nadawczym. Wg mnie nie ma potrzeby w tym mieszać.
Ile trwa impuls jest nieistotne, jeśli jest ładne zbocze to po prostu ustawiasz na rosnące lub opadające i przerwanie wywoływane jest dokładnie raz, nie na czas trwania impulsu tylko na czas zrobienia "zmienna++". Problemem mogłoby być to, że wchodzisz w obsługę innego przerwania i w tym czasie stuka 2 razy impuls (czy tam więcej). O tym informacja zostanie utracona. Jeśli coś takiego możesz mieć to stosujesz wejście licznika i ono sobie zliczy niezależnie od kodu programu wszystkie impulsy. Wg mnie przy 16MHz można zliczyć do paru tysięcy impulsów przerwaniem INT, im więcej masz przerwań w programie tym większe prawdopodobieństwo, że coś umknie, więc mają być krótkie i do najważniejszych rzeczy.
Funkcję do przerwań UART musiałbyś szukać dużo głębiej w core Arduino. Przerwanie od UART RX ma zwykle do zrobienia tylko przeniesienie 1 znaku z FIFO do bufora kołowego, przestawienie wskaźnika. TX przepisanie jednego znaku do FIFO i przestawienie wskaźnika w buforze nadawczym. Wg mnie nie ma potrzeby w tym mieszać.
Ile trwa impuls jest nieistotne, jeśli jest ładne zbocze to po prostu ustawiasz na rosnące lub opadające i przerwanie wywoływane jest dokładnie raz, nie na czas trwania impulsu tylko na czas zrobienia "zmienna++". Problemem mogłoby być to, że wchodzisz w obsługę innego przerwania i w tym czasie stuka 2 razy impuls (czy tam więcej). O tym informacja zostanie utracona. Jeśli coś takiego możesz mieć to stosujesz wejście licznika i ono sobie zliczy niezależnie od kodu programu wszystkie impulsy. Wg mnie przy 16MHz można zliczyć do paru tysięcy impulsów przerwaniem INT, im więcej masz przerwań w programie tym większe prawdopodobieństwo, że coś umknie, więc mają być krótkie i do najważniejszych rzeczy.
Miło być decenianym https://buycoffee.to/kaczakat