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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-04T19:01:46+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7308&amp;mode</id>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2014-06-04T19:01:46+01:00</updated>
<published>2014-06-04T19:01:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7308&amp;p=83385#p83385</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7308&amp;p=83385#p83385"/>
<title type="html"><![CDATA[Re: pomiar dwoch kanalow ADC w trybie free running]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7308&amp;p=83385#p83385"><![CDATA[
Tym zapisem zerujesz cały rejestr ADMUX oprócz jednego bitu ADLAR który ustawiasz na jeden i bitów od wyboru pinu z którego chcesz pomiar. <br /><br />[syntax=c]ADMUX = adc3;[/syntax]<br /><br /><br /><br />Pasowało by jakoś zamaskować ten rejestr, np tak:<br /><br />[syntax=c]ADMUX = (0b11000000 &amp; ADMUX) | adc3;[/syntax]<br /><br />Jeśli dobrze myślę to jak nastąpiło przerwanie to zerowałeś bity od napięcia odniesienia i wtedy miałeś jako napięcie odniesienia to panujące na pinie AREF.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 4 cze 2014, o 19:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lukasz139]]></name></author>
<updated>2014-06-04T16:01:23+01:00</updated>
<published>2014-06-04T16:01:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7308&amp;p=83380#p83380</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7308&amp;p=83380#p83380"/>
<title type="html"><![CDATA[pomiar dwoch kanalow ADC w trybie free running]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7308&amp;p=83380#p83380"><![CDATA[
Witam,<br /><br />Chcialbym poprosic o przejzenie mojego kodu obslugujacego dwa kanaly ADC w Atmega32. Przy jednym kanale w trybie free running wszystko dziala poprawnie. Jednak nie moge poradzic sobie z dwoma kanalami. Z gory dziekuje.<br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;  <br />#include &lt;stdint.h&gt;  <br />#include &lt;avr/interrupt.h&gt;   <br />#include &quot;hd44780.h&quot;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt; <br />#include &lt;stdio.h&gt;<br /><br />#define LED1 (1&lt;&lt;PB3)  <br />#define LED2 (1&lt;&lt;PB4)  <br />#define ADCIN1 PA3 <br />#define ADCIN2 PA4 <br /> <br />volatile int pomiar;<br />volatile int zadana;<br />int wypelnienie;<br />volatile int we;<br />volatile int ad;<br />int error;<br />char Error&#91;2&#93;;<br />char Error1&#91;2&#93;;<br /><br /><br />volatile const uint8_t adc2 = (1&lt;&lt;ADLAR) | 2;<br />volatile const uint8_t adc3 = (1&lt;&lt;ADLAR) | 3;<br /><br /><br /><br />void lcd_int(int wartosc) // funkcja wyswietlajaca liczby na lcd<br />{<br />char str&#91;17&#93;;<br />lcd_puts(itoa(wartosc, str, 10));<br />}<br /><br />void initADC ()<br />{<br />ADMUX =<br />(1 &lt;&lt; ADLAR) |     // Wynik przesuniety do lewej strony<br />(1 &lt;&lt; MUX2);       // <br /><br />ADCSRA =<br />(1 &lt;&lt; ADEN)  |     // Enable ADC<br />(1 &lt;&lt; ADATE) |     // auto trigger <br />(1 &lt;&lt; ADIE)  |     //  <br />(1 &lt;&lt; ADPS0) |     // Prescaler<br />(1 &lt;&lt; ADPS1);      //    <br /><br />ADMUX |=(1&lt;&lt;REFS0)|(1&lt;&lt;REFS1);    // Wewnetrzne zrodlo odnienieniau<br /><br />SFIOR = 0;                  // free running mode<br />sei();<br />ADCSRA |= (1 &lt;&lt; ADSC); // start conversions<br />}<br /><br />ISR(ADC_vect)<br />{<br /><br />static uint8_t val;<br /><br />val = ADCH;<br /><br /> if (we==1)<br />{<br />ADMUX = adc3;<br />pomiar = val;<br />PORTD ^=(1&lt;&lt;PD3);  // Sprawdzenie dzialania obslugi przerwania<br />we=2;<br />}<br /><br />else if (we == 2)<br />{<br />ADMUX = adc2;<br />zadana = val;<br />PORTD ^=(1&lt;&lt;PD3);// Sprawdzenie dzialania obslugi przerwania<br />we=1;<br />}<br />}<br /><br /><br />int main(void)<br />{<br /><br />pomiar=200;  //Inicjalizacja, wartosc poczatkowa dla bitu OCR1.<br />we=1; //Pierwszy kanal ADC aktywny, pomiar wartosci zadanej<br /><br />lcd_init();<br /><br />LCD_DISPLAY(LCDDISPLAY);<br /><br />LCD_LOCATE(2,0);<br /><br />lcd_puts(&quot;PID CONTROLLER&quot;);<br /><br /><br />DDRD |= (1&lt;&lt;PD3);<br />PORTD |=(1&lt;&lt;PD3);<br />DDRD |= (1&lt;&lt;PD5);<br />initADC();<br /><br />//PWM<br />TCCR1A |= (1&lt;&lt;COM1A1)|(1&lt;&lt;COM1A0) //Stan wysoki przy porownaniu<br />|  (0&lt;&lt;WGM10)|(1&lt;&lt;WGM11); // (FAST PWM)<br /><br />TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;WGM12)|(1&lt;&lt;WGM13);  // Preskaler<br />ICR1 = 400;  //Wartosc maksymalna (dla trybu 14)<br />OCR1A=pomiar;    //Wartosc poczatkowa porównania A (Wyjscie OC1A - PB1),<br />//wypelnenie = 50%<br /><br />while(1)<br />{<br /><br />wypelnienie=(pomiar)/(1024/400);<br /><br />OCR1A=wypelnienie;<br /><br /><br />}<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Różowo-zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3374">lukasz139</a> — 4 cze 2014, o 16:01</p><hr />
]]></content>
</entry>
</feed>