<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=5161&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-12T13:01:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5161&amp;mode</id>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2014-01-12T13:01:37+01:00</updated>
<published>2014-01-12T13:01:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=64749#p64749</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=64749#p64749"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=64749#p64749"><![CDATA[
Edycja, zmodyfikowałam i teraz wydaje mi się że będzie dobrze, co myślicie<br />[syntax=c]#include &lt;avr/io.h&gt;//biblioteka wejść/wyjść<br />#include &lt;AVR/interrupt.h&gt;//biblioteka przerwań<br /><br />unsigned volatile int Res_ADC;//zmienna wynik konwersji ADC<br />unsigned volatile int temp;//zmienna przekształcenie napięcia na temperature<br />volatile char licznik;//zmienna licznik<br />unsigned int i;//zmienna licznik osiągnięcia temperatury zamierzonej<br />unsigned volatile int x;//zmienna x<br />#define WARTOSC_PRZELADOWANIA  3036//zdefiniowana wartość przełądowania<br /><br />ISR (TIMER1_OVF_vect)//przerwanie od timera1<br />{<br />TCNT1 = WARTOSC_PRZELADOWANIA;//ustawienie wartości przeładowania w rejestrze<br />if(licznik&gt;0)//jeżeli licznik &gt; 0<br />licznik--;//dekrementuje wartość<br />}<br />void odczyt_ADC (void)//instrukcja odczytu ADC<br />{<br />ADCSRA |= (1 &lt;&lt; ADSC);// rozpoczęcie pomiaru<br />while (ADCSRA &amp;&amp; (1 &lt;&lt; ADSC)) {// czekaj na wyzerowanie flagi<br />Res_ADC = ADC;//przypisanie wyniku ADC do zmiennej Res_ADC<br />temp = 25*Res_ADC+5000; }// odczyt temperatury x100<br />}<br />void grzalka_ON (void)//instrukcja włączania grzałki<br />{<br />PORTA |= (1&lt;&lt;0);<br />}<br />void grzalka_OFF (void)//instrukcja wyłączania grzałki<br />{<br />PORTA &amp;=~(1&lt;&lt;0);<br />}<br />int main(void)//pętla główna programu<br />{<br />DDRA &amp;= ~(1&lt;&lt;2) ;//wejście pin z termistore<br />DDRA |= (1&lt;&lt;0) ;//wyjście pin z bramką<br />ADMUX |=    (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0) | (1&lt;&lt;ADLAR);<br />//wybór napięcia odniesienia ADC<br />//na wewnętrzne źródło 2,56V<br />//z zewnętrznym kondensatorem na pinie AREF<br />//wyrównanie do lewej<br />ADCSRA |=(1&lt;&lt;ADEN)| (1&lt;&lt;ADPS0) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2);<br />//włączenie przetwornika konfiguracja prescalera  na 128, tryb Free Run<br />ADMUX |= (0&lt;&lt;MUX0) | (1&lt;&lt;MUX1) | (0&lt;&lt;MUX2);<br />//wybór kanału konwersji ADC2<br />x=1;<br /><br />TCCR1B &amp;=~ (1&lt;&lt;CS10);<br />//ustawienie 0 w rejestrze kontrolnym licznika TCCR3B na bicie CS30<br />TCCR1B &amp;=~ (1&lt;&lt;CS11);//ustawienie 0 w rejestrze TCCR3B na bicie CS31<br />TCCR1B |=  (1&lt;&lt;CS12);//ustawienie 1 w rejestrze TCCR3B na bicie CS32<br />TIMSK |=(1&lt;&lt;TOIE1);//ustawienie 1 na bit TOIE1 w rejestrze TIMSK<br /><br />TCNT1 = WARTOSC_PRZELADOWANIA;//wpisanie wartości początkowej do rejestru<br />sei();//globalne zezwolenie na przerwania<br /><br /><br />while (x&gt;0)<br />{odczyt_ADC ();<br />if((licznik==0)&amp;&amp;(temp&gt;0)&amp;&amp;(temp&lt;6400))<br />grzalka_ON();<br />if((i==0)&amp;&amp;(licznik==0)&amp;&amp;(temp&gt;=6400)&amp;&amp;(temp&lt;6600))<br />//histereza z wartością zamierzoną 6500<br />{<br />grzalka_OFF();<br />licznik=60; //ustawienie licznika na 60 sekund<br />i=1;//oznaczenie osiagniecia 1. temperatury zamierzonej<br />}<br />if((licznik&gt;0)&amp;&amp;(temp&gt;=6400)&amp;&amp;(temp&lt;6600))<br />grzalka_OFF();<br />if((licznik&gt;0)&amp;&amp;(temp&gt;0)&amp;&amp;(temp&lt;6400))<br />grzalka_ON();<br />if((licznik==0)&amp;&amp;(temp&gt;=6600)&amp;&amp;(temp&lt;9600))<br />grzalka_ON();<br />if((i==1)&amp;&amp;(temp&gt;=9600)&amp;&amp;(temp&lt;10000))//histereza z wartością zamierzoną 9800<br />{<br />grzalka_OFF();<br />licznik=60;//ustawienie licznika na 60 sekund<br />i=2;//oznaczenie osiągnięcia 2. temperatury zamierzonej<br />}<br />if((i==2)&amp;&amp;(licznik&gt;0)&amp;&amp;(temp&gt;=6600)&amp;&amp;(temp&lt;9600))<br />grzalka_ON();<br />if((i==2)&amp;&amp;(licznik&gt;0)&amp;&amp;(temp&gt;=9600)&amp;&amp;(temp&lt;10000))<br />grzalka_OFF();<br />if((i==2)&amp;&amp;(licznik==0)&amp;&amp;(temp&gt;=10000))<br />{<br />grzalka_OFF();//zanik napięcia na grzałce<br />x=0;//koniec programu<br />}<br />}<br />}[/syntax]<br />Chodzi mi głównie o pętle while. Dodatkowo zaczęłam się zastanawiać, czy grzałka będzie grzała jak na bramkę tranzystora dam 5V czy włąsnie jak będzie 0V (schemat był w 1 poscie)?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 12 sty 2014, o 13:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-12-15T17:39:17+01:00</updated>
<published>2013-12-15T17:39:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61296#p61296</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61296#p61296"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61296#p61296"><![CDATA[
Jeszcze jedno. Tak mi się wydaje, że jeżeli będziesz wykorzystywać sprzętowy przetwornik ADC 10bit to res_ADC będzie się zmieniać w zakresie od 0 do 1023. Wtedy odpowiednio pozmniejszaj te zakresy, bo przy 1023 będzie maksimum zakresu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 15 gru 2013, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-15T17:16:44+01:00</updated>
<published>2013-12-15T17:16:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61294#p61294</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61294#p61294"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61294#p61294"><![CDATA[
W 5 linii masz taką definicję:<br />[syntax=c]unsigned volatile res_ADC; //zmienna wynik konwersji ADC[/syntax]<br />brakuje Ci typu zmiennej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 15 gru 2013, o 17:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2013-12-15T14:33:53+01:00</updated>
<published>2013-12-15T14:33:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61280#p61280</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61280#p61280"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61280#p61280"><![CDATA[
Dwie funkcje main, to przez to że przekopiowałam do atmel studio, a tam była już gotowa funkcja główna której nie zauważyłam. Wielkie dzięki, wykorzystam to co mi pomogłeś i czekam na więcej odpowiedzi na pytania z poprzednich postów <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 15 gru 2013, o 14:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2013-12-15T14:20:03+01:00</updated>
<published>2013-12-15T14:20:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61277#p61277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61277#p61277"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61277#p61277"><![CDATA[
A więc tak to co ja jako początkujący mogę doradzić to<br />program zatrzyma Ci się w liniach 20-24 <br />[syntax=c]while(1)[/syntax]<br />nigdy się nie skończy (chyba że wyłączysz zasilanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> )<br /><br />Przeżuć odczyt ADC do funkcji np.<br />[syntax=c]void odczyt_ADC (void){<br />                ADCSRA |= (1 &lt;&lt; ADSC); // rozpoczęcie pomiaru<br />                while (ADCSRA &amp; (1 &lt;&lt; ADSC)) { // czekaj na wyzerowanie flagi<br />                Res_ADC = ADCH;} // odczytujemy wynik<br />}[/syntax]<br /><br />Deklaracje funkcji umieść gdzieś przed main<br />a wywołuj ją cyklicznie w głównej pętli np.<br />[syntax=c]while (1){<br /><br />                odczyt_ADC();       //wywołanie odczytu z ADC<br /><br />                if((Res_ADC&gt;0)&amp;&amp;(Res_ADC&lt;1080))<br />                     {OCR1A=255; //przy dużo niższej temperaturze maksymalny impuls<br />                    }<br />                 if((Res_ADC&lt;1120)&amp;&amp;(Res_ADC&gt;=1080)) //przy temperaturze zbliżającej się do 62 prędkość 2<br />                    {OCR1A=128;<br />                    }<br />                if((Res_ADC&gt;1120)&amp;&amp;(Res_ADC&lt;1130))<br />                     {OCR1A=70;<br />                     }<br />                if ((Res_ADC&gt;=1130)&amp;&amp;(Res_ADC&lt;1150))<br />                PORTD &amp;=~(1&lt;&lt;5);//zanik napięcia na grzałce w momencie gdy temperatura jest zadana?<br />                <br /><br />        }[/syntax]<br /><br />i jeszcze jedno nie możesz mieć dwóch funkcji main ()<br />w jednym programie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 15 gru 2013, o 14:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2013-12-15T13:48:58+01:00</updated>
<published>2013-12-15T13:48:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61264#p61264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61264#p61264"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61264#p61264"><![CDATA[
<div class="quotetitle">afrikanerhart napisał(a):</div><div class="quotecontent"><br />PWM [%] = (T-t/T)<br /><br />Dodatkowo trzeba pamiętać żeby zrobić histerezę temperatury bo inaczej bardzo blisko temperatury zadanej układ moze się włączać i wyłączać naprzemiennie.<br /></div><br /><br />Myślałam właśnie, że przy zadanej temperaturze układ będzie się włączać i wyłączać naprzemiennie aby temperatura była utrzymana, w tym celu też ustawiłam zakres w okolicach 62 +/- 2 stopnie (grzałka nie musi działać superprecyzyjnie), źle myślę?<br /><br />A pomijając kwestię szybkości PWM, to możecie mi podpowiedzieć jak utrzymać temperaturę przez zadany czas (i nie są to czasy w milisekundach) a następnie, żeby znowu ruszyło? Timery, przerwania, opóźnienia?<br /><br /><div class="quotetitle">Zaba napisał(a):</div><div class="quotecontent"><br />Witam<br />Spróbuj formatować kod (te takie wcięcia i spacje) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />bo chyba o ile dobrze rozszyfrowałem to program Ci się zapętli w <br />liniach 20 do 25 i nie pójdzie dalej.<br /></div><br /><br />Teraz będzie dobrze?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 15 gru 2013, o 13:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2013-12-15T13:09:37+01:00</updated>
<published>2013-12-15T13:09:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61253#p61253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61253#p61253"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61253#p61253"><![CDATA[
Witam<br />Spróbuj formatować kod (te takie wcięcia i spacje) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />bo chyba o ile dobrze rozszyfrowałem to program Ci się zapętli w <br />liniach 20 do 25 i nie pójdzie dalej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 15 gru 2013, o 13:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[afrikanerhart]]></name></author>
<updated>2013-12-15T13:03:28+01:00</updated>
<published>2013-12-15T13:03:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61252#p61252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61252#p61252"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61252#p61252"><![CDATA[
To co potrzebujesz to regulator PID. Z tym że nie mając pojęcia o programowaniu nie zrobisz go.<br /><br />Najprościej to można zrobić tak :<br /><br />T -zadana tamperatura<br />t - temperatura aktualna<br />e- róznica między T i t ; e=T-t inaczej błąd<br /><br />Na podstawie wielkości e regulujesz współczynnik wypełnienia w PWM.<br />Najprosciej zależność między e i PWM możesz zrobić liniowo ale to na pewno nie będzie optymalne rozwiązanie.<br /><br />PWM [%] = (T-t/T)<br /><br />Dodatkowo trzeba pamiętać żeby zrobić histerezę temperatury bo inaczej bardzo blisko temperatury zadanej układ moze się włączać i wyłączać naprzemiennie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1233">afrikanerhart</a> — 15 gru 2013, o 13:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2013-12-15T13:51:30+01:00</updated>
<published>2013-12-15T12:31:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61245#p61245</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61245#p61245"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61245#p61245"><![CDATA[
1)Czy chodziło Ci o coś takiego (przedstawiam cały program, głównie pytam o pętle while)?<br />2)Czy dobrze mi się wydaje, że zmniejszając wypełnienie początkowe w rejestrze porównań OCR1A zmniejszam wypełnienie impulsem -&gt; spada szybkość, czy właśnie przy zwiększaniu wartości na OCR1A (miałam jakiś program z diodą i najmocniej świeciła przy 255)?<br />3) Czy rozwiązanie z ustawieniem niskiego sygnału na pinie z tranzystorem przy temperaturze pożądanej+ zapewni utrzymanie tej temperatury (-&gt;temperatura spada-&gt; z warunku napięcie na przetworniku ADC też spada -&gt; warunek gdy napięcie jest niższe -&gt; prąd na grzałkę-&gt;...)?<br />4) Jak uzyskać aby pętla warunkowa1 była aktywna przez zadany czas, a następnie po wygrzaniu w T1. ponownie grzałka zaczęła grzać do zadanej T2? (T2&gt;T1)<br /><br />Mikroprocesor ma działać i sterować temperaturą programowo od razu po naciśnięciu przycisku uruchamiającego (oczywiście przy podanym napięciu przez zasilacz), nie mam żadnego potencjometru.<br /><br />[syntax=c]#include &lt;avr/io.h&gt; //biblioteka wejść/wyjść<br />#include &lt;AVR/interrupt.h&gt; //biblioteka przerwań<br />#include &lt;util/delay.h&gt; //biblioteka opóźnień<br /><br />unsigned volatile res_ADC; //zmienna wynik konwersji ADC<br />Int main (void) //pętla główna<br />{<br />DDRA &amp;= ~(1&lt;&lt;7) ; //wejście termistora<br />DDRA &amp;= ~(1&lt;&lt;1); //dioda LED<br />DDRD |= (1&lt;&lt;5) ; //wyjście bramki<br />ADMUX | =    (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0) | (1&lt;&lt;ADLAR);// wybór napięcia odniesienia ADC<br />//na wewnętrzne źródło 2,56V<br />//z zewnętrznym kondensatorem na pinie AREF<br />//wyrównanie do lewej<br />ADCSRA |=(1&lt;&lt;ADEN)| (1&lt;&lt;ADPS0) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2); //  włączenie przetwornika konfiguracja prescalera  na 128<br />ADMUX |= (1&lt;&lt;MUX0) | (1&lt;&lt;MUX1) | (1&lt;&lt;MUX2); //wybór kanału konwersji ADC7<br />TCCR1A |= (1 &lt;&lt; COM1A1)|(1 &lt;&lt; WGM10)|(1&lt;&lt;WGM11); //ustawienie trybu PWM z korekcją fazy 10bit<br />TCCR1B |= (1 &lt;&lt; CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10); //preskaler dla PWM 1024<br />OCR1A = 0; //ustawienie początkowej wartości komparatora<br />while(1) {<br />ADCSRA |= (1 &lt;&lt; ADSC); // rozpoczęcie pomiaru<br />while (ADCSRA &amp; (1 &lt;&lt; ADSC)) { // czekaj na wyzerowanie flagi<br />Res_ADC = ADCH;} // odczytujemy wynik<br />}<br />while (1)<br />{if((Res_ADC&gt;0)&amp;&amp;(Res_ADC&lt;1080))<br />{OCR1A=255; //przy dużo niższej temperaturze maksymalny impuls<br />}<br />if((Res_ADC&lt;1120)&amp;&amp;(Res_ADC&gt;=1080)) //przy temperaturze zbliżającej się do 62 prędkość 2<br />{OCR1A=128;<br />}<br />if((Res_ADC&gt;1120)&amp;&amp;(Res_ADC&lt;1130))<br />{OCR1A=70;<br />}<br />if ((Res_ADC&gt;=1130)&amp;&amp;(Res_ADC&lt;1150))<br />PORTD &amp;=~(1&lt;&lt;5);//zanik napięcia na grzałce w momencie gdy temperatura jest zadana?<br />...<br />}<br />}<br /><br />int main(void)<br />{<br />    while(1)<br />    {<br />        //TODO:: Please write your application code <br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 15 gru 2013, o 12:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-12-15T09:51:14+01:00</updated>
<published>2013-12-15T09:51:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61218#p61218</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61218#p61218"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61218#p61218"><![CDATA[
Najprościej to można zrobić w ten sposób, że określamy np 3 prędkości zbliżania się i dajemy 3 ify<br />czyli<br />1. jeżeli temperatura odczytana jest mniejsza od temperatury zadanej o 20 to zwieksz rejestr wypełnienia o 3<br />2. Jeśli jest mniejsza o 10oC to zwieksz wypelnienie o 2<br />3. Jesli jest mniejsza o 5oC to zwieksz wypelnienie o 1<br /><br />no i czwarty warunek zabezpieczajacy<br />else<br />zmniejsz wypełnienie<br /><br />Nie pisze tego kodem, ale jest to tak proste że nie powinieneś mieć z tym żadnego problemu. Jeśli jednak nie będziesz tego mógł zapisać to pomogę - tylko napisz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 15 gru 2013, o 09:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2013-12-15T01:11:53+01:00</updated>
<published>2013-12-15T01:11:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61202#p61202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61202#p61202"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61202#p61202"><![CDATA[
Dziękuje za wszelką pomoc, jednak chodzi o to, że program piszę już konkretnie pod daną płytkę i nie mam możliwości zmiany sprzętowej, lub byłaby ona zbyt praco i czasochłonna.<br />A więc z chęcią podejme się próby okiełznania tej nieznanej mi jeszcze bestii jaką jest PWM, z tym że moglibyście mi napisać tak przykładowo w języku programowym co macie konkretnie na myśli, aby tak posterować PWM aby &quot;zwalniał&quot; zbliżając się do zadanej temperatury? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Czy chodzi o to aby wartość na OCR1A zmniejszała się wraz ze zbliżaniem się do tych 62 stopni?<br />[syntax=c]...<br />if((adc&gt;0)&amp;&amp;(adc&lt;1000)<br />{OCR1A=255; //przy dużo niższej temperaturze maksymalny impuls <br />}<br />if((adc&gt;=1100)&amp;&amp;(adc&lt;1130)&amp;&amp;(i=255)) //przy temperaturze zbliżającej się do 62<br />{i--;<br /> OCR1A=i;<br /><br /> _delay_ms(...); //wartość opóźnienia <br />}<br />...[/syntax]<br />//stosować opóźnienia? Chodzi o to, że nie mogę przewidzieć nawet w przybliżeniu jak szybko grzałka nagrzeje się do tej temperatury, więc stosowanie opóźnień z ustaloną wartością wydaje mi się nielogiczne, z drugiej strony jak sprawić, żeby OCR1A się nie wyzerował zbyt szybko?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 15 gru 2013, o 01:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-12-15T00:15:24+01:00</updated>
<published>2013-12-15T00:15:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61188#p61188</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61188#p61188"/>
<title type="html"><![CDATA[Re: Odp: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61188#p61188"><![CDATA[
Grzałką najlepiej sterować przez PWM Driver i Mosfeta. Zrobiłem taki projekt do solarów, że PWM jest tak dobrane, że próbuje utrzymać zadane napięcie. Zmiana na temperaturę nie będzie kłopotliwwa - a dodatkowo dodać warunki wyhamowywujące PWM po zbliżeniu się do zadanej temperatury też nie będzie problemem a i ciekawy efekt przyniesie. Częstotliwością się nie przejmuj. Dobry szybki driver TC4220 lub TC429 oraz Mosfet mogą pracować przy kilkudziesięciu kHz - a może i nawet  szybciej. U mnie układ pracuje na 2,5kHz i Mosfet mimo 30A nie grzeje się bardzo.<br />Na grzałce będzie się przy większych mocach indukowało wyższe napięcie niż  12V. Dlatego pomyśl o diodzie Schottkiego zabezpieczającej lub o Mosfecie na wyższe napięcie lub jedno i drugie.<br /><br />Wysłane z mojego KM1060G przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 15 gru 2013, o 00:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2013-12-14T19:44:35+01:00</updated>
<published>2013-12-14T19:44:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61120#p61120</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61120#p61120"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61120#p61120"><![CDATA[
<div class="quotetitle">karina12V napisał(a):</div><div class="quotecontent"><br />czytałam, że na grzałce nie może zmieniać się stan ze zbyt dużą częstotliwością,<br /></div><br /><br />...a niby co by jej się stało <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ? Chodzi po prostu o to, że grzałka ma dużą bezwładność cieplną i szybkie zmiany nie będą zauważalne. W Twoim przypadku wypadało by moc grzałki uzależnić w ten sposób od ADC, że w miarę zbliżania się do temperatury nastawionej podawana by była coraz mniejsza moc czyli w tym wypadku zmniejszające się wypełnienie PWM. Częstotliwość PWM może być tu nawet rzędu pojedynczych herców (oczywiście w granicach rozsądku). Takie sterowanie pozwoliło by stabilizować temperaturę praktycznie bez jej przekraczania. Podobne sterowanie stosuje się przy kotłach CO i dmuchawach - czym bliżej zadanej temperatury tym dmuchawa słabiej dmucha w efekcie czego płomień słabnie i przyrost temperatury spowalnia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 gru 2013, o 19:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2013-12-14T17:58:23+01:00</updated>
<published>2013-12-14T17:58:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61104#p61104</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61104#p61104"/>
<title type="html"><![CDATA[Re: Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61104#p61104"><![CDATA[
Ah, zapomniałam napisać że początkowo tranzystor był podłączony pod porty z ADC, jednak w odpowiednim czasie zreflektowałam się i ścieżkę poprowadziłam pod pin PD5 w razie gdybym jednak miała korzystać z PWM.<br />Tak, oczywiście, porównanie logiczne to ==, właśnie dlatego tak ciężko mi się połapać w tym języku.<br /><br />Ed: aa, w kodzie napisałam PC5, oczywiście chodzi o PD5<br />Ed2: czyli sterowanie tranzystorem aby zamykał się i otwierał w okresie 1minuty lepiej rozwiązać z wykorzystaniem wewnętrznego timera? Można ten timer tak zaprogramować aby był niejako &quot;aktywny&quot; przez minutę (tylko przy temperaturze w okolicach 62 (wartość napięcia na ADC ~1130mV), a potem wyłączał się aż do osiągnięcia temperatury szczytowej i przez kolejną minutę był utrzymywał te temperature (wartość napięcia na ADC ~1430)?<br />Książki pana Kardasia jeszcze niestety nie posiadam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 14 gru 2013, o 17:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karina12V]]></name></author>
<updated>2013-12-14T17:59:37+01:00</updated>
<published>2013-12-14T17:35:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61098#p61098</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61098#p61098"/>
<title type="html"><![CDATA[Sterowanie grzałką za pomocą tranzystora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5161&amp;p=61098#p61098"><![CDATA[
Witam,<br />Piszę do was bo mam całkiem poważny problem, a mianowicie- jestem świeżo po wykonaniu swojej pierwszej płytki PCB, teraz przyszła pora na napisanie pod nią oprogramowania. I tak jak z poprzednim zadaniem jakoś sobie poradziłam, tak teraz zaczynają się &quot;schody&quot;, ponieważ dopiero zapoznaje się z językiem C <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Mój projekt zakłada sterowanie grzałką polimeryzatora, a mianowicie coś podobnego do tego [1]. Ponieważ jest to projekt, w którego założeniu było korzystanie z prądu stałego do 12V, więc sterowanie grzałką (12W) ma odbywać się za pomocą tranzystora (schemat zamieszczam poniżej).<br />Temperatura sczytywana jest przez przetwornik MCP9700 podłączony pod pin z ADC (korzysta on z wzoru VOUT= TC* TA +V0°C, gdzie V0C = 0,51V). Pojawiła mi się pewna wątpliwość czy warto stosować PWM do sterowania tranzystorem, czy może obejdzie się bez tego (temperatura grzałki zależy od napięcia, czy napięcie wpływa tylko na czas nagrzewania się grzałki do ustalonej temperatury)? <br /><br />Algorytmicznie program przedstawia się tak:<br />jeśli odczyt z ADC &lt;= 1,13 V bramka jest otwarta (przez grzałke płynie prąd). Gdy ADC (1130;1150&gt; grzałka utrzymuje stałą temperature (zamykanie i otwieranie tranzystora- kwestia jak uzależnić częstotliwość cyklu w zależności od ADC) przez 1min (delay?)-&gt; po upływie tranzystor zamknięty (prąd płynie przez grzałke) aż do ADC = 1430-&gt; jeśli ADC=(1430;1450) tranzystor otwiera się i zamyka przez 1min utrzymując stałą temperature.<br /><br />Z ustawieniem rejestrów sobie poradze, czytałam, że na grzałce nie może zmieniać się stan ze zbyt dużą częstotliwością, (dlatego preskaler winien być jak największy w przypadku PWM?). Największym problemem jest uzależnienie działania tranzystora od odczytu ADC, nie wiem czy to jest zadanie dla przerwań, czy wystarczą pętle warunkowe?)<br /><br />Tutaj wklejam o co mi mniej więcej chodzi, i to co wydaje mi sie ze wiem to wpisałam <br />[syntax=c]while(1) //pętla nieskończona while <br /> {<br />if(ADC&lt;1130))  //pętla warunkowa if<br />{ <br />PORTD &amp;= ~(1&lt;&lt;5);} //gdy temperatura &lt;62stopnie grzałka cały czas otwarta<br />else{<br />if(ADC&gt;1130&amp;&amp;ADC&lt;1200)<br />{<br />//bramka utrzymuje stałą temperature przez 1min (delay)<br />//otwarcie bramki (ADC zlicza)<br />}<br />If(ADC=1430&amp;&amp;ADC&lt;1460)<br />{<br />//bramka utrzymuje stałą temperature przez 1min<br />//po 1min bramka otwiera się, koniec programu<br />PORTD |= (1&lt;&lt;5); //gdy minie 1minuta grzałka się wyłącza<br />}<br /> }[/syntax]<br /><br />Pozdrawiam i licze na porady <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />(1) <a href="https://lh5.googleusercontent.com/-u236TEbp3rs/UfeBTBn1p7I/AAAAAAAAHf4/MxHRtPMQEbc/s483/Przebieg%2520temp..jpg?gl=PL"  class="postlink">https://lh5.googleusercontent.com/-u236TEbp3rs/UfeBTBn1p7I/AAAAAAAAHf4/MxHRtPMQEbc/s483/Przebieg%2520temp..jpg?gl=PL</a><br />(2)<a href="http://forum.atnel.pl/_obrazki/o/2238/5be0b37a6c7932f6426f953d3d1e9a2c.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2238/5be0b37a6c7932f6426f953d3d1e9a2c.png" alt="Obrazek" /></a><br /><br /><br /><span style="color: #FF0000">Kody umieszczamy przy pomocy syntax=c - Różowy J.<br />Dziwny sposób pisania postu</span> <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2238">karina12V</a> — 14 gru 2013, o 17:35</p><hr />
]]></content>
</entry>
</feed>