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



Teraz jest 28 lut 2025, o 19:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 15 lut 2017, o 22:06 
Offline
Nowy

Dołączył(a): 12 lut 2017
Posty: 24
Lokalizacja: Warszawa
Pomógł: 0

Witam,
jestem tu całkiem nowym użytkownikiem, to jest mój pierwszy post, nigdy wcześniej nie programowałem AVR a ostatnia moja styczność z językiem C miała miejsce 15 lat temu w czasie studiów (na platformie Sun Spark) więc proszę o wyrozumiałość i nie zjedzenie mnie od razu.

Wracając do meritum, będę w pewnym układzie wykorzystywał ATmega8515 z zewnętrznym kwarcem 16MHz, będzie on komputerem pokładowym do motocykla, będzie wykonywał różne czynności, jedną z nich będzie "prostackie" miganie lampami udające "koguta" policyjnego.

Z racji tego iż wykorzystałem praktycznie wszystkie porty (pozostał wolny PE0..2) na wszelkiego rodzaju czujniki, sygnalizacje, sterowanie wyświetlaczem etc. nie mogę wypuścić sygnału PWM na zewnątrz procesora poprzez ustawienie bitów COM1A1 oraz COM1A0, więc muszę do tego celu użyć innych portów uzależniając ich wyjście zależnie od stanu dwóch zmiennych "kierunek" oraz "status"

Kod jaki napisałem wraz z komentarzami chyba wszystko wyjaśniającymi prezentuje poniżej, z przyzwyczajeń starych używam typu char zamiast uint8_t
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pytania są następujące:
1. czy można przerobić ten kod w ten sposób, że nie będzie potrzeba używać zmiennej "statut" tylko odczytywać z jakiegoś rejestru stan, który przy innych ustawieniach COM1A1 oraz COM1A0 byłby wysyłany na zewnątrz procesora poprzez odpowiedni pin OC1A (PD5)
2. czy ten kod obsługi przerwań w ogóle ma sens, czy powinienem użyć innych zdarzeń aby poprawnie to oprogramować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 23:06 
Offline
Użytkownik
Avatar użytkownika

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

Nie wiem czy to ja źle rozumiem Twój tok rozumowania, czy Ty nie do końca rozumiesz jak działa timer w trybie FastPWM...
Timer skonfigurowałeś w tryb FastPWM który może generować sygnał PWM tylko na dedykowanych pinach procesora. Dla timera1 który wybrałeś mogą być generowane dwa takie niezależne przebiegi PWM jeden na pinie PD5(OC1A), a drugi na pinie PE2(OC1B). Oczywiście jeśli sygnał ma być generowany trzeba pin ustawić jako wyjście.
Szerokością impulsu PWM sterujesz wpisując do odpowiednich rejestrów(OCR1A oraz OCR1B) liczbę która jest stale porównywana z licznikiem timera. W momencie gdy licznik zaczyna liczyć od "0" na wyjściu jest ustawiana 1 (lub zero w zależności od ustawienia) a w momencie gdy licznik zliczy do wartości która jest wpisana do rejestru stan jest zmieniany na przeciwny. Gdy licznik się przekręci czyli zacznie znowu od zera znów stan wraca na 1 i cykl się powtarza.
Z tego co pisałeś pin PE2 masz wolny tak więc bez problemu możesz wykorzystać go do wyprowadzenia pojedynczego sygnału PWM...
No chyba że chodzi Ci o coś zupełnie innego a ja źle zrozumiałem - to musiał byś dokładniej opisać co ma robić i kiedy ten "komputer"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2017, o 23:27 
Offline
Nowy

Dołączył(a): 12 lut 2017
Posty: 24
Lokalizacja: Warszawa
Pomógł: 0

xentis napisał(a):
No chyba że chodzi Ci o coś zupełnie innego a ja źle zrozumiałem - to musiał byś dokładniej opisać co ma robić i kiedy ten "komputer"

No właśnie chodzi o zupełnie co innego, to, że przy odpowiednim ustawieniu rejestru wyjściowego oraz rejestrów COMxx sygnał otrzymam na wyprowadzeniu procesora to wiem, w przypadku trybu 14 z tego co wyczytałem, chyba, że ja źle zrozumiałem licznik nie zlicza do wartości 0xFFFF tylko do wartości wpisanej do ICR1 jako wartość TOP.
xentis napisał(a):
Timer skonfigurowałeś w tryb FastPWM który może generować sygnał PWM tylko na dedykowanych pinach procesora
To nie można korzystać z przerwań od tego typu PWM a tylko jedynie wypuścić go na port?, z noty katalogowej i opisu w internecie jakie znalazłem wywnioskowałem, że można korzystać z przerwań.

Generalnie chodzi o to, czy w jakimś rejestrze jest przechowywana wartość, która przy innej konfiguracji była by wystawana na port (czyli wartość 1 lub 0) tak aby można było ją wykorzystać w kodzie programu zamiast wprowadzać dodatkową zmienną, której wartość ustawiam przerwaniem.

Jeśli dobrze zrozumiałem informacje, które czytałem, jeśli bym wystawił to na PE2 (poprzez odpowiednią konfigurację rejestru kierunku DDRE oraz rejestru TCCR1A oczywiście) to nawet jeśli bym tam nic nie podłączył sprzętowo to mógłbym z rejestru portu PORTE odczytać czy jest tam 1 czy 0 poprzez PORTE &= (1<<PE2) - całość oczywiście przy wykorzystaniu drugiego kanału PWM w tym timerze (ustawiana wartość poprzez OCR1B a nie OCR1A)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2017, o 10:49 
Offline
Użytkownik
Avatar użytkownika

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

studi napisał(a):
chyba, że ja źle zrozumiałem licznik nie zlicza do wartości 0xFFFF tylko do wartości wpisanej do ICR1 jako wartość TOP.

Licznik zlicza do przepełnienia.
Co do przerwań to nigdy tego nie sprawdzałem ale wydaje mi się że powinny działać pomimo trybu FastPWM.

studi napisał(a):
to mógłbym z rejestru portu PORTE odczytać czy jest tam 1 czy 0 poprzez PORTE &= (1<<PE2)
jeśli już to PORTE & (1<<PE2) ale generalnie tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2017, o 18:19 
Offline
Nowy

Dołączył(a): 12 lut 2017
Posty: 24
Lokalizacja: Warszawa
Pomógł: 0

Czy ktoś jeszcze chciałby coś do tematu dodać, jakoś wesprzeć ?



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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