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



Teraz jest 23 gru 2024, o 19:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 
Autor Wiadomość
PostNapisane: 14 maja 2014, o 15:40 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 15:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Napisz co to za procesor. Poza tym, nie wiem jak to jest w arduino, ale w C funkcja cli(); właśnie wyłącza przerwanie. Zamiast cli(); napisz sei(); i zobacz, czy wtedy przerwanie się wykona.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:03 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

To procesor z arduino leonardo. Cli(); wyłącza wiem. Jeste na początku dany. Przed vectorem timera jest sei();.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Wyrzuć to cli(); to po pierwsze. Po drugie napisz z którego timera korzystasz, bo inicjujesz timer1 a procedurę obsługi przerwania masz dla timer2. Rozumiem, że procesor, to atmega32?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:09 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

ATmega32u4 - taki procesor.
cli(); wyłączyłem.

timer1 jest załączony jak widać. timer2 to tylko tekst na niego podstawie miał być napisany ten kod - to część kodu z innego procesora



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Takie pytanko. Jak ma działać timer2 jak nie jest zainicjowany? :shock:

Spróbuj wpisać to jako incjalizacja:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:22 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

error: 'TCCR2B' was not declared in this scope

jak to chce zainicjalizować to wyskakuje brak deklaracji xd



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Nie dziwię się, bo takiego rejestru nie ma w tym µC. Wpisz to co ja Ci podałem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:27 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

wpisałem ten kod co dałes i dalej to samo brak deklaracji



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Pokaż cały kod i to co Ci wyskakuje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:34 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
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.


Kod:
sketch_may14a.ino: In function 'void setup()':
sketch_may14a:41: error: 'OCR2' was not declared in this scope
sketch_may14a:42: error: 'TCCR2' was not declared in this scope
sketch_may14a:42: error: 'WGM21' was not declared in this scope
sketch_may14a:43: error: 'CS21' was not declared in this scope
sketch_may14a:43: error: 'CS22' was not declared in this scope
sketch_may14a:44: error: 'TIMSK' was not declared in this scope
sketch_may14a:44: error: 'OCIE2' was not declared in this scope



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Zmyliło mnie Twoje wywoływanie obsługi przerwania. Zagłębiłem się bardziej w notkę i wygląda na to, że Atmega32u4 nie posiada timer2. Wybierz sonie jakiś inny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:46 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

Już znalazłem w nocie timer0, timer1, timer3 oraz timer4 - wybieram timer1

Jak to ustawić teraz?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 16:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Timer0, Timer1, Timer3, Timer4.

Wpisz to i zobacz.

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



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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 17:05 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

Błąd kompilacji:

Servo\Servo.cpp.o: In function `__vector_17':
C:\Program Files (x86)\Arduino\libraries\Servo/Servo.cpp:103: multiple definition of `__vector_17'
sketch_may14a.cpp.o:C:\Program Files (x86)\Arduino/sketch_may14a.ino:63: first defined here

Teraz takie coś wyskakuje.

Tak jakby ten vector był zajęty przez serwo tak? może timer3 ? chyba że się mylę z tym



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 17:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Jeszcze jedno na jakim timerze masz zrealizowane PWM?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 17:11 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

Po zmienieniu COMPA tego vectora na OVF kompiluje.
Może na COMPB zmienić ? musi być COMP ? na COMPB też kompiluje.

dservo jest podpięte do pinu13 w arduino.



Ostatnio edytowano 14 maja 2014, o 17:14 przez daniel89, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 17:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Cytuj:
musi być COMP ?


Nie musi. Przecież Ty o tym decydujesz w jakim trybie ma działać timer. Jeżeli kompiluje to podłącz układ i zobacz, czy przerwanie działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 17:17 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

do obsługi pwm w tym pojeździe jest użyty mostek h - l293dne i z niego wyjścia enable czyli pwm są podpięte pod pin 6 oraz 11 w Arduino.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 maja 2014, o 23:16 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
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.


Czemu mi nie działa tak jak powinno przerwanie . Ustawiam na przeróżne wartości w OCR1B i ciągle jest to samo miga co 3 sekundy na 3 sekundy. Gdy wyrzucę zerowanie TCCR1A = 0; to miga co 0,1 sekundy i też mimo modyfikacji w OCR1B dalej jest to samo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2014, o 20:17 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

W trybie CTC Timerx liczy do OCRxA.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2014, o 23:24 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

Nic to nie dało dalej jest co 3 sekundy na 3 sekundy. Ustawiłem OCRxB nie A gdyż A było zajęte przez vector__17 z biblioteki servo.h. Zmieniałem wartość OCR1A na dowolnie inną , liczyłem z drugiego wzoru tj. (Mhz/prescaler *2/ 2) - 1 ; gdzie 2 to Wartość 1Hz, czyli 1 sekunda i tak było dalej co 3 sekundy na 3 sekundy - nic nie daje zmiana tej wartości.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2014, o 14:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Taktowanie, to wewnętrzny oscylator, czy zewnętrzny rezonator? Jeżeli to drugie, to czy zmieniałeś fusebity?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2014, o 18:35 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

Taktowanie to zewnętrzny rezonator kwarcowy ustawiony na 16MHz. To jest płytka gotowa startowa Arduino z wgranym bootloaderem. Żadnych fusbitów nie zmieniałem . Tutaj masz ustawienia :
Kod:
leonardo.name=Arduino Leonardo
leonardo.upload.protocol=avr109
leonardo.upload.maximum_size=28672
leonardo.upload.speed=57600
leonardo.upload.disable_flushing=true
leonardo.bootloader.low_fuses=0xff
leonardo.bootloader.high_fuses=0xd8
leonardo.bootloader.extended_fuses=0xcb
leonardo.bootloader.path=caterina
leonardo.bootloader.file=Caterina-Leonardo.hex
leonardo.bootloader.unlock_bits=0x3F
leonardo.bootloader.lock_bits=0x2F
leonardo.build.mcu=atmega32u4
leonardo.build.f_cpu=16000000L
leonardo.build.vid=0x2341
leonardo.build.pid=0x8036
leonardo.build.core=arduino
leonardo.build.variant=leonardo




Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2014, o 19:03 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Podsumowując:
- nie możesz używać przerwania TIMER1_COMPA_vect, czyli vector__17, bo jest zajęte przez bibliotekę obsługującą serwomechanizmy i tym samym nie możesz używać trybu CTC dla Timera 1
- Timera 2 nie ma

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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2014, o 19:52 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 27
Pomógł: 0

Co do timer 1 - compA było zajęte przez vector__17 ale compB można było ustawić. Zmieniłem na timer 3 compA i dalej mimo modyfikacji dioda miga co 3 sekundy na 3 sekundy



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: 26 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO