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



Teraz jest 8 lut 2025, o 15:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 28 wrz 2017, o 14:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 cze 2016
Posty: 40
Lokalizacja: Łódź
Pomógł: 1

Witam.
Procek atmega 328p, 16mHz.
Uruchamiam timer1 z takimi ustawieniami:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Problem polega na tym że na wyjściu OC1A działa prawidłowo tylko wtedy gdy pin PB0(ICP1) jest w stanie wysokim. Nie ma znaczenia czy jest wejściem czy wyjściem.
Przy stanie niskim na PB0 wyjście OC1A generuje tylko szpilki od kilkudziesięciu mikrosekund do kilkudziesięciu nanosekund.
Natomiast wyjście OC1B działa prawidłowo.
Próbowałem wszelkich ustawień timera i przekopałem datasheet. Niestety nie dałem rady rozwiązać problemu.
Czy da się jakoś wyłączyć to ICP? Czy to ja znowu robię jakiś błąd?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2017, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1033
Lokalizacja: Trójmiasto
Pomógł: 190

Coś masz namieszane (w połączeniach bądź w programie). W trybie fast PWM, pin ICP nie wpływa na działanie kanałów PWM generowanych przez licznik.
Licznik zlicza od zera do 0x03FF, stan licznika jest stale porównywany z rejestrami OCR1A i OCR1B i w zależności od wyniku porównania wyjścia OC1A i OC1B są odpowiednio ustawiane. Pin ICP może jedynie spowodować przechwycenie aktualnej wartości licznika do rejestru ICR1.

------------------------ [ Dodano po: 32 minutach ]

Przed chwilą zrobiłem test i jest tak jak pisałem - stan pinu PB0 nie wpływa na stan pinu OC1A oraz OC1B podczas generowania PWM-u na tych pinach, a konfigurację timera1 wkleiłem twoją.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2017, o 20:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 cze 2016
Posty: 40
Lokalizacja: Łódź
Pomógł: 1

Właśnie rozwiązałem problem... Na pinie PB0 miałem wyłączenie PWM, a na pinie PD7 włączenie. Przez pomyłkę zamiast zablokować 3 dolne bity w digital input DIDR0 wpisałem te bity
do DIDR1 i zablokowałem digital input na komparatorach. Czyli na PD7. W związku z tym PD7 był zawsze czytany jako LOW (przycisk wciśnięty) I to powodowało wariacje PWM.
Człowiek uczy się na błędach, tyle że najlepiej na czyichś :)
Dopiero się uczę programowania aczkolwiek dobrze mi idzie(i tej wersji się będę trzymał ;) hi hi)
Dzięki za pomoc i pozdrawiam..
Ps Uczcie się na moich błędach ;)



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

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