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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-18T14:51:56+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=7408&amp;mode</id>
<entry>
<author><name><![CDATA[.:KoSik:.]]></name></author>
<updated>2014-06-18T14:51:56+01:00</updated>
<published>2014-06-18T14:51:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84916#p84916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84916#p84916"/>
<title type="html"><![CDATA[Re: Lampa LED - atmega88 zawiesza się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84916#p84916"><![CDATA[
Znalazłem!<br /><br />Przyczyną problemów była funkcja odbierania danych 1wire. Zabrakło wyłączenia przerwań.<br /><br />[syntax=c]uint16_t _1WireReadByte(void)<br />{<br />cli();<br />uint16_t i;<br />uint16_t data=0;<br /><br />for(i=0x01; i!=0; i&lt;&lt;=1)   //za ka¿dym obiegiem, przesuñ jedynkê w lewo odpowiada<br />{                     //pozycjom zczytanej wartoœci (czytamy od LSB do MSB)<br />if( _1WireReadSlot() )      //jeœli _1WireReadSlot() odczyta³ 1<br />data |= i;         //umieœæ 1 na odpowiedniej pozycji<br />}<br />return data;<br />sei();<br />}[/syntax]<br /><br />Spowodowało to problem z działaniem softwarowego PWM ale to jakoś obejdę  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Pozostaje jeszcze problem piszczenia cewki i tego chyba nie zwalczę. Może uda mi się dobrać jakiś klosz. Trochę powinien stłumić piszczenie.<br /><br />Dzięki wszystkim za pomoc!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3526">.:KoSik:.</a> — 18 cze 2014, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[.:KoSik:.]]></name></author>
<updated>2014-06-15T11:58:13+01:00</updated>
<published>2014-06-15T11:58:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84517#p84517</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84517#p84517"/>
<title type="html"><![CDATA[Re: Lampa LED - atmega88 zawiesza się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84517#p84517"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />dlaczego 3v3 przy Vcc 5V ?<br /></div><br />akurat taką miałem  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> , a napięcie na wyjściu wzmacniacza miało nie przekraczać 1V1 więc zastosowałem taką.<br /><br />Zennerka dołożona jest jako zabezpieczenie bo IC5A pracuje na 12V. Napięcie referencyjne ustawione na 1V1 i ADC pracuje poprawnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3526">.:KoSik:.</a> — 15 cze 2014, o 11:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-06-15T11:25:03+01:00</updated>
<published>2014-06-15T11:25:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84513#p84513</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84513#p84513"/>
<title type="html"><![CDATA[Re: Lampa LED - atmega88 zawiesza się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84513#p84513"><![CDATA[
Witam<br />Może &quot;sprzętowo&quot; IC5A - gdy wystawia stan wysoki jego wyjście zwierane jest do GND przez Dz ( dlaczego 3v3 przy Vcc 5V ?) i coś tam &quot;papra&quot; z zasilaniem. W.g mnie pomiędzy IC a Dz powinien być rezystor bo jak wspominałem zwierasz jego wyjście z GND.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 15 cze 2014, o 11:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[.:KoSik:.]]></name></author>
<updated>2014-06-15T08:49:20+01:00</updated>
<published>2014-06-15T08:49:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84505#p84505</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84505#p84505"/>
<title type="html"><![CDATA[Re: Lampa LED - atmega88 zawiesza się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84505#p84505"><![CDATA[
<div class="quotetitle">Jaglarz napisał(a):</div><div class="quotecontent"><br />Proszę się zapoznać z zasadami: topic7402.html<br /></div> - poprawione.<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />To weź na drugi raz taką lekturę i miejsce gdzie o tym było napisane - OMIJAJ DUŻYM ŁUKIEM .... bo takich bzdetów to jeszcze nie słyszałem ..... To nie atmegi88 mają czasem problem tylko niektórzy ala-programiści mają problem z programowaniem procka<br /></div> - z reguły omijam takie teksty. Rzucił mi się on kiedyś mimowolnie na jakimś forum. Temat watchdoga już ogarnąłem. Nie wiem co to był za problem. W każdym razie watchdog nie działał tak jak należy i nie był to przypadek o którym piszesz. Sam napisałem inicjalizację i wystartował. Teraz działa już z biblioteki.<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />zobacz jak szybko można zacząć poprawnie rysować schematy ok ?<br /></div> - ten schemat powstawał bardzo długo i to właśnie na nim uczyłem się technik rysowania. Teraz już ogarniam temat ale na kurs rzucę okiem  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Przepraszam, że tak długo nie odpisuję ale przygotowuję się do wyjazdu i mam sporo obowiązków. Więc do rzeczy: watchdog ogarnięty. w ok. 80% zawieszeń działa poprawnie, natomiast w pozostałych nie zapisuje wartości zmiennych i ustawienia kasują się   <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br /><br />Zmienne, które mają &quot;zostać&quot; po restarcie są inicjalizowane przez: <br />[syntax=c]volatile uint8_t red __attribute__ ((section(&quot;.noinit&quot;)));[/syntax]<br /><br />Natomiast w funkcji main:<br />[syntax=c]wdt_enable(WDTO_1S);<br />uint8_t x=0;<br />uint16_t ya=0;<br />uint8_t z=0;<br />DDRD=(1&lt;&lt;PD3)|(1&lt;&lt;PD5)|(1&lt;&lt;PD6)|(1&lt;&lt;PD7);<br />DDRB=(1&lt;&lt;PB3)|(1&lt;&lt;PB1);<br />ADC_init();<br />Timer0_init();<br />PWM_init();<br />USART_Init(MYUBRR);<br />//############# TYLKO 1 RAZ ###################################<br />if(firsttime!=1) //tylko przy pierwszym uruchomieniu<br />{<br />red=0;<br />green=0;<br />blue=0;<br />white=0;<br />dimmer=255;<br />tryb=0;<br />LEDR_ON;<br />_delay_ms(30);<br />LEDR_OFF;<br />FirstTemperatureMeasurement();<br />g=100;<br />_delay_ms(30);<br />g=0;<br />firsttime=1;<br />}<br />//##############################################################<br />sei();<br />USART_tx(&quot;!&quot;);<br />LEDDimmer(dimmer);[/syntax]<br /><br />Niestety to są półśrodki, a mi chodzi o rozwiązanie problemu zawieszania się procesora. Nie wiem już z czego to może wynikać. Mam wrażenie, że jest to zależne od temperatury ale przecież przy 45*C układ powinien pracować normalnie!!! Podpowiedzcie co jeszcze może  być przyczyną.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3526">.:KoSik:.</a> — 15 cze 2014, o 08:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-12T13:39:22+01:00</updated>
<published>2014-06-12T13:39:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84233#p84233</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84233#p84233"/>
<title type="html"><![CDATA[Re: Lampa LED - atmega88 zawiesza się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84233#p84233"><![CDATA[
<div class="quotetitle">.:KoSik:. napisał(a):</div><div class="quotecontent"><br />czytałem, że atmegi88 czasem mają problem z nim więc dałem sobie spokój.<br /></div><br /><br />To weź na drugi raz taką lekturę i miejsce gdzie o tym było napisane - OMIJAJ DUŻYM ŁUKIEM .... bo takich bzdetów to jeszcze nie słyszałem ..... To nie atmegi88 mają czasem problem tylko niektórzy ala-programiści mają problem z programowaniem procka<br /><br /><div class="quotetitle">.:KoSik:. napisał(a):</div><div class="quotecontent"><br />Wybaczcie za schemat bo nie jest najwyższych lotów ;P<br /></div><br /><br />No dobrze, że to napisałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale proszę obejrzyj sobie to:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/kurs-cadsoft-eagle.html" >http://atnel.pl/kurs-cadsoft-eagle.html</a><!-- m --><br /><br />i zobacz jak szybko można zacząć poprawnie rysować schematy ok ?<br /><br />A co do Watchdoga w m88 to po prostu trzeba go wyłączyć przy starcie  ... jak?<br /><br />rzuć sobie okiem chociażby tutaj:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mkbootloader.html" >http://atnel.pl/mkbootloader.html</a><!-- m --><br /><br />masz tam taką sekcję:<br /><br /><span style="color: #0040FF"><em><strong>Sekcja &quot;init3&quot; - wyłączanie Watchdoga po restarcie</strong></em></span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 cze 2014, o 13:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[.:KoSik:.]]></name></author>
<updated>2014-06-15T08:29:33+01:00</updated>
<published>2014-06-12T13:29:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84230#p84230</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84230#p84230"/>
<title type="html"><![CDATA[Lampa LED - atmega88 zawiesza się]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7408&amp;p=84230#p84230"><![CDATA[
Witam! <br /><br />Mam problem (a właściwie 2) z moją lampą. Zmontowałem lampę led wg. własnego schematu. Komunikuje się ona z tabletem/komputerem za pośrednictwem Bluetooth HC-06. Układ działa poprawnie lecz pojawił się problem z zawieszaniem. <br /><br />Mianowicie po ok 30-60min główny program zawiesza się (żadne dane po USART nie są wymieniane). Niestety nie udało mi się uruchomić wachdoga (cały czas resetuje układ) - czytałem, że atmegi88 czasem mają problem z nim więc dałem sobie spokój. Po zawieszeniu działają natomiast timery. <br />Walczę z tym od kilku dni i zero poprawy. Sprawdziłem jeszcze raz połączenia zasilania, dołożyłem kondensatory 1000uF na zasilania. Układ posiada 3 zasilacze: 1-zasila bluetooth, 2-ledy RGB, 3-całą resztę. <br /><br />Po usunięciu z programu wszystkich funkcji dotyczących USART nie ma poprawy.<br /><br />Drugi problem natomiast to delikatne piszczenie cewki w układzie zasilania PowerLed. Pomiar prądu płynącego przez te ledy zrealizowałem na BuckConwerterze i niestety przy częstotliwości pracy PWM ok. 8kHz (jeśli dobrze liczę) w całkowitej ciszy jest nie do zniesienia. <br />Proszę pomóżcie!!! <br /><br />Wybaczcie za schemat bo nie jest najwyższych lotów ;P<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/3526/f104531c5ad624c774d63f79f2300862.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3526/f104531c5ad624c774d63f79f2300862.JPG" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/3526/a6ad911b011c5fe0424850494140d6f5.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3526/a6ad911b011c5fe0424850494140d6f5.png" alt="Obrazek" /></a><br /><br />Niestety nie mogę dodać pliku .c ani .txt więc wrzucam cały kod:<br />[syntax=c]/*<br /> * lamp_test1.c<br /> *<br /> * Created: 2014-05-02 16:17:34<br /> *  Author: Kosik<br /> */ <br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt; <br />#include &lt;math.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;avr/sleep.h&gt;<br /><br />//#define F_CPU=8000000<br />#define LEDG_ON PORTD|=(1&lt;&lt;PD3)<br />#define LEDG_OFF PORTD&amp;= ~(1&lt;&lt;PD3)<br />#define LEDR_ON PORTD|=(1&lt;&lt;PD5)<br />#define LEDR_OFF PORTD&amp;= ~(1&lt;&lt;PD5)<br />#define LEDB_ON PORTD|=(1&lt;&lt;PD6)<br />#define LEDB_OFF PORTD&amp;= ~(1&lt;&lt;PD6)<br />#define FAN_ON PORTD|=(1&lt;&lt;PD7)<br />#define FAN_OFF PORTD&amp;= ~(1&lt;&lt;PD7)<br />#define LEDLAMP_ON PORTB|=(1&lt;&lt;PB3)<br />#define LEDLAMP_OFF PORTB&amp;= ~(1&lt;&lt;PB3)<br />#define LEDW_ON PORTB|=(1&lt;&lt;PB1)<br />#define LEDW_OFF PORTB&amp;= ~(1&lt;&lt;PB1)<br />#defineSET_1WDDRB |= (1&lt;&lt;0x00)  //1 stan niski na porcie<br />#defineCLR_1WDDRB &amp;= ~(1&lt;&lt;0x00) //0 stan wysoki - jako wejscie<br />#define t_alarm 40 //temperatura w??czenia wentylatora<br />#define ad_filtr 3 //ustawienie filtra cyfrowego przetwornika ADC<br />#define pwm_alarm 730 //graniczne ustawienie przetwornika pwm<br />#define adc_alarm 255 //graniczne ustawienie pr?du (z przetwornika ADC)<br /><br /><br />#define FOSC 8000000 // Clock Speed<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br /><br />volatile uint8_t RxEndFlag=0;<br />volatile uint8_t RxBuffLenght;<br />volatile uint8_t Rx;<br />volatile uint8_t bufor;<br />volatile char RxBuffer&#91;14&#93;;<br />volatile char RxBuffer1&#91;14&#93;;<br />char Buffer&#91;5&#93;;<br />volatile char Instrukcja&#91;1&#93;;<br />volatile uint8_t Dana;<br /><br />volatile uint8_t timer_count=0;<br />volatile uint8_t timer2_count=0;<br />volatile uint8_t timer2_count2=0;<br />volatile uint8_t timer0_flag=0;<br />volatile uint8_t timer1_flag=0;<br />volatile uint8_t timer2_flag=0;<br />volatile uint8_t r=0; //kolor PWM<br />volatile uint8_t g=0; //kolor PWM<br />volatile uint8_t b=0; //kolor PWM<br />volatile uint8_t red=0; //kolor PWM bez gamma<br />volatile uint8_t green=0; //kolor PWM bez gamma<br />volatile uint8_t blue=0; //kolor PWM bez gamma<br />volatile uint8_t redg1=0; //kolor 2 dla gradientu<br />volatile uint8_t greeng1=0;<br />volatile uint8_t blueg1=0;<br />volatile uint8_t whiteg1=0;<br />volatile uint8_t redg2=0; //kolor 2 dla gradientu<br />volatile uint8_t greeng2=0;<br />volatile uint8_t blueg2=0;<br />volatile uint8_t tryb=0; // 0- 1 kolor ; 1-gradient; 2-wlaczenie; 3-wylaczenie<br />volatile uint16_t ad;<br />volatile uint16_t adsr;<br />volatile uint8_t white=0;<br />volatile uint8_t whitetx=0;<br />volatile uint8_t redtx=0;<br />volatile uint8_t greentx=0;<br />volatile uint8_t bluetx=0;<br />uint16_t temperatura=0;<br />char buff&#91;4&#93;;<br />volatile uint8_t FanFlag=0;<br /><br />volatile uint8_t time=1; //czas wy??czania/w??czania LED<br />volatile uint8_t gradturn_flag=0; //flaga od przelaczania gradientu<br /><br />const uint8_t gamma&#91;&#93; = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 17, 17, 18, 18, 19, 19, 20, 21, 21, 22, 23, 23, 24, 24, 25, 26, 26, 27, 28, 29, 29, 30, 31, 31, 32, 33, 34, 34, 35, 36, 37, 37, 38, 39, 40, 40, 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 119, 120, 121, 122, 124, 125, 126, 127, 129, 130, 131, 133, 134, 135, 137, 138, 139, 141, 142, 143, 145, 146, 147, 149, 150, 151, 153, 154, 156, 157, 158, 160, 161, 163, 164, 165, 167, 168, 170, 171, 173, 174, 175, 177, 178, 180, 181, 183, 184, 186, 187, 189, 190, 192, 193, 195, 196, 198, 199, 201, 203, 204, 206, 207, 209, 210, 212, 213, 215, 217, 218, 220, 221, 223, 225, 226, 228, 230, 231, 233, 234, 236, 238, 239, 241, 243, 244, 246, 248, 249, 251, 253, 255 };<br /><br /><br />void Timer2_off(void);<br />void USART_tx(char * napis);<br /><br />ISR(TIMER0_COMPB_vect){ //PWM PROGRAMOWY<br />if (timer_count&lt;r){LEDR_ON;}else{LEDR_OFF;}<br />if (timer_count&lt;g){LEDG_ON;}else{LEDG_OFF;}<br />if (timer_count&lt;b){LEDB_ON;}else{LEDB_OFF;}<br /><br />timer_count++;<br />if (timer_count&gt;255){timer_count=0;}<br />}<br /><br />ISR(TIMER2_COMPB_vect){  //WLACZANIE WYLACZANIE GRADIENT<br />timer2_count2++;<br />if(timer2_count2&gt;time*4)<br />{<br />timer2_count2=0;<br />timer2_count++;<br />}<br />if(timer2_count&gt;100)<br />{<br />timer2_count=0;<br />if(gradturn_flag==0){gradturn_flag=1;}else{gradturn_flag=0;}<br />if(tryb==2)<br />{<br />Timer2_off();<br />tryb=0;<br />}<br />if(tryb==3)<br />{<br />Timer2_off();<br />tryb=0;<br />}<br />}<br />}<br /><br />void ADC_init (void)<br />{<br />ADMUX=(1&lt;&lt;REFS0)|(1&lt;&lt;REFS1);<br />ADCSRA=(1&lt;&lt;ADEN)|(1&lt;&lt;ADATE)|(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS2);<br />//ADCSRB=(1&lt;&lt;ADTS2)|(1&lt;&lt;ADTS1); //wyzwalanie od timer1<br />}<br /><br /><br />void USART_Init( unsigned int ubrr)<br />{<br />/*Set baud rate */<br />UBRR0H = (unsigned char)(ubrr&gt;&gt;8);<br />UBRR0L = (unsigned char)ubrr;<br />UCSR0B = (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0)|(1&lt;&lt;RXCIE0);<br />/* Set frame format: 8data, 2stop bit */<br />UCSR0C =(1&lt;&lt;UCSZ00)|(1&lt;&lt;UCSZ01);<br />}<br /><br />void Timer0_init (void)<br />{<br />TCCR0B=(1&lt;&lt;CS00); //preskaler 1<br />TIMSK0=(1&lt;&lt;OCIE0B); //przerwanie<br />OCR0B=1;<br />timer0_flag=1;<br />}<br /><br />void Timer0_off(void)<br />{<br />TCCR2B=0x00;<br />TIMSK0=0x00;<br />timer0_flag=0;<br />}<br /><br />void Timer2_init (void)<br />{<br />timer2_count2=0;<br />TCCR2B=(1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22); //preskaler 1024<br />TIMSK2=(1&lt;&lt;OCIE2B); //przerwanie<br />OCR2B=255;<br />TIFR2=255;<br />timer2_flag=1;<br />}<br /><br />void Timer2_off(void)<br />{<br />timer2_flag=0;<br />TCCR2B=0x00;<br />TIMSK2=0x00;<br />}<br /><br />void PWM_init (void){<br />TCCR1A|=(1&lt;&lt;COM1A1)|(1&lt;&lt;WGM10)|(1&lt;&lt;WGM11); //(1&lt;&lt;WGM10)|<br />TCCR1B|=(1&lt;&lt;WGM10)|(1&lt;&lt;CS10); //(1&lt;&lt;WGM10)|(1&lt;WGM12)|<br />//TIMSK1=(1&lt;&lt;ICIE1)|(1&lt;&lt;TOIE1);<br />OCR1A=0;<br />timer1_flag=1;<br />}<br /><br /><br />void PWM_OFF (void)<br />{<br />TCCR1A|=(0&lt;&lt;COM1A1)|(1&lt;&lt;WGM11)|(1&lt;&lt;WGM10);<br />TCCR1B|=(0&lt;WGM10)|(1&lt;WGM12)|(0&lt;&lt;CS10);<br />TIMSK1=0x00;<br />OCR1A=0;<br />timer1_flag=0;<br />}<br /><br />void wire (int w)<br />{<br />SET_1W;<br />_delay_us(4);<br />if(w)<br />{<br />_delay_us(59);<br />CLR_1W;<br />}<br />else<br />{<br />CLR_1W;<br />_delay_us(59);<br />}<br />_delay_us(35);<br />}<br /><br />void send1W(unsigned char data)<br />{<br />cli();<br />for(int i=0;i&lt;8;i++) {            // dla kolejnych bitow<br />if (data&amp;(1&lt;&lt;i)) {            // WYSYLAM logiczne 1<br />wire(0);               // odczekaj do konca okna transmisji<br />} else<br />{                  // WYSYLAM logiczne 0<br />wire(1);                 // zwalniam magistrale (ext pullup)<br />}<br />}<br />sei();<br />}<br /><br />uint8_t _1WireReadSlot(void)<br />{<br />uint8_t _bit=0;<br /><br />SET_1W;   //ustaw 0<br />_delay_us(2); //4<br />CLR_1W;   //zwolnij magistralę, stan H z rezystora PullUp<br />_delay_us(15);  //20<br />_bit = (PINB &amp; 0x01);      //zwróć wartość PinB.0, 1 lub 0<br />_delay_us(80);<br />return _bit;<br />}<br /><br />uint16_t _1WireReadByte(void)<br />{<br />uint16_t i;<br />uint16_t data=0;<br /><br />for(i=0x01; i!=0; i&lt;&lt;=1)   //za każdym obiegiem, przesuń jedynkę w lewo odpowiada<br />{                     //pozycjom zczytanej wartości (czytamy od LSB do MSB)<br />if( _1WireReadSlot() )      //jeśli _1WireReadSlot() odczytał 1<br />data |= i;         //umieść 1 na odpowiedniej pozycji<br />}<br />return data;<br />}<br /><br />void temper(int w)<br />{<br />send1W(w);<br />_1WireReadByte();<br />_delay_us(8);<br /><br />}<br /><br />void w1init(void)<br />{<br />SET_1W;<br />_delay_us(620);<br />CLR_1W;<br />_delay_us(240);<br />SET_1W;<br />_delay_us(1);<br />CLR_1W;<br />_delay_us(1);<br />}<br /><br />void USART_tx(char * napis)<br />{<br />while(*napis)<br />{<br />UDR0=(*napis++);<br />_delay_ms(2);<br />}<br />}<br /><br />ISR(USART_RX_vect)<br />{<br />uint8_t w;<br />Rx=UDR0;<br />RxBuffer1&#91;RxBuffLenght&#93;=Rx;<br />RxBuffLenght++;<br />if(Rx=='/')<br />{<br />RxEndFlag=1;<br />for(w=0;w&lt;RxBuffLenght;w++)<br />{<br />RxBuffer&#91;w&#93;=RxBuffer1&#91;w&#93;;<br />}<br />}<br />}<br /><br />void USART_recevie()<br />{<br />if(RxEndFlag==1)<br />{<br />Instrukcja&#91;0&#93;=RxBuffer&#91;1&#93;;<br />Dana=RxBuffer&#91;2&#93;+RxBuffer&#91;3&#93;+RxBuffer&#91;4&#93;;<br />Buffer&#91;0&#93;=RxBuffer&#91;2&#93;;<br />Buffer&#91;1&#93;=RxBuffer&#91;3&#93;;<br />Buffer&#91;2&#93;=RxBuffer&#91;4&#93;;<br />Dana=atoi(Buffer);<br />RxBuffLenght=0;<br />}<br />if(Instrukcja&#91;0&#93;=='r') //RED<br />{<br />tryb=0;<br />red=Dana;<br />redtx=red;<br />r=gamma&#91;red&#93;;<br />}<br />if(Instrukcja&#91;0&#93;=='g') //GREEN<br />{<br />tryb=0;<br />green=Dana;<br />greentx=green;<br />g=gamma&#91;green&#93;;<br />}<br />if(Instrukcja&#91;0&#93;=='b') // BLUE<br />{<br />tryb=0;<br />blue=Dana;<br />bluetx=blue;<br />b=gamma&#91;blue&#93;;<br />}<br />if(Instrukcja&#91;0&#93;=='w') // WHITE<br />{<br />tryb=0;<br />whitetx=Dana;<br />white=gamma&#91;Dana&#93;;<br />}<br />if(Instrukcja&#91;0&#93;=='R') // RED 2<br />{<br />redg2=Dana;<br />}<br />if(Instrukcja&#91;0&#93;=='G') // GREEN 2<br />{<br />greeng2=Dana;<br />}<br />if(Instrukcja&#91;0&#93;=='B') // BLUE 2<br />{<br />blueg2=Dana;<br />}<br />if(Instrukcja&#91;0&#93;=='f') // OFF<br />{<br />timer2_count=0;<br />timer2_count2=0;<br />tryb=3;<br />redg1=red;<br />greeng1=green;<br />blueg1=blue;<br />whiteg1=white;<br />if((Dana&gt;0) &amp; (Dana&lt;256))<br />{<br />time=Dana;<br />}<br />Timer2_init();<br />}<br />if(Instrukcja&#91;0&#93;=='n') // ON<br />{<br />r=0;<br />g=0;<br />b=0;<br />timer2_count=0;<br />timer2_count2=0;<br />tryb=2;<br />whiteg1=white;<br />white=0;<br />redg1=red;<br />greeng1=green;<br />blueg1=blue;<br />if((Dana&gt;0) &amp; (Dana&lt;256))<br />{<br />time=Dana;<br />}<br />Timer2_init();<br />}<br />if(Instrukcja&#91;0&#93;=='q') //gradient<br />{<br />timer2_count=0;<br />timer2_count2=0;<br />tryb=1;<br />redg1=red;<br />greeng1=green;<br />blueg1=blue;<br />gradturn_flag=0;<br />if((Dana&gt;0) &amp; (Dana&lt;256))<br />{<br />time=Dana;<br />} else {Dana=1;}<br />Timer2_init();<br />//USART_tx(&quot;T2-ON&quot;);<br />}<br />if(Instrukcja&#91;0&#93;=='?')<br />{<br />itoa(whitetx,buff,10);<br />USART_tx(&quot;0w&quot;);<br />USART_tx(buff);<br />USART_tx(&quot;/&quot;);<br />itoa(redtx,buff,10);<br />USART_tx(&quot;0r&quot;);<br />USART_tx(buff);<br />USART_tx(&quot;/&quot;);<br />itoa(greentx,buff,10);<br />USART_tx(&quot;0g&quot;);<br />USART_tx(buff);<br />USART_tx(&quot;/&quot;);<br />itoa(bluetx,buff,10);<br />USART_tx(&quot;0b&quot;);<br />USART_tx(buff);<br />USART_tx(&quot;/&quot;);<br />itoa(temperatura,buff,10);<br />USART_tx(&quot;0t&quot;);<br />USART_tx(buff);<br />USART_tx(&quot;/&quot;);<br />itoa(adsr,buff,10);<br />USART_tx(&quot;0i&quot;);<br />USART_tx(buff);<br />USART_tx(&quot;/&quot;);<br />}<br /><br />RxEndFlag=0;<br />Instrukcja&#91;0&#93;='0';<br />}<br /><br />void slow_on (void)<br />{<br />uint16_t redt;<br />uint16_t greent;<br />uint16_t bluet;<br />uint16_t whitet;<br /><br />redt=(redg1*timer2_count)/100;<br />r=gamma&#91;redt&#93;;<br />redtx=redt;<br />greent=(greeng1*timer2_count)/100;<br />g=gamma&#91;greent&#93;;<br />greentx=greent;<br />bluet=(blueg1*timer2_count)/100;<br />b=gamma&#91;bluet&#93;;<br />bluetx=bluet;<br />whitet=(whiteg1*timer2_count)/100;<br />white=whitet;<br />whitetx=whitet;<br />}<br /><br />void slow_off (void)<br />{<br />uint16_t redt;<br />uint16_t greent;<br />uint16_t bluet;<br />uint16_t whitet;<br />redt=redg1-((redg1*timer2_count)/100);<br />r=gamma&#91;redt&#93;;<br />redtx=redt;<br />greent=greeng1-((greeng1*timer2_count)/100);<br />g=gamma&#91;greent&#93;;<br />greentx=greent;<br />bluet=blueg1-((blueg1*timer2_count)/100);<br />b=gamma&#91;bluet&#93;;<br />bluetx=bluet;<br />whitet=whiteg1-((whiteg1*timer2_count)/100);<br />white=whitet;<br />whitetx=whitet;<br />if((r==0) &amp; (g==0) &amp; (b==0) &amp; (white==0))<br />{<br />tryb=0;<br />}<br />}<br /><br />void gradient (void)<br />{<br />uint16_t redt;<br />uint16_t greent;<br />uint16_t bluet;<br />if(gradturn_flag==0)<br />{<br />redt=(redg1-((redg1*timer2_count)/100))+((redg2*timer2_count)/100);<br />r=gamma&#91;redt&#93;;<br />redtx=redt;<br />greent=(greeng1-((greeng1*timer2_count)/100))+((greeng2*timer2_count)/100);<br />g=gamma&#91;greent&#93;;<br />greentx=greent;<br />bluet=(blueg1-((blueg1*timer2_count)/100))+((blueg2*timer2_count)/100);<br />b=gamma&#91;bluet&#93;;<br />bluetx=bluet;<br />} else<br />{<br />redt=(redg2-((redg2*timer2_count)/100))+((redg1*timer2_count)/100);<br />r=gamma&#91;redt&#93;;<br />redtx=redt;<br />greent=(greeng2-((greeng2*timer2_count)/100))+((greeng1*timer2_count)/100);<br />g=gamma&#91;greent&#93;;<br />greentx=greent;<br />bluet=(blueg2-((blueg2*timer2_count)/100))+((blueg1*timer2_count)/100);<br />b=gamma&#91;bluet&#93;;<br />bluetx=bluet;<br />}<br />}<br /><br />void PWM_WHITE (void)<br />{<br />int16_t pwm;<br />uint16_t ust_pwm;<br /><br />ust_pwm=OCR1A;<br />//--------------------------------<br />if(white&lt;30) //dolna granica dzia?ania przetwornika ADC<br />{<br />pwm=OCR1A/3;<br />} else pwm=adsr;<br />//--------------------------------<br />if(pwm&lt;(white)-10){ust_pwm=ust_pwm+3;}<br />if(pwm&lt;(white)){ust_pwm++;}<br />//--------------------------------<br />if(pwm&gt;(white)+10)<br />{<br />if(ust_pwm&gt;0){ust_pwm=ust_pwm-3;}<br />}<br />if(pwm&gt;(white))<br />{<br />if(ust_pwm&gt;0){ust_pwm--;}<br />}<br />if(ust_pwm&lt;1){ust_pwm=0;}<br />if(ust_pwm&gt;pwm_alarm){ust_pwm=pwm_alarm;}//alarm po przekroczeniu warto?ci pwm<br />//--------------------------------<br />if(adsr&gt;adc_alarm){white--;}<br />//----------------------------------<br />OCR1A=ust_pwm;<br />}<br /><br />void SREDNIA_ADC (void)<br />{<br />adsr=((adsr*ad_filtr)+(ADC))/(ad_filtr+1);<br />}<br /><br />int main(void)<br />{<br />uint8_t q;<br />uint8_t x=0;<br />uint16_t ya=0;<br />uint8_t z=0;<br /><br />DDRD=(1&lt;&lt;PD3)|(1&lt;&lt;PD5)|(1&lt;&lt;PD6)|(1&lt;&lt;PD7);<br />DDRB=(1&lt;&lt;PB3)|(1&lt;&lt;PB1);<br />LEDR_ON;<br />_delay_ms(100);<br />LEDR_OFF;<br />ADC_init();<br />Timer0_init();<br />PWM_init();<br />USART_Init(MYUBRR);<br />//---------PIERWSZY POMIAR TEMPERATURY------------------------<br />w1init();<br />send1W(0xCC);<br />send1W(0x44);<br />_delay_ms(2000);<br />w1init();<br />send1W(0xCC);<br />send1W(0xBE);<br />temperatura=_1WireReadByte();<br />temperatura=temperatura&gt;&gt;4;<br />//##############################################################<br />ADCSRA|=(1&lt;&lt;ADSC); //wyzwalanie adc<br />sei();<br />g=100;<br />_delay_ms(100);<br />g=0;<br />LEDG_OFF;<br />while(1)<br />{<br />if(tryb==0)<br />{<br />Timer2_off();<br />}<br />if(tryb==1) //gradient<br />{<br />gradient();<br />}<br />if(tryb==2) //slow on<br />{<br />slow_on();<br />}<br />if(tryb==3) //slow off<br />{<br />slow_off();<br />}<br /><br />if(RxEndFlag==1)<br />{<br />USART_recevie();<br />for(q=0;q&lt;6;q++)<br />{<br />RxBuffer&#91;q&#93;='0';<br />}<br />}<br />//--------------TEMPERATURA----------------------------------<br />if(ya==200)<br />{<br />w1init();<br />send1W(0xCC);<br />send1W(0xBE);<br />temperatura=_1WireReadByte();<br />temperatura=temperatura&gt;&gt;4;<br />if(temperatura&gt;t_alarm)<br />{<br />FAN_ON;<br />FanFlag=1;<br />}<br />if(temperatura&lt;(t_alarm-3))<br />{<br />FAN_OFF;<br />FanFlag=0;<br />}<br />w1init();<br />send1W(0xCC);<br />send1W(0x44);<br />}<br />//-----KONTROLA WLACZENIA ------------------------------------<br />if (white==0) //jesli bialy wylaczony<br />{<br />if(timer1_flag==1) //jesli timer 1 wlaczony<br />{<br />if(adsr&lt;5) //jesli prad spadnie do minimum<br />{<br />OCR1A=0;<br />PWM_OFF();<br />}<br />}<br />}<br />if (white&gt;0) //jesli bialy wlaczony<br />{<br />if(timer1_flag==0) //jesli timer 1 wylaczony<br />{<br />PWM_init();<br />}<br />}<br />if ((r==0) &amp; (g==0) &amp; (b==0))<br />{<br />if(timer0_flag==1)<br />{<br />Timer0_off();<br />}<br />}<br />if ((r&gt;0) | (g&gt;0) | (b&gt;0))<br />{<br />if(timer0_flag==0)<br />{<br />Timer0_init();<br />}<br /><br />}<br />if((tryb==1) | (tryb==2) | (tryb==3))<br />{<br />if(timer2_flag==0)<br />{<br />Timer2_init();<br />//USART_tx(&quot;T2-ON&quot;);<br />}<br />}<br />if((tryb==0))<br />{<br />if(timer2_flag==1)<br />{<br />Timer2_off();<br />//USART_tx(&quot;T2-OFF&quot;);<br />}<br />}<br />if ((r==0) &amp; (g==0) &amp; (b==0) &amp; (white==0) &amp; (tryb!=1) &amp; (tryb!=2) &amp; (FanFlag==0))<br />{<br />if(adsr&lt;5) //jesli prad spadnie do minimum<br />{<br />Timer0_off();<br />Timer2_off();<br />PWM_OFF();<br />set_sleep_mode(0);<br />sleep_enable();<br />sei();<br />sleep_cpu();<br />}<br />}<br />//-----------zbieranie danych ADC ---------------------------<br />SREDNIA_ADC();<br /><br />if(z==1)<br />{<br />PWM_WHITE();<br />}<br />//--------------------------------<br />_delay_ms(10);<br />x++;<br />if(x&gt;20){x=0;}<br />z++;<br />if(z&gt;1){z=0;}<br />ya++;<br />if(r&gt;0)<br />{<br />if(ya&gt;5500){ya=0;};<br />} else<br />{<br />if(ya&gt;1000){ya=0;};<br />}<br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3526">.:KoSik:.</a> — 12 cze 2014, o 13:29</p><hr />
]]></content>
</entry>
</feed>