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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-05-30T20:54:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3223&amp;mode</id>
<entry>
<author><name><![CDATA[TomZiom]]></name></author>
<updated>2013-05-30T20:54:15+01:00</updated>
<published>2013-05-30T20:54:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38089#p38089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38089#p38089"/>
<title type="html"><![CDATA[Re: ADC i obsługa analogowego SHARP'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38089#p38089"><![CDATA[
Działa. Ale wstyd... <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> Masz piwo!<br /><br />Wracając do Free Running Mode, ktoś to ogarnia? Jak wyzwolić przerwanie w tym trybie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1010">TomZiom</a> — 30 maja 2013, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomwisnia]]></name></author>
<updated>2013-05-30T20:45:34+01:00</updated>
<published>2013-05-30T20:45:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38088#p38088</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38088#p38088"/>
<title type="html"><![CDATA[Re: ADC i obsługa analogowego SHARP'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38088#p38088"><![CDATA[
ADMUX |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); //preskaler 128, taktowanie uC 16Mhz <br /><br />Ta linijka mi nie pasi w ADMUX nie ma takich bitów tylko w ADCSRA<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=183">tomwisnia</a> — 30 maja 2013, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TomZiom]]></name></author>
<updated>2013-05-30T20:37:17+01:00</updated>
<published>2013-05-30T20:37:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38086#p38086</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38086#p38086"/>
<title type="html"><![CDATA[Re: ADC i obsługa analogowego SHARP'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38086#p38086"><![CDATA[
Spróbowałem napisać program do tego samego ale przy użyciu trybu pojedynczego pomiaru czyli Single Conversion Mode naśladujac kod z Bluebooka. <br /><br />Kody:<br />sharp.h<br />[syntax=c]#ifndef SHARP_H_<br />#define SHARP_H_<br /><br />void adc_init(void);<br /><br />uint16_t pomiar (uint8_t kanal);<br /><br /><br />#endif /* SHARP_H_ */[/syntax]<br /><br />sharp.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;sharp.h&quot;<br /><br />void adc_init(void)<br />{<br />ADMUX |= (1&lt;&lt;REFS0); // voltage reference - AVCC<br />ADCSRA |= (1&lt;&lt;ADEN); //ADC enable<br />ADMUX |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); //preskaler 128, taktowanie uC 16Mhz<br />}<br /><br />uint16_t pomiar (uint8_t kanal)<br />{<br />ADMUX |= (ADMUX &amp; 0xF8) | kanal;<br />ADCSRA |= (1&lt;&lt;ADSC);<br />while(ADCSRA &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}[/syntax]<br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;SHARP/sharp.h&quot;<br /><br /><br />int main()<br />{<br />adc_init();<br />DDRC |= (1&lt;&lt;PC0); //dioda - PC0 jako wyjście<br /><br />while(1)<br />{<br />_delay_ms(1000);<br />if (pomiar(2) &gt;= 400) //SHARP podpiety do PA2 - ADC2 // wartość 400 oznacza jakieś 2V które spokojnie wyłapuje czujnik SHARP<br />{<br />PORTC ^= (1&lt;&lt;PC0);<br />}<br />}<br />}[/syntax]<br /><br />Oczywiście nie działa... Ktoś ma pomysł dlaczego?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1010">TomZiom</a> — 30 maja 2013, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TomZiom]]></name></author>
<updated>2013-05-30T14:56:34+01:00</updated>
<published>2013-05-30T14:56:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38066#p38066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38066#p38066"/>
<title type="html"><![CDATA[ADC i obsługa analogowego SHARP'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3223&amp;p=38066#p38066"><![CDATA[
Witajcie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Postanowiłem napisać pliki do obsługi analogowego SHARP'a. Moim celem jest ustawienie ADC na Free Running Mode z przerwaniem uruchamiającym się gdy wartość odczytu przekroczy jakieś tam napięcie. Czujnik ma być do robota klasy minisumo. <br /><br />I teraz : Czy to jest dobra koncepcja ? (free running mode i przerwanie)? Czy może lepiej użyć wewnętrznego komparatorai wywzolić funkcję gdy coś tam? Albo na upartego mierzyć każdorazowo napięcie i gdy przekorczy jakąs tam wartość to skierować callbackiem na jakąś funkcje? <br /><br />Narazie męczę tę pierwszą koncepcję i zawiesiłem się na przerwaniu. Oto kody:<br />[syntax=c]/*<br /> * sharp.h<br /> *<br /> *  Created on: 2013-05-23<br /> *      Author: Tomek<br /> */<br /><br />#ifndef SHARP_H_<br />#define SHARP_H_<br /><br />#define SHARP (1&lt;&lt;PA0)<br />#define CONST 120 //granica napięcia (8bit -&gt; decimal) przy ktorym urzadzenie ma wyzwolić przerwanie<br />//===============================<br />/*<br /> * ADC Initialization<br /> * Free Running Mode with Interrupt<br /> * Single Ended Input Channel - PA0<br /> */<br />void adc_init(void);<br />//================================<br />/*<br /> * Pin PA0 - input without internal pull-up<br /> */<br />void sharp_init(void);<br />//================================<br /><br />#endif /* SHARP_H_ */[/syntax]<br /><br />[syntax=c]/*<br /> * sharp.c<br /> *<br /> *  Created on: 2013-05-23<br /> *      Author: Tomek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;sharp.h&quot;<br /><br />void adc_init(void)<br />{<br />ADCSRA |= (1&lt;&lt;ADEN); //ADC enable<br />ADMUX |= (1&lt;&lt;REFS0); // voltage reference - AVCC<br />ADMUX |= (1&lt;&lt;MUX0);  //PA0 as ADC input<br />ADMUX |= (1&lt;&lt;ADLAR); //ADC Data Register Left Adjustment<br />ADMUX |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); //preskaler 128, taktowanie uC 16Mhz<br />//Free Running Mode<br />ADCSRA |= (1&lt;&lt;ADATE);<br />SFIOR &amp;= ~(1&lt;&lt;ADTS2)|(1&lt;&lt;ADTS1)|(1&lt;&lt;ADTS0); //te bity sa domysle 0 ale zeby bylo jasne ze odapalm Free Running Mode<br />//Interrupt<br />ADCSRA |= (1&lt;&lt;ADIE);<br />}<br />void sharp_init(void)<br />{<br />//PA0 input without pull-up<br />DDRA &amp;= ~SHARP;<br />PORTA &amp;= ~SHARP;<br />}[/syntax]<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;SHARP/sharp.h&quot;<br /><br /><br />int main()<br />{<br />adc_init();<br />sharp_init();<br />sei();<br /><br />while(1)<br />{<br /><br />}<br />}[/syntax]<br /><br />W BlueBooku dobrze opisana jest obsługa Single Conversion Mode natomiast  Free Running Mode pominęty i nie wiem jak się za niego zabrać ;/<br />Oczywiście mogę obsłużyć sharpa z Single Conversion Mode ale chciałbym też poznać inne dobrodziejstwa ADC, więc inne pomysły, jak wew. komparator, są mile widziane <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1010">TomZiom</a> — 30 maja 2013, o 14:56</p><hr />
]]></content>
</entry>
</feed>