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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-12-18T15:17:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17098&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-12-18T15:07:52+01:00</updated>
<published>2016-12-18T15:07:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17098&amp;p=177818#p177818</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17098&amp;p=177818#p177818"/>
<title type="html"><![CDATA[Re: Projekty wielozadaniowe problemy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17098&amp;p=177818#p177818"><![CDATA[
<span style="color: #FF0000"><strong>Proszę się zapoznać z zasadami forum i poprawić umieszczenie kodu <br />w przeciwnym wypadku temat zostanie poddany likwidacji</strong></span><br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic14999.html" >topic14999.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 18 gru 2016, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mario20]]></name></author>
<updated>2016-12-18T15:17:15+01:00</updated>
<published>2016-12-18T14:58:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17098&amp;p=177817#p177817</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17098&amp;p=177817#p177817"/>
<title type="html"><![CDATA[Projekty wielozadaniowe problemy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17098&amp;p=177817#p177817"><![CDATA[
Witam,<br />Chciałbym sobie zrobić sterownik do pieca co z regulowanymi obrotami wentylatora .<br />Cały projekt ma dwa czujniki temperatury DS18B20 <br />Do obsługi czujników wykorzystam część bibiotek z projektu wielozadaniowego .<br />1Wire,LCD .<br />Natomiast do obsługi obrotów wentylatora projekt 18_RegulacjaMocy230V.<br />No i tu jest moje pytanie jak połaczyć te dwa projekty żeby stworzyć własny.<br />Próbowałem to wstawić w cod ale bez rezultatów <br />[syntax=c]&#91;code&#93;#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />#define LED1 (1&lt;&lt;PC3)// zwykła dioda LED<br />#define LED2 (1&lt;&lt;PA7)// podświetlenie LCD<br /><br />#define LED1_ON PORTC &amp;= ~LED1<br />#define LED1_OFF PORTC |= LED1<br />#define LED1_TOG PORTC ^= LED1<br />#define LED2_ON PORTA |= LED2<br />#define LED2_OFF PORTA &amp;= ~LED2<br />#define LED2_TOG PORTA ^= LED2<br />#define LED1_DDR DDRC<br />#define LED2_DDR DDRA<br /><br />#define KL1 (1&lt;&lt;PD3)<br />#define KL2 (1&lt;&lt;PD4)<br />#define KL3 (1&lt;&lt;PD5)<br />#define KL4 (1&lt;&lt;PD7)<br />#define KL_DDR DDRD<br />#define KL_PORT PORTD<br /><br /><br /><br />//******************************* deklaracje funkcji<br />void display_temp(uint8_t x);<br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec);<br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd);<br /><br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************/<br /><br />//******************************* definicje zmiennych globalnych i typów<br />uint8_t subzero, cel, cel_fract_bits;<br />uint8_t czujniki_cnt;/* ilość czujników na magistrali */<br /><br />volatile uint8_t int0_flag=1;// flaga zmieniana w przerwaniu i sprawdzana w pętli głównej<br /><br />// definiujemy sobie dla polepszenia czytelności programu typ wyliczeniowy<br />// wskazujący nam później na odpowiednie indeksy w tablicy (buforze)<br />enum {ss=1, mm, hh};<br />uint8_t bufor&#91;4&#93;;// rezerwacja bufora 4 bajty<br />uint8_t sekundy, minuty, godziny;<br /><br />// definicja znaku stopnia Celsiusza dla temperatury<br />uint8_t stopien&#91;&#93; = {12,18,18,12,32,32,32,32};<br /><br />volatile uint16_t Timer1, Timer2, Timer3, Timer4;/* timery programowe 100Hz */<br /><br />uint8_t lcd_blink;/* zmienna odpowiedzialna za załączanie migotania podświetlenia LCD */<br />uint8_t lcd_cnt;/* zmienna licznik do wyświetlania na LCD */<br /><br /><br />/*----------------------------- główna funkcja programu  ---------------*/<br />int main(void) {<br /><br /><br />/*----------------------------- inicjalizacja kierunków pinów  ---------------*/<br />// ustalamy kierunki portów klawiszy na wyjściowe<br />KL_DDR &amp;= ~(KL1|KL2|KL3|KL4);<br />// włączamy podciąganie do VCC<br />KL_PORT |= KL1|KL2|KL3|KL4;<br /><br />// ustalamy kierunki pinów diod LED<br />LED1_DDR |= LED1; LED2_DDR |= LED2;<br />// wyłączay diodę<br />LED1_OFF;<br />// załączamy podświetlenie<br />LED2_ON;<br /><br /><br /><br />/*----------------------------- inicjalizacja przerwań  ---------------*/<br />// Przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadającym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);// podciągnięcie pinu INT0 do VCC<br /><br />/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 107;// przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br /><br /><br /><br />/*----------------------------- inicjalizacja modułów programowych  ---------------*/<br />/* inicjalizacja multipleksowania LED */<br /><br />/* inicjalizacja LCD */<br />lcd_init();<br />lcd_str(&quot;Start...&quot;);<br />lcd_defchar(0x80,stopien); // definicja znaku stopnia w LCD<br /><br />/* inicjalizacja odbiornika podczerwieni RC5 */<br /><br /><br />/* inicjalizacja USART */<br /><br />/* inicjalizacja 18_RegulacjaMocy230V */<br />// Przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00);// zbocze narastające<br />GICR |= (1&lt;&lt;INT0);// odblokowanie INT0<br /><br /><br /><br /><br />/* globalne  odblokowanie przerwań */<br />sei();<br /><br /><br /><br />/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />czujniki_cnt = search_sensors();<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br />_delay_ms(1500);<br /><br />lcd_cls();<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty */<br />/* wyświetlamy temperaturę gdy czujnik wykryty */<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br /><br />uint8_t tcl=0;<br /><br />char input;<br />uint8_t k1=0, k2=0;  // zmienne pomocnicze do przechowywania stanu klawiszy<br /><br />while(1) {<br /><br />SuperDebounce(&amp;k1, &amp;PIND, KL1, 20, 500, kl1_press, kl1_rep );<br />SuperDebounce(&amp;k2, &amp;PIND, KL2, 80, 400, kl2_press, kl2_rep );<br /><br />if(!Timer2) {<br />Timer2=25;<br />if( lcd_blink ) LED2_TOG;<br />}<br /><br /><br /><br />if(input=='1') LED2_ON;<br />else<br />if(input=='2') LED2_OFF;<br />else<br />if(input=='3') lcd_blink ^= 1;<br /><br />/* ****** ZDARZENIE Z UKŁADU RTC ********** */<br />if ( int0_flag ) {<br />//odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC<br /><br /><br />// wyświetlenie czasu na LCD<br />lcd_locate(0,8);<br />if( godziny &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(godziny);<br />lcd_str(&quot;:&quot;);<br />if( minuty &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(minuty);<br />lcd_str(&quot;:&quot;);<br />if( sekundy &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(sekundy);<br /><br />if(!tcl) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />if(tcl) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />}<br /><br />if(++tcl&gt;1) tcl=0;<br /><br />int0_flag=0;<br />}<br /><br /><br />}<br />}<br /><br /><br />// procedura obsługi przerwania INT 0<br />ISR( INT0_vect ) {<br />int0_flag = 1;<br />}<br /><br /><br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />n = Timer3;/* 100Hz Timer3 */<br />if (n) Timer3 = --n;<br />n = Timer4;/* 100Hz Timer4 */<br />if (n) Timer4 = --n;<br />}<br /><br /><br /><br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************<br /> * AUTOR: Mirosław Kardaś<br /> * ZALETY:<br /> * - nie wprowadza najmniejszego spowalnienia<br /> * - posiada funkcję REPEAT (powtarzanie akcji dla dłużej wciśniętego przycisku)<br /> * - można przydzielić różne akcje dla trybu REPEAT i pojedynczego kliknięcia<br /> * - można przydzielić tylko jedną akcję wtedy w miejsce drugiej przekazujemy 0 (NULL)<br /> *<br /> * Wymagania:<br /> * Timer programowy utworzony w oparciu o Timer sprzętowy (przerwanie 100Hz)<br /> *<br /> * Parametry wejściowe:<br /> * *key_state - wskaźnik na zmienną w pamięci RAM (1 bajt)<br /> *  *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB<br /> *  key_mask - maska klawisza np: (1&lt;&lt;PB3)<br /> *  rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT<br /> *  rep_wait - czas oczekiwania do przejścia do trybu REPEAT<br /> *  push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku<br /> *  rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT<br /> **************************************************************************************/<br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />Cod z projektu 19 bluboks<br /><br /><br />/* wyświetlanie temperatury na pozycji X w drugiej linii LCD */<br />void display_temp(uint8_t x) {<br />lcd_locate(1,x);<br />if(subzero) lcd_str(&quot;-&quot;);/* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />else lcd_str(&quot; &quot;);/* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />lcd_int(cel);/* wyświetl dziesiętne części temperatury  */<br />lcd_str(&quot;.&quot;);/* wyświetl kropkę */<br />lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />lcd_str(&quot;\x80&quot;&quot;C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />}[/syntax]<br />Tylko gdzie umieścić odwołanie do tego kodu Czy z tego kodu poniżej zrobić bibilotekę ?<br />Sorki zę zadaje pytania ale dopiero zaczynam programować w c dlatego proszę o podpowiedzi <br />[syntax=c]*********************** 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 1.8<br />/*********************** D I M M E R  -   U S T A W I E N I A   ***************************/<br /><br />Cod z projektu 18_RegulacjaMocy230V Bluboks[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13822">Mario20</a> — 18 gru 2016, o 14:58</p><hr />
]]></content>
</entry>
</feed>