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



Teraz jest 26 sty 2025, o 08:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 21 sty 2016, o 14:42 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

Witam uprzejmie, potrzebuję zacząć projekt korzystający z programowego pwm. Poniżej dotychczasowy kod :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oraz plik z funkcjami :

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


Trzeci plik jest jedynie z definicjami, nie ma chyba potrzeby żeby go wrzucać.
Oczekiwałem pwm na zdefiniowanych wyprowadzeniach zależnie od parametrów pwm_x

Kwarc 16MHz, wszystko jest ustawione ok (sprawdziłem wprowadzając do pętli main prosty _delay i załączanie diod)

Niestety diody nie świecą się tak jakbym tego oczekiwał a dzieje się tak :
[youtube]https://youtu.be/ht5-GLB_gWc[/youtube]

Jest ktoś skłonny wyłapać błąd ?



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

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

Masz za małą częstotliwość PWM-a - 16000000/256(preskaler)/131(256-125) daje częstotliwość występowania przerwań równą ok. 477Hz. W przerwaniu zmienna cnt liczy od zera do 255. Częstotliwość PWM będzie równa 477Hz/256 czyli ok. 1,8Hz.

Aby sprawdzić to co napisałem zmniejsz preskaler. Zwiększy to częstotliwość występowania przerwań a tym samym częstotliwość PWM. Możesz również skrócić cykl zliczania zmiennej cnt.



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

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Jeśli ustawiłeś tryb normal to w przerwaniu musisz znowu napisać to: TCNT0 = 125; druga sprawa to taka, że bibliteki w nawiasach ostrych inkludujemy na samym górze, a w cudzysłowach pod nimi i jeszcze masz zbyt małą częstotliwość wykonywania przerwania więc to też popraw.(ja nie poprawiłem tej częstotliwości)
Kod powinien 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.

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: 21 sty 2016, o 16:17 
Offline
Użytkownik
Avatar użytkownika

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

Teraz zauważyłem, że w przerwaniu nie ładujesz do TCNT0 początkowej wartości równej 125. To sprawia, że tylko pierwsze przerwanie wystąpi po odliczeniu 131 impulsów. Każde następne przerwanie wystąpi po odliczeniu 256 impulsów. Co jeszcze zmniejszy częstotliwość.

Tryb Overflow to nie CTC. Tu trzeba w przerwaniu ustawiać początkową wartość licznika TCNT0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2016, o 16:23 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

TCNT0 to pozostałość po innych próbach, usunąłem z przerwania ale nie z funkcji init(),mój błąd , to ma i tak wpływ tylko na pierwszy cykl. Sam tryb overflow jest dla mnie wystarczający i jednocześnie jest najprostszy.

TCCR0 |=(1<<CS01)|(1<<CS00); //prescaler 64
Na 'oko' diody mrugają jedynie 2 razy szybciej
Przy konfiguracji :
TCCR0 |=(1<<CS01); //prescaler 8
Diody mrugają bardzo szybko ale nie widać charakterystycznego dla pwm przyciemnienia.



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

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Napisz jaki masz procek.Zrób tak wydaje mi się, że to będzie działać:
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 2 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