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



Teraz jest 11 lis 2025, o 04:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 25 ] 
Autor Wiadomość
PostNapisane: 4 gru 2016, o 01:10 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Witam serdecznie. Ostatnio dużo uwagi poświęcam takim modułom procka jak ADC, Liczniki oraz PWM. Zgłębiam wiedzę w tym temacie na ile jest to możliwe, bo w głowie już mam pomysły w ich praktycznym zastosowaniu. Przy ćwiczeniach na płytce stykowej przy sterowaniu PWM za pomocą ADC pojawiły się u mnie pewne niejasności o których za chwilę.
Ściągnąłem z netu kod programu, którego dodatkowo opisałem i poprawiłem na wersję bardziej przejrzystą/czytelną, taką jak wymaga Mirek.
Kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod ten działa dobrze. Przy użyciu potencjometru napięcie sterujące o wartości od 0 do 5V podawane jest na wejście ADC0. Napięcie odniesienia =5V. Na wyjściu PWM dioda od strony anody jest podłączona do PB1 a katodą przez rezystor do masy. Moim problemem jest wyliczenie właściwej częstotliwości PWM. Mierząc miernikiem częstotliwość na PB1 nijak to się ma do moich obliczeń. Podam przykłady:
Częstotliwość procesora to 1MHz. Atmega 8.
Jeśli wartość rejestru OCR1A = ADC, a do rejestru wejścia będę wpisywał odpowiednie wartości np.
ICR1=1023 to przekręcając potencjometrem uzyskam napięcie na wyjściu PB1 odpowiednio 0 do 5V, a częstotliwość wynosi około 122Hz.
Jeśli ICR1=512 to napięcie na wyjściu wynosi od 0 do 5V i około 245Hz, ale wartość 5V na PWM osiągnięta została już przy połowie zakresu potencjometru(2,5V), gdy wpisałem do IRC1 jeszcze mniejszą wartość to 5V na wyjściu PWM była przy minimalnym skoku potencjometru, a częstotliwość proporcjonalnie wyższa.
Natomiast, gdy do rejestru ICR1 wpisałem wartość 1500 to napięcie po PWM wyniosło około3V a częstotliwość około 83Hz.
Drugi przypadek:
Jeśli do rejestrów OCR1 i OCR1A wpisywałem różne wartości to otrzymałem następujące wyniki:
ICR1=1023 i OCR1A=1023, to napięcie po PWM wyniosło 5V.
ICR1=1023 a OCR1A=512, to napięcie po PWM = 2,5V a częstotliwość 122Hz.
ICR1-512 i OCR1A=512, to napięcie po PWM = 5V.
ICR1-0 a OCR1A=512, to napięcie odpowiednio =5V.
ICR1=0 i OCR1A=0, to napięcie też =5V itp.
Przy 5V nie mogłem zmierzyć częstotliwości.
Możecie mi to wyjaśnić jak w tej sytuacji przeliczać te częstotliwości, bo już mam mętlik w głowie :(
Dlaczego przy wpisywaniu do rejestru ICR1 wartości mniejszych, od 1023 gdy OCR1A=ADC zmniejsza się napięcie sterowania na wejściu ADC, mimo, że na wyjściu po PWM jest nadal 5V? W praktyce wygląda to tak jakby zmieniał się dzielnik napięcia na wejściu ADC, albo napięcie odniesienia :?:
Czym różnią się od siebie oba te rejestry poza tym, że jeden jest wejściowy a drugi wyjściowy :?: Wiem też, że rejestr ICR1 też można użyć m.in. do ustawienia górnej wartości (TOP) dla licznika. Jednak w tym konkretnym przypadku ich działanie jest różne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 01:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

nie przyjrzałem sie dokładnie, ale ze wstępnych obliczeń,
wygląda na to że Twoja ATmesia pracuje na 8MHz.
8 000 000 / 64 / 1024 = ~122Hz.
dla ICR=1023 , (122Hz)
a OCR1A (0-255) to wartość wypełnienia, czyli napięcia na wyjściu.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 10:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

postaram się wytłumaczyć:

barus napisał(a):
ICR1=1023 i OCR1A=1023, to napięcie po PWM wyniosło 5V.

ICR1 określa tutaj wartość do której zlicza licznik Timera1. Otrzymujesz tutaj PWM o wypełnieniu 100 % (PWM 10 bitowy)

Cytuj:
ICR1=1023 a OCR1A=512, to napięcie po PWM = 2,5V a częstotliwość 122Hz.

wartość szczytową masz nada 1023 ale do rejestru OCR1A wprowadziłś połowę tej wartości więc masz PWM o wypełnieniu 50% (PWM 10 bitowy)

barus napisał(a):
ICR1-512 i OCR1A=512, to napięcie po PWM = 5V

wartość szczytowa teraz to 512 i wartość OCR1A też 512 więc znowu masz PWM o wypełnieniu 100% tyle że rozdzielczość PWM jest 9 bitów

Cytuj:
ICR1-0 a OCR1A=512, to napięcie odpowiednio =5V.

LIcznik Timera1 nie ma czego zliczać bo jego wartość szczytowa to zero wyjście związane z rejestrem OCR1A nie zmiana swojego stanu (wypełnienie 100%)

barus napisał(a):
ICR1=0 i OCR1A=0, to napięcie też =5V itp.

Sytuacja analogiczna jak powyżej.


Mam wrażenie, że nie rozumiesz do końca tego czym jest PWM i jak on działa. Piszesz, że wgłębiasz się w peryferia sprzętowe uC. Poznajesz rejestry itd, ale trochę brakuje Ci podstaw zrozumienie nie tyle tego co robią te moduły tylko w jakim celu się to dzieje.
Proponuję najpierw ogarnąć PWM na Timerze 8 bitowym, będzie Ci łatwiej załapać zasadę działania generowanie przebiegu PWM.
Timer1 (16 bitowy) ogarniesz sobie później jak już PWM nie bedzie miał dla Ciebie tajemnic, wtedy dołożysz sobie do analizowania te "ezgotyczne" tryby prace które są dostępne w Timerze 16 bitowym (Timery o nr 1 i 3).

ACD też możesz używać z rozdzilczością 8 bitową ustarczu ustawić 1 jedynkę w bicie ADLAR i odczytywać tylko rejestr ADCH. Wtedy będziesz miał tylko 256 dyskretnych wartości ADC któe bezpośrednio możesz włożyć do rejestru timera np. OCR0x lub OCR2x.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 17:47 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Dasro69 dzięki! Faktycznie procek jest taktowany 8GHZ nie 1GHz. Coś mnie zaślepiło, bo myślałem, że częstotliwość procka da się zmienić w eklipse, a przecież można tego dokonać tylko w MKCalkulatorze :oops:


Sq8dsr! Aa…a teraz to kumam. :D Wielkie dzięki za konkretne wyjaśnienie mi tej kwestii. Robiłem
próby na licznikach 8-bitowych i tam, wydaje mi się, było dla mnie wszystko zrozumiałe.
Wiadomo, że musze się jeszcze dużo nauczyć, ale w tym przypadku mętlik w głowie zrobił mi ten rejestr wejściowy, a czytając jego opis w katalogu procka tak wprost z niego nie wynika jak dokładnie działa, chyba, że ja nie wyłapałem tego, chociaż czytałem go kilka razy.
Reasumując to wartość liczbowa wpisana do ICR1 w zależności od rozdzielczości bitowej licznika ma wpływ na płynną zmianę rozdzielczości tego rejestru od TOP do BOTTOM, oraz jego częstotliwości. Natomiast wartość rejestru OCR1A ma wpływ tylko i wyłącznie na wypełnienie PWM i jego rozdzielczość.
Posiłkując się rejestrem ICR1 przy odczycie z ADC za każdym razem, gdy do niego wpiszemy nową niższą wartość, to od nowa musimy ustalić wartość dzielnika napięcia na wejściu ADC.
W dużym uproszczeniu można powiedzieć, że rejestr ICR1 jest lustrzanym odbiciem OCR1A, bo po
wpisaniu do nich niższych wartości od MAX (maksymalna rozdzielczość) na wejściu i wyjściu zmniejsza się proporcjonalnie ich rozdzielczość oraz poziom napięcia sterującego na wejściu ICR1 i poziom napięcia na wyjściu OCR1A po PWM.
Dużym problemem dla mnie jest nieznajomość języka angielskiego, kiedyś uczyliśmy się tylko rosyjskiego. ;)
W necie znalazłem parę pozycji z noty katalogowej procka przetłumaczonej na j. polski, ale jak się okazuje, zawierają też błędy. Jeszcze nie tak dawno nie wiedziałem, czym różni się poziom licznika TOP od MAX. Oznaczenia te używane w tabeli trybów pracy licznika.

Cytuję dokładny opis z noty katalogowej ATmega 16 przetłumaczonej na polski.

Licznik 0 cytat:
„ Najprostszy sposób pracy to tzw. Tryb Normal, przy ustawieniu WGM01:0 = 0. W tym trybie licznik zawsze zlicza przez inkrementowanie, a po osiągnięciu maksymalnej wartości TOP = 0xFF licznik „przekręca się” i resetuje od 0.”

Z kolei w liczniku 1 czytamy:
„ Najprostszy sposób pracy to tzw. Tryb Normal, przy ustawieniu WGM013:0 = 0. W tym trybie licznik zawsze zlicza przez inkrementowanie, a po osiągnięciu maksymalnej wartości MAX = 0xFFFF licznik „przekręca się” i resetuje od 0.”

Jak ja miałem to zrozumieć? Teraz już wiem, że Top to zrównanie się licznika z wartością rejestru, a MAX to osiągnięcie wartości np. 0xFF, 0xFFFF itp., po której licznik się przekręca /resetuje i zlicza od nowa.

Teraz mam następne pytanie, czy da się za pomocą rejestru-ów dowolnie kształtować napięcie na wyjściu z PWM (wartość rejestru-ów odczytywana z ADC), aby jego zakres na wyjściu wynosił np. od 1V do 3V lub od 3V do 4V, przekręcając potencjometrem od zera do max na wejściu ADC.
Wiem, że takie napięcia na wyjściu dowolnie mogę kształtować przy zastosowaniu tablicowania,
Wiem jak w dowolnym zakresie mogę obniżyć napięcie po PWM ograniczając go od góry, nie wiem czy da się go równocześnie ograniczyć od góry i od dołu za pomocą rejestru?
Bardzo proszę o odpowiedz :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 18:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

barus napisał(a):
Dasro69 dzięki! Faktycznie procek jest taktowany 8GHZ nie 1GHz.

hihi... coś przecholowałeś z tym GHz. hihi... :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 19:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Cytuj:
Z kolei w liczniku 1 czytamy:
„ Najprostszy sposób pracy to tzw. Tryb Normal, przy ustawieniu WGM013:0 = 0. W tym trybie licznik zawsze zlicza przez inkrementowanie, a po osiągnięciu maksymalnej wartości MAX = 0xFFFF licznik „przekręca się” i resetuje od 0.”


Dokładnie tak jak jest to napisane. Tryb NORMAL służy np. do generowania przerwań w jakichś odstępach czasu. Choć lepszy jest tutaj tryb CTC. Ale wracając do trybu normal. Timer8 bitowy ma rejestr swojego licznika np. TCNT0 rejestr ten jest 8 bitowy. Timer zlicza swoje impulsy i inkrementuje wartość zapisaną w rejestrze TCNT0 (na początku jest ona równa 0). Licznik TCNT0 zwiększa się aż osiąga wartość 255 (maxymalna wartość dla liczny 8 bitowej inaczej 0xFF) następnie się "przekręca" czyli wraca do wartości 0 i dalej kontynuuje zliczanie. Cały cykl się powtarza. Co jest tutaj najważniejsze to to, że fakt "przekręcenia się" licznika inaczej jego przepełnienia, sygnalizowany jest pojawienie się odpowiedniej flagi przerwania. I ten fakt można do czegoś wykorzystać. Możemy np. w procedurze obsługi przerwania załadować do rejestru TCNT0 wartość większą od zera. Wtedy licznik będzie zliczał krócej do momentu przepełnienia się, więc będziemy otrzymywali przerwania częściej.

W przypadku Timera16 bitowego jest dokładnie tak samo tyle że rejestr licznikowy (w tym przypadku TCNT1) jest 16 bitowy a nie 8 bitowy. Dzięki temu jedgo najwyższa wartość to 65535 czyli właśnie 0xFFFF.

barus napisał(a):
Reasumując to wartość liczbowa wpisana do ICR1 w zależności od rozdzielczości bitowej licznika ma wpływ na płynną zmianę rozdzielczości tego rejestru od TOP do BOTTOM, oraz jego częstotliwości. Natomiast wartość rejestru OCR1A ma wpływ tylko i wyłącznie na wypełnienie PWM i jego rozdzielczość.


Rejestr ICR (ICR1) występuje tylko w timerach 16 bitowych. One mają kilkanaście trybów pracy. Rejestr ten jest używany generalnie do 2 rzeczy. Do pracy w trybie Input Capture. Którym się teraz nie zajmujemy. Oraz do określania rozdzielczości bitowej i pośrednio długości okresu dla PWMa. Dzięki niemu możemy generować bardzo precyzyjne przebiegi PWM. Ponieważ możemy regulować, z dużą rozdzielczością, wartość szczytową do której zlicza licznik. Przykładowo w procesorach ARM chyba wszystkie timery mają te właściwość. Przy czym jest to jeszcze bardziej rozbudowane.
barus napisał(a):
Teraz mam następne pytanie, czy da się za pomocą rejestru-ów dowolnie kształtować napięcie na wyjściu z PWM (wartość rejestru-ów odczytywana z ADC), aby jego zakres na wyjściu wynosił np. od 1V do 3V lub od 3V do 4V, przekręcając potencjometrem od zera do max na wejściu ADC.

Z tego co tutaj napisałeś wynika, że nadal nie rozumiesz czym jest PWM.
W PWM występują tylko napięcia 0 V i VCC. NIe ma stanów pośrednich, działamy w domenie cyfrowej. PWM jedyne co robi to to, że w pewnym określonym okresie czasu podaje stan wysoki (VCC) i niski (0 V). Można to opisać procentowo. Cały okres czasu jest powiedzmy 0,01 sek. W tym okresie czasu przykładowo na pinie wyjściowym PWM mamy przez 25% czasu stan wysoki (VCC) a przez 75% czasu stan niski (0V). Co po uśrednieniu da jakieś napięcie pomiędzy 0 a VCC. Ale mamy tu do czynienia z wartością średnią. Ta wartość średnia będzie się zmieniać jeśli będzie zmieniał się procentowy udział stanu wysokiego i niskiego w przebiegu PWM. Słowo klucz to WYPEŁNIENIE. Od 0% do 100%.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 23:02 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Dzięki za szybka odpowiedź

Doskonale wiem, na czym polega wypełnienie impulsów w PWM. Przyznaję, że niepotrzebnie użyłem swoich skrótów myślowych, aby nie rozpisywać się zbytnio, mówiąc, że napięcie na wyjściu PWM ma się zawierać w zakresie 1V do 3V miałem na myśli wypełnienie PWM na poziomie między 20% a 60% a po przepuszczeniu przez filtr RC żeby się zawierało właśnie miedzy 1V a 3V.
Jeśli do rejestru OCR1A lub B (10 bit) wpiszę wartość 512 to wiadomo, że wypełnienie będzie wynosić 50%, czyli przy napięciu odniesienia 5V napięcie po PWM będzie wynosić 2,5V. Przyznaję, że nie fortunnie zabrzmiało to zdanie i źle zostało sformułowane o ograniczaniu napięcia od góry i od dołu na wyjściu po PWM. Nie to miałem na myśli. :( Wycofuje to pytanie, bo zmniejszając wartość OCR1A/B zawsze na wyjściu PWM będzie napięcie niższe proporcjonalnie do tej wartości w rejestrze i zawsze będzie się zaczynać od 0V pod warunkiem, że ustawiony będzie tryb Fast PWM a w rejestrze TCCR1A mamy ustawiony pin w COM1A1 lub COM1B1.
Ale może jednak zadam jeszcze raz to pytanie, mam nadzieję, że tym razem poprawnie: Czy można za pomocą odpowiedniego kodu tak sterować wypełnieniem PWM za pomocą potencjometru wpiętego do jednego z pinów ADC, z którego będzie podawane napięcie sterujące na wejście ADC o wartości od 0V do 5V, aby wypełnienie PWM mieściło się w granicach od 20% do 50% nie używając tablicowania wyników w kodzie programu. Napięcie odniesienia w obydwu przypadkach wynosi 5V. Na obecnym etapie mojej wiedzy nie da się, ale może się mylę.

Jeśli chodzi o ICR1 to jego funkcje są dla mnie zrozumiałe, te, które nie wymieniłem też. Dla mnie dziwne jest tylko to, że wraz ze zmianą wartości liczbowej wpisywanej do rejestru mniejszej od 1023 trzeba zmieniać wartość dzielnika napięcia przy wykorzystywaniu wejścia ADC np. do sterowania wypełnieniem PWM.

Jeśli chodzi o liczniki to chyba znowu nieporozumienie. Przecież w tym konkretnym przypadku nie chodziło mi o to, do jakiej wartości obydwa liczniki zliczają, bo to dla mnie jest oczywiste, ile mają bitów itp. Problem polega na tym, że obydwa liczniki w zależności od rozdzielczości zliczają od zera do górnej granicy, a kiedy ją osiągną to się przekręcają/resetują. Moje pytanie brzmi, czemu w przypadku licznika, 0 gdy ten zliczy do końca to ta pozycja nazywa się TOP a w analogicznej sytuacji licznika 1 ta pozycja licznika nazywa się MAX :?: Tyle i tylko tyle.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 23:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

barus napisał(a):
Czy można za pomocą odpowiedniego kodu tak sterować wypełnieniem PWM za pomocą potencjometru wpiętego do jednego z pinów ADC, z którego będzie podawane napięcie sterujące na wejście ADC o wartości od 0V do 5V, aby wypełnienie PWM mieściło się w granicach od 20% do 50% nie używając tablicowania wyników w kodzie programu. Napięcie odniesienia w obydwu przypadkach wynosi 5V. Na obecnym etapie mojej wiedzy nie da się, ale może się mylę.


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.

barus napisał(a):
że wraz ze zmianą wartości liczbowej wpisywanej do rejestru mniejszej od 1023 trzeba zmieniać wartość dzielnika napięcia przy wykorzystywaniu wejścia ADC np. do sterowania wypełnieniem PWM.


Przecież moduł ADC jest niezależny od Timera1. Niezależnie od napięcia odniesienia otrzymasz wartość z ADC któa będzie liczbą od 0 do 1023. W zależności od napięcia odniesienia zmienia się tylko to co reprezentuje ta liczba.

barus napisał(a):
Przecież w tym konkretnym przypadku nie chodziło mi o to, do jakiej wartości obydwa liczniki zliczają, bo to dla mnie jest oczywiste, ile mają bitów itp.


Pytałeś o tryb pracy normal który nie ma wiele wspólnego z PWM. i skąd bierze się wartość 0xff i 0xffff.
Z tego co pamiętam akurat Atmega8 ma bardzo ubogi Timer0 np. nie ma trybu CTC i nie ma trybów PWM tylko Normal.
MAX to jest maksymalna wartość do której jest w stanie zliczać timer.
TOP to wartość do której zlicza wartość przy trybie PWM, w przypadku Timera1 może być ustawiana.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2016, o 00:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
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.

Ja tylko uzupełnię, a właściwie pokażę kol.barus jeden ze sposobów.
Tak jak kol.sq8dsr pokazał interesuje Cię przedział OCR1x 200/512.
Więc na początek wiesz, że OCR... nie może być mniejsze od 200 a tylko >=.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ADC przyjmuje wartości 0 - 1023 a ciebie interesuje max 312 więc obliczasz "zakres" ADC ( najprościej ale najmniej dokładnie 1023/312 = 3)
i teraz podstawiasz
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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.

Pozdr.


Autor postu otrzymał pochwałę


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

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

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 8-) . 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 :D Jeszcze musi trochę wody upłynąć abym był w stanie sam to wymyślić. :|



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2016, o 16:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

barus napisał(a):
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.


A jaki problem podzielić wartość z ADC przez 2 ?
barus napisał(a):
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.

W trybie normal nie ma porównania sprzętowego. Jest tylko przepełnienie i flaga informująca o tym.

barus napisał(a):
To, dlaczego w nocie katalogowej przy opisie licznika0 jest TOP a przy liczniku 1 jest MAX skoro obydwa pracują w trybie Noramal?

W nocie, w sekcji dotyczącej licznika0 (Atmega8) nie ma pojęcia TOP. Bo ten licznik nie obsługuje ani PWM ani CTC wiec nie jest mu t o potrzebne.
Co do licznika1 (Timer1) on ma bardzo duzo trybów pracy. W trybie normal jest jest tam określone, że przepełnienie następuje przy wartości MAX = 0xFFFF.
Jest to dokładnie to samo co timerze0, tryb normal to normal.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2016, o 18:35 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

sq8dsr napisał(a):
A jaki problem podzielić wartość z ADC przez 2 ?


Faktycznie. Przetestowałem i działa :)

Co do właściwych oznaczeń TOP i MAX przy licznikach, to nie myliłem się, tylko był błąd w tłumaczeniu w opisie tych liczników.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2016, o 18:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Cytuj:
Co do właściwych oznaczeń TOP i MAX przy licznikach, to nie myliłem się, tylko był błąd w tłumaczeniu w opisie tych liczników.

Dlatego najlepiej jest używać noty ściągniętej z Atmela :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2016, o 22:39 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Teraz może zdradzę, dlaczego drążę te akurat szczegóły dotyczące ADC PWM, a szczególnie chodzi mi o uzyskanie dosyć stabilnego napięcie na wyjściu PWM, którego wartość będzie wprost proporcjonalna do napięcia sterującego ADC i do tego w odwrotnej polaryzacji do wejścia.
Obecnie mam w samochodzie zainstalowany taki oto moduł :
Obrazek
Jak się zapewne domyślacie jest to moduł, który przy zainstalowanej instalacji LPG w samochodzie(BRC) w momencie przełączenia się silnika z PB na LPG pokazuje nam poziom LPG na wskaźniku benzyny. To nie jedyna zaleta tego modułu. Tak mój samochód (Chevrolet Cruze) jak i francuskie samochody, japońskie i jeszcze inne nowe samochody dotyka plaga błędu wskaźnika benzyny przy jeździe na LPG. Polega to na tym, że wskaźnik benzyny podczas jazdy na LPG nagle opada do zera, generuje błąd w postaci świecenia się żółtej ikonki, a na wskaźniku paliwa pojawia się napis natychmiast zatankuj paliwo. Co gorsze w niektórych samochodach nie da się tego skasować. Tak też było w moim przypadku dopóki nie zrobiłem i nie zamontowałem tego modułu, bo ASO rozłożyło bezradnie ręce. U mnie w samochodzie wszystkim rządzi komputer a komunikuje się prawie ze wszystkimi urządzeniami przez magistralę CAN. Komputer(ECM) od wskaźnika benzyny podczas jazdy na LPG się buntuje/głupieje, bo nie ubywa benzyny, aż w pewnym momencie wskaźnik opada do zera. Mój moduł przy jeździe na LPG podaje do komputera poziom ze zbiornika LPG dodatkowo na wskaźniku benzyny widzimy dokładny poziom LPG, w ten sposób oszukuje komputer, bo ten myśli, że jest to poziom benzyny, skoro poziom opada w trakcie jazdy to komputer się nie buntuje, nie wywala błędów. Czyli mamy dwa w jednym. Jest to mój autorski patent, który sprawdza się świetnie i precyzyjnie wskazuje poziom gazu. Kosztował mnie wiele pracy, aby to wszystko ogarnąć, ale warto było. Jest pewien drobny mankament. Otóż minimalna niestabilność wskazań w zależności od temperatury otoczenia. Wpływ na taki stan rzeczy ma dryf cieplny łącza pn tranzystora, który zmienia jego punkt pracy w zależności od temperatury otoczenia. Aby to zminimalizować musiałem metodą prób i błędów dobrać odpowiedni termistor w obwodzie bazy tranzystora, którego przykleiłem do metalowej obudowy (BC211). Nie udało mi się całkowicie wyeliminować tej przypadłości, ale znacznie ją ograniczyłem. Wbrew pozorom wskaźnik potrzebuje dosyć stabilne i precyzyjne napięcie.
Jeszcze dodatkowo musiałem popracować nad liniowością a właściwie nad nieliniowością wskazań LPG (zb. w kształcie walca), którą też wyeliminowałem. Jak widać włożyłem w to sporo pracy.
Jestem z natury perfekcjonistą i pomyślałem sobie, że na te małe niedomagania najlepszym lekarstwem będzie ATmega, a tymi prockami zainteresowałem się dopiero 2 miesiące temu. W ogóle w dziedzinie procesorów jestem 100 lat za murzynami. Tak, że proszę o wyrozumiałość.
Związku z tym mam pytanie do Was jak jest ze stabilnością napięć w ATmegach względem zmiany temperatury otoczenia.? Czy mają w sobie kompensację temperaturową? To na razie tyle pytań. Jeśli pozwolicie to będę miał jeszcze sporo pytań.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2016, o 00:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

barus napisał(a):
Związku z tym mam pytanie do Was jak jest ze stabilnością napięć w ATmegach względem zmiany temperatury otoczenia.? Czy mają w sobie kompensację temperaturową? To na razie tyle pytań. Jeśli pozwolicie to będę miał jeszcze sporo pytań.
Pozdrawiam.


Temperatura będzie miała pewien wpływ na częstotliwość wbudowanego geneartora RC. Ale to będą niewielkie zmiany, zreszta przy PWM to nie ma znaczenia. PWM będzie miał nieco inną częstotliwość np. różniąca się o 0,01 Hz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2016, o 09:45 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Przyznam, że jestem trochę zaskoczony tą odpowiedzią, bo jeśli tak jest jak Kol. pisze to byłoby cudownie, bo prawie zerowe odchyłki częstotliwości od normy kompletnie w moim projekcie nie mają znaczenia. Chodziło mi też o stałość wewnętrznego napięcia odniesienia. Czy przy temperaturze otoczenia od np. -20°C do +30°C nie robi żadnego wrażenia na tym napięciu :o . Niezmienny poziom tego napięcia będzie miał kapitalne znaczenie na wyjściowe napięcie. Tak na marginesie, to ciekaw jestem jak w procku jest dokonywana redukcja napięcia zasilania do poziomu wewnętrznego napięcia odniesienia (2,6V, 1,1V), czy podobnie jak w zasilaczu stratnym, czy przez PWM?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2016, o 18:46 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

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.

Okazuje się, że w tym kodzie do uzyskania dokładnego dowolnego zakresu wypełnienia na PWM mogę posługiwać się liczbami zmiennoprzecinkowymi i kompilator to łyka bez wywalania błędów. :o

Przykład: OCR1A = 561 + ( ADC/3.35 ); Przy wartości IRC1=1023;
Przy odwróconej polaryzacji napięcia po PWM w stosunku do wejścia ADC [TCCR1A |= (1<<COM1A1)|(1<<COM1A0)] napięcie to w zależności od położenia potencjometru mieści się w zakresie około 0,88V do 2,15V dokładnie takie, jakie chciałem.
Kompilator wykonuje działanie według tej instrukcji, mimo, że w kodzie nie zadeklarowaliśmy, iż będziemy używać wartości zmiennoprzecinkowych :?:
Możecie mi to wytłumaczyć :?:

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2016, o 19:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Po prostu zamiast 3,35 podstawia 3,00 i powstaje "niedokładność" z zaokrąglenia.
Aby działanie było bezbłędne musiało by być (ADC*100)/335.
Poczytaj o promocjach liczb.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2016, o 20:32 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Właśnie sprawdzałem to dokładnie przy różnych ustawieniach. Wypełnienie/napięcie zmienia się proporcjonalnie do tego dzielnika i reaguje z dokładnością do 1/100. Chyba, że kompilator w ten sposób to oblicza jak Kol. podał "(ADC*100)/335."
Jeden ważny szczegół, że dzieląc przez 3,35 zamiast przecinka trzeba dać kropkę czyli 3.35 z przecinkiem wywala błąd.

Promocje liczb, a co to takiego :shock:

Pozdrawiam.

BTW

Już wiem, chodzi o promocje typów liczb, rzutowanie itp. Przez moment pomyślałem, że chodzi zupełnie o coś innego o czym jeszcze nie wiem :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 gru 2016, o 08:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Jak masz na czym ( uC + LCD ) to zrób takie "doświadczenie" - każ wyświetlać wynik dla tych dwóch działań ADC/ 3.35 oraz (ADC*100)/335.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 gru 2016, o 22:07 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Nie, nie bawiłem się jeszcze transmisją danych przez łącze szeregowe RS232. To zostawiam sobie na później, wcześniej muszę nabyć jeszcze moduł BT do obsługi tego połączenia.
Wracając do obliczeń, mnożenia i dzielenia, wykonywanych przez program, to dokonywałem jeszcze różnych prób konwersji programu w różnej konfiguracji podstawiania danych. Doszedłem do takich wniosków, że w tym układzie t.j. OCR1A = 158 + ADC/3.20; program prawidłowo definiuje wypełnienie pwm a na jego wyjściu napięcie wynosiło odpowiednio ok. 0,8V do 2.16V pisze około bo mam płytkę stykową i napięcia trochę skaczą.
Na każdą nawet najmniejszą zmianę dzielnika np. 3.19 lub 3.21 zmienia się wypełnienie pwm.
Przy wstawieniu przecinka zamiast kropki(3,20/3.20)kompilator nie bierze pod uwagę liczb po przecinku cokolwiek tam wpiszemy tylko zaokrągla, czyli w tym przypadku nie uzyskamy precyzyjnego/dowolnego wypełnienia pwm.
Gdy użyjemy takiej składni: OCR1A = 158 + (ADC*10)/32; to też kompilator przekształcił to prawidłowo i następuje prawidłowe wypełnienie pwm.
Natomiast, gdy wstawimy taką kombinację: OCR1A = (ADC*100)/320; to wychodzą kompletne bzdury, napięcia z sufitu. Przekręcając potencjometrem od 0 w pełnym jego zakresie napięcie po pwm z poziomu 0,8V zaczyna rosnąć do 1,65V, po czym błyskawicznie spada do 0,8V i znowu zaczyna rosnąć.
Teraz mam pytanie, czy „int” poprzedzające „main” w głównej funkcji [b]"int main()"[/b] określa dodatkowo typ zmiennej, wielkość liczbową w zakresie od -32768 do 32767, bo w tym programie w nagłówku nie ma zadeklarowanego innego typu zmiennej, chyba, że jak w nagłówku nic nie zadeklarowaliśmy, to obowiązuje typ unit_t.
Nie czuję jeszcze tego tematu.
Szukam przyczyny wadliwego działania programu przy tym ustawieniu: OCR1A = (ADC*100)/320; Bo przy wyliczeniach matematycznych powinno wszystko się zgadzać, a tak nie jest. Wynik mnożenia dalece przekracza wartość 32767 i może to jest powód, że program nie działa prawidłowo.
Ciekaw jestem Waszej opinii.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 gru 2016, o 22:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Nie bardzo łapię, ale chociaż to:
barus napisał(a):
bo w tym programie w nagłówku nie ma zadeklarowanego innego typu zmiennej,

Musisz sobie taką zmienną powołać (uint32_t pomiar; ), a później przypisać ją do OCR1x - te skoki wartości biorą się stąd że OCR1 jest 16bit a ty na samym początku mnożąc ADC przez 100 ( np.: ADC =700 i to *100 ) daje 70.000 i już jesteś poza 16bit. tzn. dalej w 16bit tylko już raz "przekręconym".
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2016, o 18:23 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Mimo usilnych prób zdefiniowania zmiennej typu „uint32_t” o nazwie „pomiar” ustawiając ją, jako zmienna lokalna, czyli po głównej funkcji programu int main, lub w nawiasach klamrowych w pętli for(;;) , lub przed tą funkcją, jako zmienna globalna. Kompilator nadal błędnie wykonuje zadanie matematyczne typu ADC*100/330;. Bez przypisywania tego typu zmiennej kompilator dobrze wykonuje takie obliczenie np. ADC*10/33; lub ADC/3.30;
Wniosek z tego z tego taki, że źle definiuję zmienną typu uni32_t pomiar. :cry:
Mógłbym liczyć na Waszą pomoc, jak prawidłowo zdefiniować/przypisać zmienną innego typu, reprezentującą liczbę typu całkowitego bez znaku o wyższej wartości, tak, aby kompilator bez problemu dokonał wyliczenia w takiej formie ADC*100/330; w kodzie, który znajduje się na początku tego wątku. :?:
Co prawda, na obecnym etapie mojej wiedzy dzięki pomocy Kol. kicajek oraz sq8dsr mogę to obliczyć w inny sposób, który już podałem np. taką metodą aby nie przekroczyć max wartości liczby 65535 2-bajty. Oto przykład: OCR1A = 160 + ADC*62/199; = 479 ale można też tak OCR1A = 160 + ADC/3.21; = 479 Czyli pełny zakres obrotowy potencjometru mieści się w zakresie 160 do 479 punktów dyskretnych PWM przy jego rozdzielczości 1024 a to z kolei przy napięciu odniesienia 5V daje nam napięcie w zakresie 0,78V do 2,3V.

Ale w dalszym ciągu nie wiem jak zmusić kompilator do działania na liczbach o większych wartościach 4-bajtowych z większą dokładnością.


Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2016, o 16:25 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Aa…..a! Złapałem wreszcie byka za rogi :) . A mówiąc szczerze, to znalazłem rozwiązanie mojego problemu, długo szperając w necie ;) . Nie przypuszczałem, że to takie proste.
Aby kompilator poprawnie wykonywał działania matematyczne, mnożenie, dzielenie itp. na liczbach całkowitych ze znakiem i bez, większych od typu int, w tym konkretnym przykładzie, o który pytałem wcześniej, czyli: OCR1A = 160 + ADC*100/335; to jest oczywiście błędna składnia a mimo to kompilator nie wywala błędów, ale jego wyliczenia są błędne. Mimo wielu prób nie udało mi się prawidłowo przypisać zmiennej o wyższej wartości (np. long).
A prawidłowa składnia powinna być zapisana w ten sposób:
OCR1A = 160 + ADC*100L/335; lub
OCR1A = 160 + ADC*100UL/335; lub
OCR1A = 160 + ADC*(long)100/335; itd. To się nazywa jawnym rzutowaniem, chyba :!:
Znowu uczyniłem jakiś malutki kroczek do przodu :D .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2016, o 13:46 
Offline
Użytkownik

Dołączył(a): 13 paź 2016
Posty: 25
Pomógł: 0

Mam jeszcze takie pytanie do Szanownych Kolegów, czy można badać/mierzyć napięcie na wyjściu z PWM w celu jego stabilizacji w zależności od zmiennego obciążenia tego wyjścia po filtrze RC. Coś na zasadzie stabilizacji napięcia :?: .
Założenie moje jest takie, aby do wejścia ADC0 podać napięcie z potencjometru w zakresie od 0V do 1V a na wyjściu PWM (256) uzyskujemy napięcie po filtrze RC odpowiednio od 0V do 5V, czyli proporcjonalne do przekręcenia potencjometru. Obciążenie na wyjściu z PWM będzie zmienne związku z tym wartość napięcia na wyjściu będzie się zmieniać. Aby temu zapobiec do wejścia ADC1 przez odpowiedni dzielnik napięcia podałbym napięcie z wyjścia PWM a zmierzone napięcie na ADC1 porównał z napięciem (wartością) ADC0 i dzięki zastosowaniu warunku if (ADC1 <ADC0) OCRx ++;
else OCRx --; // uzyskałbym stabilizacje napięcia, oczywiście stabilizacja ta dotyczyłaby napięć niższych od 5V na wyjściu.
Czy moja teoria jest słuszna i możliwa do zastosowania w praktyce :?:
Czy jest jeszcze jakiś inny sposób programowy, aby osiągnąć ten sam cel :?:

Pozdrawiam.



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO