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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=7836&amp;mode</id>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-07-21T20:06:56+01:00</updated>
<published>2014-07-21T20:06:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88421#p88421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88421#p88421"/>
<title type="html"><![CDATA[Re: Woltomierz_na_diodach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88421#p88421"><![CDATA[
Problem masz z tymi warunkami<br />[syntax=c]if(ADCW&gt;=200) PORTC |=0b11111110;<br />if(ADCW&gt;=400) PORTC |=0b11111100;<br />if(ADCW&gt;=600) PORTC |=0b11111000;<br />if(ADCW&gt;=800) PORTC |=0b11110000;<br />if(ADCW&gt;=1000)PORTC |=0b11100000;[/syntax]<br />Niepotrzebnie dałeś tam bitowe or <strong>|</strong>.<br /><br />W funkcji init_pin() do wszystkich bitów portu C zapisujesz jedynki. A potem w warunkach robisz np. coś takiego [syntax=c]PORTC |=0b11111100;[/syntax] czyli  [syntax=c]PORTC = PORTC | 0b11111100;[/syntax]<br />Jeśli w PORTC są same jedynki to co będzie wynikiem takiej operacji[syntax=c]PORTC = 0b11111111 | 0b11111100;[/syntax]<br />Oczywiście <strong>0b11111111</strong> czyli wszystkie diody wyłączone.<br /><br />Najprościej będzie usunąć bitowe or z tych warunków. I wtedy program będzie działać. Ja bym dodał jeszcze jeden warunek wyłączający pierwszą diodę gdy ADCW jest mniejsze od 200. Bez tego dioda raz włączona już się nie wyłączy nawet jak pomiar ADC będzie wynosił zero.<br /><br />[syntax=c]while(1)<br />{<br />pomiar();<br /><br />if(ADCW &lt; 200) PORTC = 0b11111111;<br />if(ADCW &gt;= 200) PORTC = 0b11111110;<br />if(ADCW &gt;= 400) PORTC = 0b11111100;<br />if(ADCW &gt;= 600) PORTC = 0b11111000;<br />if(ADCW &gt;= 800) PORTC = 0b11110000;<br />if(ADCW &gt;= 1000) PORTC = 0b11100000;<br />}[/syntax]<br />Reszta programu bez zmian.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 21 lip 2014, o 20:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-07-21T01:10:39+01:00</updated>
<published>2014-07-21T01:10:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88284#p88284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88284#p88284"/>
<title type="html"><![CDATA[Re: Woltomierz_na_diodach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88284#p88284"><![CDATA[
Nie ustawiłeś kanału ADC na którym robisz pomiar.<br />Jest taki rejestr ADMUX, sterujący multiplekserem ADC. MCU ma kilka kanałów ale prztwornik tylko jeden, dlatego jest potrzebny MUX i trzeba temu MUXowi pokazać który kanał ma dołączyć przy pomiarze.<br /><br />[syntax=c]ADMUX = (ADMUX &amp; 0b11111000) | kanal;<br />// gdzie kanal jest numerem portu ADC - numerowanie od zera.[/syntax]<br /><br />Czyli Twoja funkcja pomiar nie może mieć argumentu typu void tylko powinieneś do niej przekazać numer kanału ADC.<br />Tzn w sumie może mieć void, ale wtedy na stałe musisz ten kanał ustawić.<br />Lepiej jest zrobić tak (literalnie z poradnika Mirka):<br /><br />[syntax=c]uint16_t pomiar(uint8_t kanal)<br />{<br />        ADMUX = (ADMUX &amp; 0b11111000) | kanal;<br />        ADCSRA |= (1&lt;&lt;ADSC);         // START<br />        while(ADCSRA &amp; (1&lt;&lt;ADSC));<br /> <br />        return ADCW;<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />A nie, przepraszam ustawiłeś:<br />[syntax=c]ADMUX |= (1&lt;&lt;REFS0)|(1&lt;&lt;MUX0);    //napiecie odniesienia VCC ;      przetwornik ADC1[/syntax]<br /><br />Ale tamten sposób jest w moim odczuciu wygodniejszy, bo łatwiej zmienić kanał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 21 lip 2014, o 01:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mnich16]]></name></author>
<updated>2014-07-21T00:35:06+01:00</updated>
<published>2014-07-21T00:35:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88283#p88283</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88283#p88283"/>
<title type="html"><![CDATA[Re: Woltomierz_na_diodach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88283#p88283"><![CDATA[
sorry ale po przeanalizowaniu  tego dalej nie wiem jak to zrobić proszę o dalszą pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5032">Mnich16</a> — 21 lip 2014, o 00:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[D_C]]></name></author>
<updated>2014-07-20T23:01:00+01:00</updated>
<published>2014-07-20T23:01:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88280#p88280</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88280#p88280"/>
<title type="html"><![CDATA[Re: Woltomierz_na_diodach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88280#p88280"><![CDATA[
<!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7026.html" >topic7026.html</a><!-- l --> proszę powinno cie zainspirować do działania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1165">D_C</a> — 20 lip 2014, o 23:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mnich16]]></name></author>
<updated>2014-07-20T22:43:36+01:00</updated>
<published>2014-07-20T22:43:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88275#p88275</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88275#p88275"/>
<title type="html"><![CDATA[Woltomierz_na_diodach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7836&amp;p=88275#p88275"><![CDATA[
Witam proszę o pomoc chciałem zrobić taki prosty woltomierz  ma to działać tak że jak napięcie wzrośnie o 0,5 volta to zapali się dioda jeśli napięcie wzrośnie o kolejne 0,5 volta to zapali sie kolejna dioda i tak dalej. W tej chwili nie jest ważne żeby co 0,5 volta zapalała się kolejna dioda bo nie przeliczałem tej wartości ADC na napięcie chciałem najpierw żeby to zadziałało i w tych ifach te wartości ADC ustawiłem tak po prostu żeby coś było ale nic nie działa diody są ciągle zgaszone pewnie w ogóle nie można zrobić tak jak ja to zrobiłem że do ifa jako warunek dałem rejestr ADCW. A może tą wartość z rejestru ADCW skopiować jakoś do zmiennej i tą zmienną podać do ifa?  <br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />void init_adc(void);<br />void init_pin(void);<br />uint16_t pomiar(void);<br /><br />//********************************************************************************************************************<br /><br />int main(void){<br /><br />init_pin();<br />init_adc();<br /><br /><br /><br />while(1){<br /><br />pomiar();<br /><br /><br />if(ADCW&gt;=200) PORTC |=0b11111110;<br />if(ADCW&gt;=400) PORTC |=0b11111100;<br />if(ADCW&gt;=600) PORTC |=0b11111000;<br />if(ADCW&gt;=800) PORTC |=0b11110000;<br />if(ADCW&gt;=1000)PORTC |=0b11100000;<br /><br />}<br /><br /><br /><br /><br /><br />}<br /><br /><br />//*******************************************************************************************************************<br /><br /><br /><br /><br />void init_adc(void){<br /><br />ADMUX |= (1&lt;&lt;REFS0)|(1&lt;&lt;MUX0);    //napiecie odniesienia VCC ;      przetwornik ADC1<br />ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1);  //preskaler 64<br />ADCSRA |= (1&lt;&lt;ADEN);              // ADC on<br />}<br /><br />////////////////////////////////////////////////////////////////////////////////////////////////////////<br /><br /><br />void init_pin(void){<br /><br />DDRC |= 0b11111111;  // port c wyjscie<br />PORTC |= 0b11111111;  // port c pull-up<br /><br />}<br /><br />//////////////////////////////////////////////////////////////////////////////////////////////////////<br /><br />uint16_t pomiar(void)<br />{<br />ADCSRA |= (1&lt;&lt;ADSC);         // START<br />while(ADCSRA &amp; (1&lt;&lt;ADSC));<br /><br />return ADCW;<br />}<br /><br /><br />/////////////////////////////////////////////////////////////////////////////////////////////////////[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5032">Mnich16</a> — 20 lip 2014, o 22:43</p><hr />
]]></content>
</entry>
</feed>