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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-09-30T18:50:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=4338&amp;mode</id>
<entry>
<author><name><![CDATA[pawcio0928]]></name></author>
<updated>2013-09-30T18:50:01+01:00</updated>
<published>2013-09-30T18:50:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4338&amp;p=51441#p51441</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4338&amp;p=51441#p51441"/>
<title type="html"><![CDATA[[KONKURS LATO 2013]Podlewacz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4338&amp;p=51441#p51441"><![CDATA[
W projekcie wykorzystałem zestaw ATB 1.04, trochę drutu, pompkę od kolegi sosnus (za co mu bardzo dziękuje  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  ), oraz trochę drobnicy. Przejdźmy do rzeczy. Zadanie zostało wykonane zostało tylko po części, tzn że nie zostało przewidziane więcej niż 1 kwiatek (chodź w prosty sposób można zrobić aby mogło być więcej). Oto schemat całego urządzenia(wiem trochę laurka, ale da się ogarnąć o co w nim chodzi), oraz złożony układ:<br /><a href="http://forum.atnel.pl/_obrazki/o/341/890b2e9fb667db43a63018c7b7725537.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/341/890b2e9fb667db43a63018c7b7725537.JPG" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/341/e98a0ccf98334f5e45ed5eceb9a3923c.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/341/e98a0ccf98334f5e45ed5eceb9a3923c.JPG" alt="Obrazek" /></a><br />Rolę czujnika pełni drut telefoniczny:<br /><a href="http://forum.atnel.pl/_obrazki/o/341/0c8c634c742587cf11d51e9a027776da.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/341/0c8c634c742587cf11d51e9a027776da.JPG" alt="Obrazek" /></a><br />Jego zaletą jest cena, a wadą, że jak płynie przez niego prąd to zachodzi elektroliza. Dlatego należałoby zabezpieczyć drut czymś przed tym negatywnym procesem.<br />Ale przejdźmy do &quot;wnętrza&quot; całego projektu. Cały program został przerobiony z przykładu z książki o twi. Dodałem tam kilka warunków, oraz pomiar adc. Oto kod źródłowy:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-07<br /> *       Autor: Mirosław Kardaś<br /> *       przeróbki: pawcio0928<br /> *<br /> *       Program korzysta ze sprzętowej obsługi I2C/TWI<br /> *       Umożliwia zapis danych do RTC oraz EEPROM a także<br /> *       oczyt z tych urządzeń<br /> *<br /> */<br />#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;I2C_TWI/i2c_twi.h&quot;<br /><br /><br />#define PCF8583_ADDR 0xA2<br /><br />//przekaźnik<br />#define P_PIN (1&lt;&lt;PD7)<br />#define P_on PORTD |= P_PIN<br />#define P_off PORTD &amp;= ~P_PIN<br /><br />uint16_t pomiar_adc(uint8_t kanal);<br />void adc_init(void);<br /><br /><br /><br />// utworzenie typu u08, odpowiednika uint8_t aby kod był bardziej czytelny<br />typedef unsigned char  u08;<br />typedef unsigned short u16;<br /><br /><br /><br />volatile uint8_t int0_flag=1;// flaga zmieniana w przerwaniu i sprawdzana w pętli głównej<br /><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 /><br /><br />int main(void) {<br /><br />DDRD |= P_PIN;//przekaźnik<br />P_off;<br /><br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7); // podświetlenie wyświetlacza LCD<br /><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 /><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 />adc_init();<br /><br />lcd_init();<br /><br />i2cSetBitrate(100);<br /><br /><br />sei();<br /><br />lcd_str_P(PSTR(&quot;Podlewacz&quot;));<br /><br />// Ustawianie czasu na godzinę: 18:34:27<br /><br />bufor&#91;0&#93; = 0;// setne części sekundy<br />bufor&#91;1&#93; = dec2bcd(50);// sekundy<br />bufor&#91;2&#93; = dec2bcd(43);// minuty<br />bufor&#91;3&#93; = dec2bcd(19);// godziny<br />// zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC<br />TWI_write_buf( PCF8583_ADDR, 0x01, 4, bufor );<br /><br /><br /><br /><br />while(1) {<br />if(godziny==18)<br />{<br />if(pomiar_adc(0)&lt;500)<br />{<br />P_on;<br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;Podlewanie 1&quot;));<br />}<br />else<br />{<br />P_off;<br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;Done          &quot;));<br />}<br />}<br />else<br />{<br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;Zla godzina&quot;));<br />}<br />if ( int0_flag ) {<br />//odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC<br />TWI_read_buf( PCF8583_ADDR, 0x01, 4, bufor );<br /><br />sekundy = bcd2dec( bufor&#91;ss&#93; );<br />minuty = bcd2dec( bufor&#91;mm&#93; );<br />godziny = bcd2dec( bufor&#91;hh&#93; );<br /><br />// wyświetlenie czasu na LCD<br />lcd_locate(1,0);<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 /><br />int0_flag=0;<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 />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}<br />void adc_init(void)<br />{<br />ADMUX |= (1&lt;&lt;REFS0);//napiecie odniesienia 5v<br />ADCSRA |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS2) | (1&lt;&lt;ADPS1) |(1&lt;&lt;ADPS0);//właczenie adc oraz ustawienie preskalera na 64<br /><br />}<br />uint16_t pomiar_adc(uint8_t kanal)//funkjcja pomiaru napięcia akumulatora<br />{<br />ADMUX = (ADMUX &amp; 0xF8) | kanal;//ustawienie wybranegowybranego kanału ADC w rejestrze ADMU<br />ADCSRA |= (1&lt;&lt;ADSC);////start pomiaru przez ustawinie bitu ADSC w rejestrze ADCSRA<br />while (ADCSRA &amp;(1&lt;&lt;ADSC));//oczekiwanie na koniec pomiaru<br />return ADCW;//zwrócenie wyniku<br />}[/syntax] <br />Godzinę w naszym zegarze trzeba ustawić programowo co jest dosyć dużym minusem. Jeśli chodzi o dodanie kolejnej doniczki, to nie jest problem. Wystarczy podłączyć kolejny drucik z rezystorem do kolejnego portu ADC. Problem pojawia się jak go podlać skoro mamy jedną pompkę? Mój pomysł był aby było pośrodku serwo z rurką na wysięgniku i obracając serwo nalewać wodę do odpowiedniej donicy. <br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />W okresie powstawania projektu, dużo się nauczyłem. Sam udział w konkursie dał mi dużą satysfakcję. Dodam że przed wakacjami że z ADC czy innymi zastosowanymi w tym projekcie modułami naszego procesora bałem się nawet bawić, bo porostu nie wiedziałem jak. Jednak po lekturze blue book i obejrzeniu kilku(nastu) poradników na kanale pana Mirka wszystko staje się powoli jasne. Zobaczymy jaki będzie postęp za rok w konkursie wakacyjnym (mam nadzieje że takowy się odbędzie). Dziękuję wszystkim za wspaniałą atmosferę na tym forum oraz że nigdy nie odmówicie pomocy.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />Tak wiem znowu prawie tuż przed końcem czasu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=341">pawcio0928</a> — 30 wrz 2013, o 18:50</p><hr />
]]></content>
</entry>
</feed>