Kol. sq8dsr dzięki za odpowiedź i cenne wskazówki.
sq8dsr napisał(a):
Można, to obliczenie zwykłej matematycznej proporcji. Używając ADC w 10 bitowej rozdzielczości masz 1024 dyskretne stany reprezentujące położenie potencjometru. Czyli masz liczbę z przedziału od 0 do 1023, Te liczbę trzeba przeskalować proporcjonalnie w zakres np. od 200 do 512 i te liczbę wpisywać do rejestru OCR1A/B.
To świetna informacja dla mnie. A jednak da się przez odpowiedni wpis w rejestrze OCR1A/B tak formować wypełnienie PWM aby na jego wyjściu uzyskać dowolny zakres napięcia różnego od zera.
Cytuj:
Przecież moduł ADC jest niezależny od Timera1. Niezależnie od napięcia odniesienia otrzymasz wartość z ADC, która będzie liczbą od 0 do 1023. W zależności od napięcia odniesienia zmienia się tylko to, co reprezentuje ta liczba.
Wiem, że wpisanie pewnej wartości do rejestru wejściowego licznika 1 nie ma wpływu na moduł ADC. Ale wpisanie do ICR1 np. 512 powoduje zmniejszenie rozdzielczości tego rejestru o połowę i równocześnie zakres sterowania potencjometrem na wejściu ADC zmniejszył się o połowę, czyli do 2,5V, przy wartości IRC1 1023 zakres pełnego obrotu potencjometru wynosił 5V. Gdybym do IRC1 wpisał 255 i ustawił ADC na tryb 8 bit (ADLAR=1) to napięcie sterowania na wejściu ADC nadal by wynosiło 5V.
Pisząc to jeszcze nie wiedziałem, że można to rozwiązać w inny sposób, czyli programowo.
Wracając do wątku związanego z prawidłowym użyciem skrótów TOP i MAX, to przepraszam bardzo, ale nadal tego nie rozumiem albo jest błąd w opisie.
barus napisał(a):
Pytałeś o tryb pracy normal który nie ma wiele wspólnego z PWM. i skąd bierze się wartość 0xff i 0xffff.
Nie chodziło mi o PWM tylko o sam tryb Normal w liczniku 0 i 1 w ATmedze 16 i nie pytałem o to skąd się bierze wartość 0xFF i 0xFFFF, bo to wiem.
Cytuj:
Z tego, co pamiętam akurat Atmega8 ma bardzo ubogi Timer0 np. nie ma trybu CTC i nie ma trybów PWM tylko Normal.
Tak, to wiedziałem.
Cytuj:
MAX to jest maksymalna wartość do której jest w stanie zliczać timer.
Właśnie dochodzimy do sedna sprawy. Ja rozumiem to tak. MAX jest wtedy, gdy licznik zliczy do momentu przepełnienia się np. wartość 0xFF lub 0xFFFF itp. Nie występuje w tym trybie odczyt porównania/zrównanie licznika z rejestrem. Ouput Compare odłączone.
sq8dsr napisał(a):
TOP to wartość do której zlicza wartość przy trybie PWM, w przypadku Timera1 może być ustawiana.
Przypomnę, że nie pytałem o tryb PWM, tylko o tryb Normal, analogiczna sytuacja jak wyżej. Czyli niezależnie od tego czy użyjemy licznika 0 czy 1 i w obydwu jest ustawiony tryb Normal, czyli według mojej wiedzy w tym trybie nie odczytuje się porównania w rejestrach, (no chyba, że jestem w błędzie) tylko liczniki zliczają aż się przepełnią i następuje reset. Czyli obydwa liczniki przy MAX.
To, dlaczego w nocie katalogowej przy opisie licznika0 jest TOP a przy liczniku 1 jest MAX skoro obydwa pracują w trybie Noramal?
==================================================================================
Kol. kicajek Dziękuje za wsparcie.
Kol. kicajek to był strzał w dziesiątke. Z wypiekami na twarzy natychmiast zabrałem się do uzupełnienia mojego kodu. I kod dokładnie tak jak sugerowałeś zadziałał.
kicajek napisał(a):
Aby uzyskać dokładniejszy wynik nie posiłkując się zmiennoprzecinkowymi musiałbyś "pożonglować"operacjami RAZY i PODZIELONE ale to już inna bajka; chodziło mi o przybliżenie idei ustalenia zakresu gdzie dolna wartość jest >0.
Jak inna bajka.

Posiłkując się rejestrem IRC1 wpisując do niego wartości większe od 1023 i odpowiednio zmieniając wartość rejestru OCR1A i dobierając odpowiedni dzielnik ADC mogę dowolnie kształtować zakres wypełnienia PWM z dużą dokładnością. Brawo Panowie

. Znów się czegoś nowego dowiedziałem, a szperałem po necie za tym, niestety bez skutku. Taka, zdawałoby się, mała rzecz a tak cieszy

Jeszcze musi trochę wody upłynąć abym był w stanie sam to wymyślić.
