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



Teraz jest 18 gru 2024, o 11:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 11 kwi 2014, o 17:40 
Offline
Użytkownik

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

Witam, mam problem z konfiguracją timera 1 do trybu CTC. Mam kod, którego zadaniem jest po prostu sterowanie silnikiem krokowym, tak by się po prostu kręcił.
Kod bazowany na programie z niebieskiej książki, tylko że tu mam Atmega8 i muszę zastosować niestety do tego celu Timer1.

Megę podpiąłem oczywiście przez ULN2003 z silnikiem i efekt mizerny bo pewnie skopałem ustawienia timera. Oczywiście korzystałem z noty katalogowej (widać niezbyt dokładnie ;) ).

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: 11 kwi 2014, o 17:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Efekt mizerny tzn co sie dzieje? Timer wydaje się dobrze ustawiony.

Próbowałeś użyć Timera2 ?

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 procedurę przerwania zmieniasz na:

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



Ostatnio edytowano 11 kwi 2014, o 17:58 przez Atmegowiec, łącznie edytowano 1 raz

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

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

Tzn silnik ani drgnie. Próbowałem dopisać przy inicjalizacji Timera taką część :

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


I podpiąłem diodę do PB1. Niestety nie mignęła nawet. Coś musiałem pokopać z tym Timerem :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 18:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

dioda nie drgnie, bo jeśli podłączasz anodą to brakuje jeszcze wstawienia na PB1 "1" .

Wstaw włączanie diody do przerwania i zobacz czy świeci.
Mirek fajnie to w ostatnim poradniku pokazywał.

I właśnie wogole jak masz tą deklaracje PORT_INI to masz same ustawianie kierunku na wyjscia. Sterujesz "0" ze nie ustawiasz portu na 1 ?

Zerknij do książki bo widzę ze jednak czegoś Ci w kodzie brakuje w porównaniu do tego co w BB.



Ostatnio edytowano 11 kwi 2014, o 18:08 przez Atmegowiec, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 18:07 
Offline
Użytkownik

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

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


Świeci się cały czas (ale to chyba dobrze bo taki PWM się jakby robi ?). Więc nie wiem gdzie leży problem ?



Ostatnio edytowano 11 kwi 2014, o 18:08 przez lubieplacki, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 18:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Dioda miga, tylko tak szybko ze jest złudzenie świecenia cały czas. To znaczy ze timer jest ustawiony.
Jak już wywołujesz zadeklarowaną wcześniej funkcje to po co dodajesz słówko "void" motor()? wywal to

O Mistral już mnie wyprzedził.



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

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

Działa jak normalnie napisałem :
DDRD |= 0xff;
Nie wiem czemu to:
# define PORT_INI DDRD |= T1 | T2 | T3 | T4

mi nie działało ?

Dzięki ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 18:22 
Offline
Użytkownik

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

A to nie działa tak, że jak preprocesor napotka na moje PORT_INI to wstwia w jego miejsce DDRD |= (T1 | T2 | T3 | T4) ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2014, o 18:29 
Offline
Użytkownik

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

Dzięki za rady i pomoc. Działa też z tym moim cudem PORT_INI. Po prostu błąd tkwił w tym void motor(void) chyba, bo tylko to zmieniłem a i jeszcze volatile bez typu swoje dołożyło. Tylko dziwię się, czemu kompilator na to volatile nie zareagował ?
Jeszcze raz dzięki. Temat uważam za zamknięty.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2014, o 09:25 
Offline
Użytkownik

Dołączył(a): 19 mar 2014
Posty: 64
Pomógł: 0

Mistral napisał(a):
Masz ustawione w kompilatorze, że wywala każdy byle błąd? (opcja -Wall)

Nie mogłem znaleźć tej opcji (używam jeszcze Programmers Notepad), ale w takim razie pewnie nie mam jej ustawionej (jeśli takowa w tym programie się znajduje). ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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