<?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=2824&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-04-10T19:32:11+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2824&amp;mode</id>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-10T19:32:11+01:00</updated>
<published>2013-04-10T19:32:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34043#p34043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34043#p34043"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34043#p34043"><![CDATA[
No można, Lecz to wiele nie dało <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Ale że to będzie regulować grzałką niema sensu rozgrzebywać tego problemu. <br /><br />Mam za to problem z którym se nie mogę poradzić. Próbuję teraz zrobić tak że jak mam już wartość procent jaką ma grzać lub chłodzić to ma załączyć timera i z odpowiednią mocą pracować. Mam taki warunek który załącza albo regulacje mocy grzania albo chłodzenia:<br />[syntax=c]if (grzanie_chlodzenie == 1) { //warunek sprawdzający czy grzać<br />off_t_moc_wiania();<br />t_moc_grzania(); //włączenie timera do regulacji mocy grzania<br />kanal1 = procent(moc_g); //% mocy grzania<br />//grzanie_chlodzenie = 0; //zebezpieczninie przed ciągłym włączanie i wyłączaniem ustawień timera w pętli<br />}<br /><br />if (grzanie_chlodzenie == 2) { //warunek sprawdzający czy chłodzić<br />off_t_moc_grzania();//wyłączenie ustawień timera regulatora grzania<br />t_moc_wiania(); //właczenie timera do regulacji mocy wiadnia<br />OCR0 = procent_ch(moc_w); //zamiana mocy podanej w % na wartość od 0 do 255 OCR0<br />//grzanie_chlodzenie = 0; //zebezpieczninie przed ciągłym włączanie i wyłączaniem ustawień timera w pętli<br />}[/syntax]<br /><br />Wartość zmiennej grzanie_chlodzenie jest inicjalizowane z tej funkcji:<br />[syntax=c]if(auto_manual==1){<br />static i16 temp_a;<br />static i16 temp_z;<br />//static u08 moc_g_temp = 0;<br />//static u08 moc_w_temp = 0;<br />temp_a = (cel * 10 + cel_fract_bits);<br />temp_z = (cel_z * 10 + cel_z_ulamek);<br /><br />const u08 rt &#91;10&#93; = {2, 4, 6, 8, 10, 15, 20, 25, 30, 35};<br />const u08 prg &#91;10&#93; = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};<br />moc_g = 0;<br />for (u08 g=0; g&lt;10; g++){<br />if ((temp_z - temp_a) &gt; rt&#91;g&#93;)moc_g = prg&#91;g&#93;;<br /><br />}<br />moc_w = 0;<br />for (u08 w=0; w&lt;10; w++){<br />if ((temp_a - temp_z) &gt; rt&#91;w&#93;)moc_w = prg&#91;w&#93;;<br /><br />}<br />lcd_locate(1,13);<br />lcd_int(moc_g);<br />lcd_locate(1,9);<br />lcd_int(moc_w);<br /><br />if(moc_g &gt; 0)  {<br />grzanie_chlodzenie = 1;<br />}<br />if(moc_w &gt; 0)  {<br />grzanie_chlodzenie = 2;<br />}<br /><br />}[/syntax]<br /><br />I efekt mam taki że na LCD ładnie pokazuje z jaką mocą ma grzać lub chłodzić ale praca układu nie działa do końca.<br />Gdy załączę jako pierwsze grzanie_chlodzenie == 2 czyli chłodzenie to działa. Jest regulacja mocy wiania od 0 do 100% Jak włączę grzanie_chlodzenie == 1 czyli regulacje mocy grzania to regulacja mocy grzania też jest. Jednak jak ponownie mam wrócić do grzanie_chlodzenie == 2 czyli chłodzenia to już nie ma regulacji wiania. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Plik:<br />grzanie.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;moje_definicje.h&quot;<br />#include &quot;grzanie.h&quot;<br /><br />volatile uint8_t kroki;<br />volatile uint8_t kanal1;<br />volatile uint8_t ika1;<br /><br />//#define procent(x) ((x*(LICZBA_KROKOW-1))/100)<br /><br />uint8_t procent(uint8_t pr) {<br />return (pr * (LICZBA_KROKOW - 1)) / 100;<br />}<br /><br />//--------------------Ustawienie timera regulatora mocy grzałki<br />void t_moc_grzania(void) {<br />T_ZAR1_OFF; //przerwania układu detekcji zera<br />MCUCR |= (1 &lt;&lt; ISC01) | (1 &lt;&lt; ISC00); // zbocze narastające<br />GICR |= (1 &lt;&lt; INT0); // odblokowanie INT0<br /><br />TCCR0 |= (1 &lt;&lt; WGM01); // tryb CTC<br />TIMSK |= (1 &lt;&lt; OCIE0); // odblokowanie przerwania COMPARE MATCH<br />OCR0 = 48;<br />}<br />//--------------------Ustawienie timera regulatora mocy grzałki - KONIEC<br /><br />//--------------------Wyłączenie ustawienie timera regulatora mocy grzałki<br /><br />void off_t_moc_grzania(void) {<br /><br />//MCUCR  &amp;= ~(1 &lt;&lt; ISC01) &amp; ~(1 &lt;&lt; ISC00); // zbocze narastające<br />//GICR &amp;= ~(1 &lt;&lt; INT0); // odblokowanie INT0<br /><br />TCCR0 &amp;= ~(1 &lt;&lt; WGM01); // tryb CTC<br />TIMSK &amp;= ~(1 &lt;&lt; OCIE0); // odblokowanie przerwania COMPARE MATCH<br /><br />}<br /><br />//--------------------Wyłączenie ustawienie timera regulatora mocy grzałki - KONIEC<br /><br />//--------------------Przerwanie regulatora mocy grzania<br />ISR(INT0_vect)<br />{<br />TIMER0_STOP;<br />T_ZAR1_OFF;<br /><br />kroki = LICZBA_KROKOW;<br /><br />/* podwójne buforowanie, synchronizacja do 50Hz */<br />ika1 = kanal1;<br /><br />TCNT0 = 0;<br />TIMER0_START;<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />if (ika1 &amp;&amp; kroki == ika1)<br />T_ZAR1_ON;<br />kroki--;<br />}<br />//--------------------Przerwanie regulatora mocy grzania - KONIEC[/syntax]<br /><br />grzanie.h:<br />[syntax=c]#ifndef GRZANIE_H_<br />#define GRZANIE_H_<br /><br />/*********************** D I M M E R  -   U S T A W I E N I A   ***************************/<br />#define LICZBA_KROKOW 200<br /><br />// czas trwania szpilki (Detekcja ZERA) wyrażony w milisekundach np: 1,2,... albo np: 0.5<br />#define SZPILKA_MS 0.8<br />/*********************** D I M M E R  -   U S T A W I E N I A   ***************************/<br /><br />#define __OCR_STEP ((F_CPU/8)*((1000-((SZPILKA_MS*100)/2))/LICZBA_KROKOW))/100000<br /><br /><br />#define T_ZAR1_ON PORTD |= (1&lt;&lt;PD1)<br />#define T_ZAR1_OFF PORTD &amp;= ~(1&lt;&lt;PD1)<br /><br />#define TIMER0_START TCCR0 |= (1&lt;&lt;CS01)// prescaler=8 (CS01)<br />#define TIMER0_STOP TCCR0 &amp;= ~(1&lt;&lt;CS01)// prescaler off<br /><br /><br />extern volatile uint8_t kroki;<br />extern volatile uint8_t kanal1;<br />extern volatile uint8_t ika1;<br /><br /><br />uint8_t procent(uint8_t pr);<br />void t_moc_grzania(void);<br />void off_t_moc_grzania(void);<br /><br /><br />#endif /* GRZANIE_H_ */[/syntax]<br /><br />chlodzenie.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;moje_definicje.h&quot;<br />#include &quot;chlodzenie.h&quot;<br /><br /><br /><br /><br />uint8_t procent_ch(uint8_t pr_ch) {<br />return ((pr_ch * 255) / 100);<br /><br />}<br /><br />//--------------------Ustawienie timera regulatora mocy wiania<br />void t_moc_wiania(void) {<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br /><br />// ustawienia TIMER2 w Fast PWM<br />TCCR0 |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00); // tryb Fast PWM<br />TCCR0 |= (1 &lt;&lt; COM01) | (1 &lt;&lt; COM00); // set at TOP<br />TCCR0 |= (1 &lt;&lt; CS02); // preskaler<br /><br /><br />}<br />//--------------------Ustawienie timera regulatora mocy wiania - KONIEC<br /><br />//--------------------Ustawienie timera regulatora mocy wiania<br /><br />void off_t_moc_wiania(void) {<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br /><br /> //ustawienia TIMER2 w Fast PWM<br />TCCR0 &amp;= ~(1 &lt;&lt; WGM01) &amp; ~(1 &lt;&lt; WGM00); // tryb Fast PWM<br />TCCR0 &amp;= ~(1 &lt;&lt; COM01) &amp; ~(1 &lt;&lt; COM00); // set at TOP<br />TCCR0 &amp;= ~(1 &lt;&lt; CS02); // preskaler<br /><br />}<br /><br />//--------------------Ustawienie timera regulatora mocy wiania - KONIEC[/syntax]<br /><br />chlodzenie.h:<br />[syntax=c]#ifndef CHLODZENIE_H_<br />#define CHLODZENIE_H_<br /><br /><br />uint8_t procent_ch(uint8_t pr_ch);<br />void t_moc_wiania(void);<br />void off_t_moc_wiania(void);<br /><br /><br /><br /><br /><br /><br />#endif /* CHLODZENIE_H_ */[/syntax]<br /><br />I nie wiem co mogę z tym zrobić <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 10 kwi 2013, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[strzelec]]></name></author>
<updated>2013-04-10T17:59:54+01:00</updated>
<published>2013-04-10T17:59:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34034#p34034</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34034#p34034"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34034#p34034"><![CDATA[
Pierwsze co się rzuca to po co 2 razy wykonywać funkcję DS18X20_read_meas<br /><br />można tak:<br />[syntax=c]u08 pomiar_temp(void){<br />     <br />        if(flag_term)<br />        {<br />               temp = DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br />               if ( DS18X20_OK != temp )<br />              {<br />                       temp = 0;<br />                       czujniki_cnt = search_sensors();<br />              }<br />              DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );<br />              flag_term = 0;<br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=842">strzelec</a> — 10 kwi 2013, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-10T17:12:41+01:00</updated>
<published>2013-04-10T17:12:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34032#p34032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34032#p34032"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=34032#p34032"><![CDATA[
Odkryłem ze za migotanie odpowiedzialna jest funkcja:<br />[syntax=c]u08 pomiar_temp(void){<br /><br />    if(flag_term)<br />    {<br />           if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )<br />                            temp = DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br />           else<br />          {<br />                   temp = 0;<br />                   czujniki_cnt = search_sensors();<br />          }<br />          DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );<br />          flag_term = 0;<br />    }[/syntax]<br /><br />To chyba sporo by trzeba było przerobić w programie obsługi pomiaru temp.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 10 kwi 2013, o 17:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-09T21:02:00+01:00</updated>
<published>2013-04-09T21:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33986#p33986</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33986#p33986"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33986#p33986"><![CDATA[
to porównania mam w postaci całkowitej. <br />Coś działa ale mam problem z mocą grzania, A dokładniej że jak podłączę zamiast grzałki żarówkę do testów to ona miga. <br />Problem leży po stronie inicjalizacja timera. Ponieważ jeden timer jest wykorzystany do sterowania mocy grzania i do regulacji obrotów wentylatora. Nie ma możliwości by pracowała grzałka i wentylator razem. Pracuje albo jedno albo drugie. <br />Wcześniej jak dostosowałem kod do mojego projektu, to moc zgrzania zmieniałem z klawiatury. I w zależności co włączyłem to albo grzało albo wiało. Jeden timer włączał a 2 wyłączał. coś takiego:<br />[syntax=c]if (grzanie_chlodzenie == 1) { //warunek sprawdzający czy grzać<br />off_t_moc_wiania();<br />t_moc_grzania(); //włączenie timera do regulacji mocy grzania<br />kanal1 = procent(moc_g); //% mocy grzania<br /><br />}<br />if (grzanie_chlodzenie == 2) { //warunek sprawdzający czy chłodzić<br />off_t_moc_grzania(); //wyłączenie ustawień timera regulatora grzania<br />t_moc_wiania(); //właczenie timera do regulacji mocy wiadnia<br />OCR0 = procent_ch(moc_w); //zamiana mocy podanej w % na wartość od 0 do 255 OCR0<br /><br />}[/syntax]<br />Wcześniej jak testowałem to przy podłączonej żarówce też migało. Lecz po wprowadzeniu zmiennej: grzanie_chlodzenie = 0; świeciła równo. Teraz funkcja wygląda tak: <br /><br />[syntax=c]if(auto_manual==1){<br />static i16 temp_a;<br />static i16 temp_z;<br />static u08 moc_g_temp;<br />temp_a = (cel * 10 + cel_fract_bits);<br />temp_z = (cel_z * 10 + cel_z_ulamek);<br /><br />const u08 rt &#91;10&#93; = {2, 4, 6, 8, 10, 15, 20, 25, 30, 35};<br />const u08 prg &#91;10&#93; = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};<br />moc_g = 0;<br />for (u08 x=0; x&lt;10; x++){<br />if ((temp_z - temp_a) &gt; rt&#91;x&#93;)moc_g = prg&#91;x&#93;;<br />}<br /><br />lcd_locate(1,13);<br />lcd_int(moc_g);<br />if (moc_g_temp != moc_g) {<br />moc_g_temp = moc_g;<br />grzanie_chlodzenie = 1;<br />}<br />else grzanie_chlodzenie = 0;<br /><br /><br /><br />}[/syntax]<br /><br />I  działa w pętli głównej. Co powoduje delikatne miganie. Oczywiście nie będzie to odczuwalne dla grzałki ale jak już coś takiego robię to interesuje mnie czy da się ten efekt w moim przypadku usunąć. Próbowałem już sam coś wykombinować ze zmienną moc_g_temp , troszkę polepszyło ale nie w 100%.<br /><br />A tak wyglądają funkcje :<br />[syntax=c]//--------------------Ustawienie timera regulatora mocy wiania<br />void t_moc_wiania(void) {<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br /><br />// ustawienia TIMER2 w Fast PWM<br />TCCR0 |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00); // tryb Fast PWM<br />TCCR0 |= (1 &lt;&lt; COM01) | (1 &lt;&lt; COM00); // set at TOP<br />TCCR0 |= (1 &lt;&lt; CS02); // preskaler<br /><br /><br />}<br />//--------------------Ustawienie timera regulatora mocy wiania - KONIEC<br /><br />//--------------------Ustawienie timera regulatora mocy wiania<br />void off_t_moc_wiania(void) {<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br /><br /> //ustawienia TIMER2 w Fast PWM<br />TCCR0 &amp;= ~(1 &lt;&lt; WGM01) &amp; ~(1 &lt;&lt; WGM00); // tryb Fast PWM<br />TCCR0 &amp;= ~(1 &lt;&lt; COM01) &amp; ~(1 &lt;&lt; COM00); // set at TOP<br />TCCR0 &amp;= ~(1 &lt;&lt; CS02); // preskaler<br /><br />}<br />//--------------------Ustawienie timera regulatora mocy wiania - KONIEC<br /><br />//--------------------Ustawienie timera regulatora mocy grzałki<br />void t_moc_grzania(void) {<br />T_ZAR1_OFF; //przerwania układu detekcji zera<br />MCUCR |= (1 &lt;&lt; ISC01) | (1 &lt;&lt; ISC00); // zbocze narastające<br />GICR |= (1 &lt;&lt; INT0); // odblokowanie INT0<br /><br />TCCR0 |= (1 &lt;&lt; WGM01); // tryb CTC<br />TIMSK |= (1 &lt;&lt; OCIE0); // odblokowanie przerwania COMPARE MATCH<br />OCR0 = __OCR_STEP;<br />}<br />//--------------------Ustawienie timera regulatora mocy grzałki - KONIEC<br /><br />//--------------------Wyłączenie ustawienie timera regulatora mocy grzałki<br />void off_t_moc_grzania(void) {<br /><br />MCUCR  &amp;= ~(1 &lt;&lt; ISC01) &amp; ~(1 &lt;&lt; ISC00); // zbocze narastające<br />GICR &amp;= ~(1 &lt;&lt; INT0); // odblokowanie INT0<br /><br />TCCR0 &amp;= ~(1 &lt;&lt; WGM01); // tryb CTC<br />TIMSK &amp;= ~(1 &lt;&lt; OCIE0); // odblokowanie przerwania COMPARE MATCH<br /><br />}<br />//--------------------Wyłączenie ustawienie timera regulatora mocy grzałki - KONIEC[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 9 kwi 2013, o 21:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-09T20:41:15+01:00</updated>
<published>2013-04-09T20:41:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33982#p33982</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33982#p33982"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33982#p33982"><![CDATA[
Może zamiast trzymać temperaturę w dwóch zmiennych zastosuj liczbę stało przeciekową np. gdy temperatura 32,7*c to liczba stało przecinkowca by była 327, do wyświetlenia to już tylko rozbijanie na dwa człony przez operacje dzielenia dla liczby całkowitej (327/10) oraz dla liczby po przecinku dzielenie nodulo (327%10).<br /><br />Gdy przychodzi pora porównania temperatury to nie ma potrzeby pisania dwóch warunków a co za tym idzie około 10 bajtów kodu np:<br />[syntax=c]if(((temp1_calk &gt;=30) &amp;&amp; (temp1_ulam &gt;=0)) &amp;&amp; ((temp1_calk &lt; 31) &amp;&amp;(temp1_ulam &lt; 5)))[/syntax]wystarczy [syntax=c]if(temp1&gt;=300 &amp;&amp; temp1 &lt; 315)[/syntax]<br /> to tak w odniesieniu do całości projektu i innhych tematów z nim związanych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 9 kwi 2013, o 20:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-09T19:14:19+01:00</updated>
<published>2013-04-09T19:14:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33963#p33963</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33963#p33963"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33963#p33963"><![CDATA[
No muszę przeanalizować wszystko:(<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 9 kwi 2013, o 19:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[strzelec]]></name></author>
<updated>2013-04-09T18:58:27+01:00</updated>
<published>2013-04-09T18:58:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33960#p33960</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33960#p33960"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33960#p33960"><![CDATA[
sprawdziłem i w tym programie wszystko działa prawidłowo, więc chyba błąd jest w innym miejscu.<br />Poniżej przykładowy kod na którym testowałem<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />int main(void){<br />lcd_init();<br />lcd_cls();<br />lcd_locate(0,0);<br /><br />        uint8_t temp_a = 210;<br />        uint8_t temp_z = 215;<br /><br />        const uint8_t rt &#91;10&#93; = {2, 4, 6, 8, 10, 15, 20, 25, 30, 35};<br />        const uint8_t prg &#91;10&#93; = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};<br />        uint8_t moc_g = 0;<br />        for (uint8_t x=0; x&lt;10; x++){<br />             if ((temp_z - temp_a) &gt; rt&#91;x&#93;) moc_g = prg&#91;x&#93;;<br />        }<br /><br />lcd_int(moc_g);<br />while(1);<br /><br />}[/syntax]<br /><br />no i wyszło jeszcze jedno małe ale! Warunek brzegowy w pętli for. Tablicę masz 10 elementową a dla zapisu x&lt;9 ostatnią wartością x będzie 8 czyli źle, bo nie sprawdzisz ostatniego elementu. Powinno być tak jak powyżej x&lt;10 lub x&lt;=9. <br /><br />I jeszcze jedno. wyświetl sobie wynik (temp_z - temp_a) czy czasem nie jest ujemny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=842">strzelec</a> — 9 kwi 2013, o 18:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-09T18:02:38+01:00</updated>
<published>2013-04-09T18:02:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33951#p33951</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33951#p33951"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33951#p33951"><![CDATA[
cel i cel_fract_bits to dane z czujnika DS18B20 a cel_z i  cel_z_ulamek to sam ustawiam z klawiatury. <br />Sprawdzałem co kryje się pod zmienną temp_z i temp_a i gdy ustawie np temperaturę 21 z klawiatury dla zmiennej temp_z to ma 210<br />a czujnik jak wskazuje temp 23,4 C to zmienna temp_a ma 234.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 9 kwi 2013, o 18:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[strzelec]]></name></author>
<updated>2013-04-09T17:53:25+01:00</updated>
<published>2013-04-09T17:53:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33950#p33950</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33950#p33950"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33950#p33950"><![CDATA[
a jakie wartości masz w cel, cel_fract_bits, cel_z, cel_z_ulamek?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=842">strzelec</a> — 9 kwi 2013, o 17:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-09T17:41:13+01:00</updated>
<published>2013-04-09T17:41:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33949#p33949</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33949#p33949"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33949#p33949"><![CDATA[
Tak też nie działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 9 kwi 2013, o 17:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[strzelec]]></name></author>
<updated>2013-04-09T17:14:53+01:00</updated>
<published>2013-04-09T17:14:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33946#p33946</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33946#p33946"/>
<title type="html"><![CDATA[Re: Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33946#p33946"><![CDATA[
Warunek działa ale tylko dla (temp_z - temp_a) &gt; 35 bo w każdym innym przypadku moc_g jest zerowana.<br /><br />spróbuj tak<br /><br />[syntax=c]if(auto_manual==1){<br />      temp_a = (cel * 10 + cel_fract_bits);<br />      temp_z = (cel_z * 10 + cel_z_ulamek);<br />     <br />      const u08 rt &#91;10&#93; = {2, 4, 6, 8, 10, 15, 20, 25, 30, 35};<br />      const u08 prg &#91;10&#93; = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};<br />      moc_g = 0;<br />      for (u08 x=0; x&lt;9; x++){<br />         if ((temp_z - temp_a) &gt; rt&#91;x&#93;) moc_g = prg&#91;x&#93;;<br />      }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=842">strzelec</a> — 9 kwi 2013, o 17:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-09T16:50:42+01:00</updated>
<published>2013-04-09T16:50:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33945#p33945</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33945#p33945"/>
<title type="html"><![CDATA[Regulacja mocą grzania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2824&amp;p=33945#p33945"><![CDATA[
Witam. Próbuję zrobić warunek który ma sterować mocą grzałki zależną od różnicy temperatury zadanej a aktualnej.<br />Inaczej mówiąc chcę osiągnąć taki efekt:<br />Gdy różnica temperatur między zadaną a aktualną jest 0,2deg to ma przypisać do zmiennej moc_g 10.<br />Gdy różnica między 0,2 a 0,4 to ma być 20. I tak dalej.<br />Napisałem taki warunek ale on zupełnie nie działa <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />[syntax=c]if(auto_manual==1){<br />temp_a = (cel * 10 + cel_fract_bits);<br />temp_z = (cel_z * 10 + cel_z_ulamek);<br /><br />const u08 rt &#91;10&#93; = {2, 4, 6, 8, 10, 15, 20, 25, 30, 35};<br />const u08 prg &#91;10&#93; = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};<br />for (u08 x=0; x&lt;9; x++){<br />if ((temp_z - temp_a) &gt; rt&#91;x&#93;)<br />moc_g = prg&#91;x&#93;;<br />else moc_g = 0;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 9 kwi 2013, o 16:50</p><hr />
]]></content>
</entry>
</feed>