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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-10-04T14:57:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1622&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-04T14:57:10+01:00</updated>
<published>2012-10-04T14:57:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16421#p16421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16421#p16421"/>
<title type="html"><![CDATA[Re: ADC + PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16421#p16421"><![CDATA[
<div class="quotetitle">kidcowboy napisał(a):</div><div class="quotecontent"><br />Kurde !!! Wielkie dzięki Mirku nareszcie w pełni zrozumiałem idee mapowania. <br />P.S. 30 pompek leci<br /></div><br /><br />maskowania a nie mapowania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc jeszcze 5 pompek dodatkowo za literówkę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 paź 2012, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kidcowboy]]></name></author>
<updated>2012-10-04T14:32:27+01:00</updated>
<published>2012-10-04T14:32:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16420#p16420</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16420#p16420"/>
<title type="html"><![CDATA[Re: ADC + PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16420#p16420"><![CDATA[
Kurde !!! Wielkie dzięki Mirku nareszcie w pełni zrozumiałem idee mapowania. <br />P.S. 30 pompek leci<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=313">kidcowboy</a> — 4 paź 2012, o 14:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-04T09:48:48+01:00</updated>
<published>2012-10-04T09:48:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16404#p16404</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16404#p16404"/>
<title type="html"><![CDATA[Re: ADC + PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16404#p16404"><![CDATA[
A teraz tak po co te (przepraszam za określenie) niedorzeczne dwie funkcje<br /><br /><strong><span style="color: #BF0000">pomiar()</span></strong> i <strong><span style="color: #BF0000">pomiar1() </span></strong><br /><br />jak można to zrobić w ramach jednej funkcji ?<br /><br />poza tym już dawno pamiętam że tłumaczyliśmy koledze że popełnia poważny błąd (kiedyś tam w innym poście)<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADMUX |= (ADMUX &amp; 0xF8) | kanal;</div><br /><br />i mówiliśmy jak to rozwiązać - a kolega zdaje się już wtedy (o ile pamiętam zaczął pisać oddzielne funkcje) zamiast poprawić ten błąd. Proszę poczytać:<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/54_223b5bea194b4559302bf220058666fd.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/54_223b5bea194b4559302bf220058666fd.jpg" alt="Obrazek" /></a><br />(warto tu zaglądać)<br /><br />przecież tam jest WYRAŹNIE napisane o tym błędzie - wystarczy poprawić powyższą linię na:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADMUX = (ADMUX &amp; 0xF8) | kanal;</div><br /><br />i wystarczy jedna funkcja .... (bo teraz nawet mając te dwie funkcje i tak ten BŁĄD opisany w linku nadal u ciebie występuje)<br /><br /><br /><br />pomijam oczywiście ten dodatek że <br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">return 127;</div><br /><br />a nie działa to dlatego że jak przetwornik działa to wcale nie zawsze jest tam 0 gdy z przetwornika nic nie &quot;leci&quot; jak kolega pisze .... tam jest szum - więc te wartości zmieniają się w okolicy zera (błąd 1-2 bitów przetwornika)<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Zrób sobie jedną funkcję:<br /><br />[syntax=c]uint8_t pomiar(uint8_t kanal)<br />{<br />        // USTAWIENIE WYBRANEGO KANA£U ADC W REJESTRZE ADMUX<br /> <br />        // ADMUX&amp;=~(1&lt;&lt;MUX0);<br />        // ADMUX&amp;=~(1&lt;&lt;MUX1);<br />        ADMUX = (ADMUX &amp; 0xF8) | kanal; // &lt;---- tu poprawka<br />        ADCSRA|=(1&lt;&lt;ADSC);<br />        while(ADCSRA&amp;(1&lt;&lt;ADSC));<br />        if (ADCH &lt; 10 )return ADCH;       // &lt;--- tu proponuję tak sprawdzać <br />                else return 127;<br />}[/syntax]<br /><br />i to ci wystarczy zamiast tych dwóch - bo pomyśl sobie - jakbyś chciał na 8 kanałach mierzyć to byś 8 takich funkcji napisał ? a na dodatek gdybyś w każdej zostawił ten sam błąd - to dopiero byłaby kaszana <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... po prostu ta jedna operacja OR jest niepotrzebna bo nawet jak masz te dwie funkcje to i tak wciąż pozostają bity kanałów pomieszane.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />a nie przepraszam ty sobie w tych funkcjach wymyśliłeś:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADMUX&amp;=~(1&lt;&lt;MUX0);<br />        ADMUX&amp;=~(1&lt;&lt;MUX1);</div><br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale to nie tędy droga bo nie dość że nadal dwie funkcje niepotrzebne to te dwie linie kodu załatwia jedna:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ADMUX = (ADMUX &amp; 0xF8) | kanal;</div><br /><br />dobra koniec - bo się rozpisałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 paź 2012, o 09:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kidcowboy]]></name></author>
<updated>2012-10-04T11:15:52+01:00</updated>
<published>2012-10-04T09:20:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16403#p16403</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16403#p16403"/>
<title type="html"><![CDATA[ADC + PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1622&amp;p=16403#p16403"><![CDATA[
Witam, mam taki kłopot. Napisałem program który odczytuje sygnał z dwóch przetworników ADC ( DWA rezystory potencjometryczne )następnie w programie głównym realizowana jest funkcja PWM. I wszystko byłoby pięknie gdyby nie jedno ALE. W momencie gdy z przetworników jest brak sygnału chciałbym by PWM dawał wartość stałą =127 jednakże gdy odłączam pierwszy przetwornik to funkcja zaczyna sterować wypełnieniem drugiego. Bardzo proszę o sugestie poniżej załączam kod:<br />[syntax=c]<br />/*<br /> * main.c<br /> *<br /> *  Created on: 2012-07-12<br /> *      Author: Józef Bąk - syn łaskawie panującego nam premiera<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br /><br /><br />#define ADC_PIN1 (1&lt;&lt;PA0)<br />#define ADC_PIN2 (1&lt;&lt;PA1)<br />#define PWM1 (1&lt;&lt;PB3)<br />#define PWM2 (1&lt;&lt;PB4)<br /><br /><br />uint8_t pomiar  (uint8_t kanal);<br />uint8_t pomiar1 (uint8_t kanal1);<br /><br /><br /><br />int main(void)<br />{<br />         // PODCIAGNIECIE DO VCC<br />         DDRA|=ADC_PIN1 |ADC_PIN1 <br />// PWM KIERUNEK WYJŒCIE<br />DDRB|=PWM1|PWM2;<br /> //PODCI¥GNIÊCIE DO VCC<br />PORTB|=PWM1|PWM2;<br /><br />//INICJALIZACJA TIMERA0 PORT PB3/OC0A<br />TCCR0A|=(1&lt;&lt;WGM01)|(1&lt;&lt;WGM00); // TRYB FAST PWM<br />TCCR0A|=(1&lt;&lt;COM0A1)|(1&lt;&lt;COM0B1)|(1&lt;&lt;COM0B0);// CLEAR AT TOP DLA A1 I SET AT TOP DLA B2<br />TCCR0B|=(1&lt;&lt;CS01);//PRESKALER 8 =&gt; 1MHz<br /><br /><br />// INICJALIZACJA PRZETWORNIKA<br />ADMUX|=(1&lt;&lt;REFS0)|(1&lt;&lt;ADLAR); //WEW.NAPIÊCIE ZASILANIA 5V I WYROWNANIE DO LEWEJ<br />ADCSRA|=(1&lt;&lt;ADEN)|(1&lt;&lt;ADPS1);// ROZDZIELCZOSÆ 8(ADEN) BITOWA PRESKALAER 2<br />//FLAGA SPRAWDZAJ¥CA CZY F(1) JEST PIERWSZ¥ FUNKCJ¥ PO ZA£¥CZENIU ZASILANIA<br /><br /><br /><br />while(1)<br />{<br /><br /><br />pomiar(0);<br />uint8_t a=ADCH;<br />OCR0A=a;<br /><br />pomiar1(1);<br />uint8_t b=ADCH;<br />OCR0B=b;<br /><br /><br />}<br /><br />}<br /><br />uint8_t pomiar(uint8_t kanal)<br />{<br />// USTAWIENIE WYBRANEGO KANA£U ADC W REJESTRZE ADMUX<br /><br />ADMUX&amp;=~(1&lt;&lt;MUX0);<br />ADMUX&amp;=~(1&lt;&lt;MUX1);<br />ADMUX|=(ADMUX )|kanal;<br />ADCSRA|=(1&lt;&lt;ADSC);<br />while(ADCSRA&amp;(1&lt;&lt;ADSC));<br />if (ADCH!=0)return ADCH;<br />else return 127;<br />}<br /><br />uint8_t pomiar1(uint8_t kanal1)<br />{<br />// USTAWIENIE WYBRANEGO KANA£U ADC W REJESTRZE ADMUX<br />ADMUX|=(1&lt;&lt;MUX0);<br />ADMUX&amp;=~(1&lt;&lt;MUX1);<br />ADMUX|=(ADMUX)|kanal1;<br />ADCSRA|=(1&lt;&lt;ADSC);<br />while(ADCSRA&amp;(1&lt;&lt;ADSC));<br />if (ADCH!=0)return ADCH;<br />else return 127;<br />}<br /><br /><br /><br />[/syntax]<br /><br /><span style="color: #FF0000">[ panie kolego ale zdaje się że już nie raz prosiłem i ja i SunRiver, żeby kody programów otaczać znacznikami [ syntax = c ] a nie [ code ], więc proszę się do tego stosować OK ? jak kolega nie wie jak to proszę edytować ten post i sprawdzić jak to wygląda. mirekk36]</span><br /><br />OK Przepraszam - zapomniałem się<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=313">kidcowboy</a> — 4 paź 2012, o 09:20</p><hr />
]]></content>
</entry>
</feed>