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



Teraz jest 10 sty 2025, o 21:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 33 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 5 sty 2016, o 21:48 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Cześć koledzy i koleżanki.
Chciałbym przejść do migania diodą ale już na przerwaniach bez delay.

Lepiej wybrac CTC czy Normal?

Mam Atmega32. W BB jest opis timer0 i tam OCR ma 2^8 pamięci i przy 8 000 000MHz niestety nie zamigam dla 2Hz. Czy jak użyję timer1 to będę miał OCR 2^16?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 21:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 208
Lokalizacja: Kraków
Pomógł: 16

Dla trybu CTC łatwiej wyliczyć wartość rejestru OCRx no i nie trzeba pamiętać o załadowaniu wartości rejestru przeładowania.
Gdy użyjesz timera 16 bitowego osiągniesz częstotliwość przerwania na poziomie 2[Hz].


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 22:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 48
Pomógł: 2

Witam,

jeśli chodzi o tryb to zdecydowanie wybrałbym CTC (bardziej intuicyjne) w Xmegach już tak to zrobiono że CTC jest trybem podstawowym.

Przy 8MHz zamigasz diodą z częstotliwością 2Hz tylko musisz zmieniać stan diody co x przerwań.
W timerze 16 bitowym masz 16bitowe rejestry OCR, dokładnie OCR1A i OCR1B.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 22:23 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Yhm na razie zrobię to na 16 bitowym i wstawię kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 22:59 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Cytuj:
Wprowadź sobie do przerwania kolejne zmienne uint8_t, które napędzać będą kolejne, a te kolejne kolejne.


A typy 16-; 32-; czy nawet 64 bitowe to wycofali w najnowszym toolchainie czy jak, że musimy tak sobie utrudniać życie? Po coś je w końcu wprowadzono.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 13:19 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

krafin napisał(a):
Cytuj:
Wprowadź sobie do przerwania kolejne zmienne uint8_t, które napędzać będą kolejne, a te kolejne kolejne.


A typy 16-; 32-; czy nawet 64 bitowe to wycofali w najnowszym toolchainie czy jak, że musimy tak sobie utrudniać życie? Po coś je w końcu wprowadzono.


Moim zdaniem to co kolega wyżej napisał jest ciekawe ponieważ czasami brak wolnego timera i jakoś wyjdziemy z opresji.
Rozumiem, że jak używam 16bitowego to więcej flashu zajmuje?

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


Napisałem żeby migało z 2Hz ale nie miga. Ja przerwanie rozumiem tak, że gdy wystąpi taka liczba w TCCRB1 jak w OCR to uruchomi się przerwanie od głównego programu. Więc najpierw piszę program co ma robić a potem przerwanie i w nawiasach {} przerwania co wystąpi jak timer zliczy te 15624 impulsów, bo potem ma polecenie na wywołania przerwania:
TIMSK |= (1<<OCIE1B).

Nie chce kopiować gotowych rozwiązań tylko samemu próbować żeby to zrozumieć.
Gdzie popełniam błąd?



Ostatnio edytowano 6 sty 2016, o 13:52 przez elektronikq, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 13:40 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Umieściłeś przerwanie w ciele funkcji "main".
Ono powinno być raczej po za nim.


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 13:53 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Wstawiałem i poza nią. Czyli do przerwania muszę stworzyć nową funkcję?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 14:01 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Nie tworzysz funkcji do obsługi przerwania. Po prostu wektor przerwania który masz teraz w "main" przenosisz po za "main".


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 14:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

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

Wywal to z maina jak mówi Marcin_G.
Po prostu umieść to na końcu.
I to właśnie będzie funkcja obsługi przerwania. Jak przerwanie nastąpi, to program automatycznie wykona tą funkcję.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 14:38 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Przed chwilą wrzuciłem Twój kod do procka, i w takiej jak Ty masz postaci dioda cały czas świeci.
Jednak jak dokonałem drobnych zmian, miga :)
Zmiany są następujące:

OCR1B na OCR1A
OCIE1B na OCIE1A
ISR(TIMER1_COMPA_vect)

Z pętli głównej też wyrzuć załączanie diody. Zostaw ją pustą.

No i teraz niech ktoś mądrzejszy napisze dlaczego nie działa wektor B. Kilka razy już się z tym problemem spotkałem, ale zawsze w sytuacji gdy miałem już uruchomiony wektor A, i tłumaczyłem to sobie tym że pewnie mam coś źle z czasami poustawiane i wchodzą sobie w paradę. No a że timerów w AVR-ach sporo, a moje projekty "zabawkowe" to załączałem inny :)


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 15:31 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Żeby ustawić CTC musiałem ustawić 1 w WGM12. A ten jest w rejestrze TCCR1B. Więc myślałem, że trzeba używać rejestrów porównania OCR1B a nie A.
Pozmieniałem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dioda świeci cały czas.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 15:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 lip 2014
Posty: 30
Pomógł: 2

Ponieważ w pętli while() cały czas robisz PORTC &= ~(1<<PC7). Co z tego, że Timer będzie zamieniał stan portu z częstotliwością 2 Hz, jak uC będzie to robił z częstotliwością kilkaset tysięcy Hz. Funkcje main() zrób raczej tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 16:06 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

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


Dlaczego bez: while(1) to nie działa? I dlaczego jak było użyte OCR1B, OCIE1B i
ISR(TIMER1_COMPB_vect) to nie działało?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 16:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27343
Lokalizacja: Szczecin
Pomógł: 1041

Cytuj:
Dlaczego bez: while(1) to nie działa?

Polecam ci na prawdę zacząć od książki bo tam masz wszystko .... http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

dlaczego nie działa? .... a jak chcesz żeby działało ? skoro nie ma pętli głównej która jest PODSTAWĄ DZIAŁANIA KAŻDEGO projektu w C ? Bez niej ... mówisz prockowi - zrób po kolei to co napisałem w main() i zakończ całkowicie działanie programu. I procek to grzecznie wykonuje - nawet przerwania wyłącza. Teraz jaśniej ?


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 16:34 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

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


I teraz miga mi dioda podłączona PC0 a PC7 świeci się cały czas. Bo zrozumiałem to tak, że program główny się wykonuje i jak następuje przerwanie to program główny co się z nim dzieje? Jest zatrzymywany czy wykonuje się cały czas a do tego jeszcze przerwanie się wykonują.
Na końcu funkcji nie ma informacji o wyłączeniu przerwań i tej procedury zakończenia.
Czyli funkcje zostaje zrealizowana tylko raz i kończy swoje działanie. Natomiast jeśli jest pętla to ciało funkcji jest wykonywane cały czas czy tylko raz potem dochodzi do pętli while(1) i pętla cały czas się wykonuje więc funkcja nigdy się nie skończy?
A jak byśmy mieli:
x=1
while (x<9)
to pętla wykona się 8 razy i funkcja zakończy swoje działanie?
Nie bardzo rozumiałem to while(1) {}
bo w nawiasach pętli nie było nic jak taka pętla działa? Po prostu jej zadanie to niedopuszczenie funkcji aby się skończyła? Bo pętla nic w sobie nie ma ale funkcja widzie, że pętla jest nieskończona i funkcja nie dojdzie do końca?

Dlaczego z OCIE1B i OCR1B nie działało?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 17:09 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Jak nie masz żadnej książki pod ręką, to poszukaj w sieci o pętli "while". Po krótce, zapis "while(1)" oznacza pętlę nieskończoną, jakbyś wpisał "while(0)" to pętla nigdy by się nie wykonała, jedynka to "prawda", zero to "fałsz". Pętla główna "while(1)" jest właśnie po to, aby program działał tak jak to zaplanowaliśmy i wykonywał zadania w nieskończoność ;) . Oczywiście nic nie stoi na przeszkodzie żeby tworzyć warunki z użyciem pętli "while", pytanie tylko czy to ma sens gdy chodzi o pętlę główną programu, bo jak warunek osiągnie swoją graniczną wartość to pozostaje reset procka.

Osobiście polecam Mirka niebieską książkę. Naprawdę, prościej zasad działania AVR-ów i samego C nie da się chyba wytłumaczyć. Jak dla mnie "Blue Book" jest mistrzostwem, jeśli chodzi o wytłumaczenie podstaw języka C na AVR, ale i nie tylko na AVR-y.


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2016, o 19:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

elektronikq napisał(a):
Dlaczego z OCIE1B i OCR1B nie działało?

Bo wartość w OCR1A musi być większa niż OCR1B. Było już kilka razy o tym na forum
topic7416.html#p84379
topic4162.html


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 19:07 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

A czy trudne jest zrobienie aby np. po spełnieniu warunku lub naciśnięcia przycisku program odczekał 10 sek i uruchomił przerwanie? W kodzie przerwania muszę to określić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 19:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Może rozwiń jak dokładnie program ma zadziałać. Jaki przycisk, jaki warunek, jakie przerwanie?
Chodzi Ci o to, że po naciśnięciu przycisku rusza timer odliczający 10 sek, który po osiągnięciu odpowiedniej wartości wygeneruje przerwanie?
Czyli naciśnięcie przycisku i po 10 sek przerwanie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 20:55 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Chcę zrobić taki licznik. Program się wykonuje. I ja wciskam przycisk lub spełnione zostanie jakieś wyrażenie i odliczone zostaje 10 sek i zostaje włączona np. lampka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 22:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

np. dla atmegi32 z zegarem 11,0592MHz ustawianie timera co 1ms wygląda tak:

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


potem tak zliczasz impulsy z przerwań i liczysz czas (timer programowy):

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


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


do tego obsługa przycisku - polecam poradniki Mirka LINK.

Przykład nie jest wprost, postaraj się dopasować to do swojego taktowania. Na dziś już nie mam siły myśleć, żeby dokładniej Ci podać. Spróbuj, na pewno wiele Ci to da, jak samodzielnie do czegoś dojdziesz ;)


Autor postu otrzymał pochwałę


Ostatnio edytowano 13 sty 2016, o 07:41 przez zoom, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 22:18 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Dziękuje wszystkim za wkład w ten temat.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co oznacza nRF_RX_EVENT() ? Czy ja mogę sobie od tak pisać timer100ms? Jaki to timer? Mniej więcej idee rozumiem ale ten program raczej nie wykonuje tego co bym chciał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2016, o 08:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Sorry, wlazło z innego projektu, zapomniałem wykasować.

Generalnie po wciśnięciu przycisku (spróbuj to opanować z tekstem o przyciskach na blogu Mirka) ustaw sobie jakąś flagę.

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


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


No i na końcu za funkcją main obsługa przerwania, o którym była mowa:

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


To taka moja ogólna wizja, zarys. Mam nadzieję, że nie zrobiłem jakiegoś strasznego babola, jakby co może ktoś bardziej doświadczony się odezwie.
W tym momencie po wciśnięciu przycisku czekam, aż dziesięć razy wykona się zliczenie 1000ms.
Po tym czasie wykonuje się jakaś Twoja funkcja.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2016, o 23:01 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

U mnie przerwanie raz na 1. Rozumiem, że przerwanie raz na sekundę mi wyzeruje zmienną timer1000ms bo jest dekrementacja? Czy przerwanie 1 raz na sekundę będzie za wolne? Raz na sekundę będzie mi z 1000 odliczać w dół czyli 999, 998, 997 etc. Dlaczego kolega dał 1000 w tej zmiennej?


Cytuj:
jeśli przycisk był wciśnięty i minie sekunda czyli timer 1000 razy odliczy 1ms

Czyli mam ustawić 1000 razy na sekundę?

I zmienna timer która ma wartość 10 to ona za szybko nie zjedzie do wartości 0? Pytam, ponieważ, pętla while wykonuje się szybko.

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


Jesli chodzi o resetowanie timera to chyba się resetuje na 0 jakieś bity? Wiem, że mogę użyć timera 8 bitowego ale chodzi bardziej o składnie.
Jeśli w main napiszę key=10; to z automatu jest to zmienna int? czyli ten zapis równoważy się int key=10;?

Dlaczego kolega użył uint16_t?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2016, o 23:54 
Offline
Użytkownik

Dołączył(a): 02 maja 2015
Posty: 100
Lokalizacja: Malbork
Pomógł: 12

zoom napisał(a):
Dlaczego kolega użył uint16_t?

Zmienna
zoom napisał(a):
timer1000ms=1000;
przekracza zakres zmiennej 8 bitowej(255 jeżeli jest unsigned) dlatego musi byś zadeklarowana jako uint16_t. To samo dotyczy się liczników. Zmienna musi pomieścić zakres zliczania w danym liczniku. Po przekroczeniu zakresu zaczyna liczyć od 0 więc jeżeli użyjesz uitn8_t zamiast 16_t licznik nie będzie działał tak jak należy.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2016, o 20:39 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Zrobiłem to troszkę inaczej ale działa tak jak chciałem i zrobiłem to ze zrozumieniem. W ogóle jaka radocha jak to się rozumie aż chce się iść dalej.

Mam 2 pytania jeszcze:

Jeśli wpiszę TCCR1A &= ~(CS10|CS11|CS12); to wyzeruje te bity i zatrzymam timer?
I czy mogę uruchomić dwa przerwania z jednego timera?
Chodzi o to, że mam TCCR1A i TCCR1B? Użyć muszę dwóch rejestrów OCR1A i OCR1B przy tym OCR1A>OCR1B, to pewnie i dwóch OCIE a z zezwoleniem na przerwanie też 2xTIMSK? A ile trzeba przerwań do kodu wstawić? Chodzi mi o polecenie: ISR ()



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2016, o 21:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

To, że procek ma rejestry TCCR1A i TCCR1B nie ma nic wspólnego z rejestrami OCR1A i OCR1B. To nie jest tak, że TCCR1A jest od OCR1A a TCCR1B od OCR1B.

W tym temacie troszkę na ten temat napisałem topic14342.html#p152082

W trybie CTC możesz uruchomić przerwanie Compare Match A i Compare Match B. Tylko, że obydwa przerwania będą się wywoływać z tą samą częstotliwością i jeśli wartości w OCR1A i OCR1B będą różne, to przerwania będą przesunięte względem siebie.

------------------------ [ Dodano po: 40 minutach ]

Aby pokazać o co chodzi z tym przesunięciem napisałem prościutki program
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przerwania wywoływane co ok. 100ms (taktowanie 16MHz)

OCR1B = 50%OCR1A
Obrazek

OCR1B = 25%OCR1A
Obrazek

OCR1B = 75%OCR1A
Obrazek


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2016, o 23:31 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

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

Jedno przerwanie od OCR1A a drugie przerwanie od OCR1B? Jedno np. może się wykonać 1 raz / 1 s a drugie 1 raz / 4 sek?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2016, o 23:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Wcześniej napisałem, że obydwa będą się wykonywać z tą samą częstotliwością. Jeśli przerwanie CompA będzie się wykonywać raz na sekundę to przerwanie CompB też będzie się wykonywać raz na sekundę.

Widać to nawet na zrzutach ekranu, które wkleiłem. Obydwa przebiegi mają taka samą długość.



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: 33 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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