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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-13T19:00:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13862&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-12-13T19:00:21+01:00</updated>
<published>2015-12-13T19:00:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147868#p147868</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147868#p147868"/>
<title type="html"><![CDATA[Re: ADC - brak wyniku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147868#p147868"><![CDATA[
Witam<br />Ja do sekwencyjnego pomiaru podszedłem troszkę inaczej i działa; może spróbuj tak:<br />[syntax=c]...<br />#define POMIAR_2 (1&lt;&lt;MUX1)                 // PC2<br />#define POMIAR_3 (1&lt;&lt;MUX0)|(1&lt;&lt;MUX1)       // PC3<br />...<br />...<br />void pomiar(void);<br /><br />int  main(void)<br /><br /> {<br />...<br />...<br /> /* pomiar napięcia na potencjometrze */<br />   ADCSRA |= (1&lt;&lt;ADEN);                      // uruchominie przetwornika  ADC<br />   ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);  // preskaler 128<br />   ADMUX  |= (1&lt;&lt;REFS0);                     //Vref = Vcc<br /><br />    sei();<br /><br /><br />   while(1)<br /><br />         {<br /><br />  pomiar();<br />          ...<br />          ...<br />        }<br />}<br /><br />void pomiar (void)<br />{<br />ADMUX = (ADMUX &amp; 0xF8);// | POMIAR_1 ; // maska + właczenie PIN pomiar<br />    ADCSRA |= (1&lt;&lt;ADSC);<br />    while (ADCSRA &amp; (1&lt;&lt;ADSC));<br />    licz_led_R = ADC;<br /><br />ADMUX = (ADMUX &amp; 0xF8) | POMIAR_1 ;<br />ADCSRA |= (1&lt;&lt;ADSC);<br />while (ADCSRA &amp; (1&lt;&lt;ADSC));<br />licz_led_G = ADC;<br /><br />ADMUX = (ADMUX &amp; 0xF8) | POMIAR_2 ;<br />ADCSRA |= (1&lt;&lt;ADSC);<br />    while (ADCSRA &amp; (1&lt;&lt;ADSC));<br />    licz_led_B = ADC;<br />}[/syntax]<br />W Twoim jakoś nie widać babola, ale jeśli nie działa...<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 gru 2015, o 19:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-13T16:07:38+01:00</updated>
<published>2015-12-13T16:07:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147859#p147859</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147859#p147859"/>
<title type="html"><![CDATA[Re: ADC - brak wyniku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147859#p147859"><![CDATA[
kod wstaw w sytnax c<br />Będzie bardziej czytelny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 13 gru 2015, o 16:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pudzio95]]></name></author>
<updated>2015-12-13T17:25:06+01:00</updated>
<published>2015-12-13T14:08:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147851#p147851</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147851#p147851"/>
<title type="html"><![CDATA[ADC - brak wyniku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13862&amp;p=147851#p147851"><![CDATA[
Cześć<br /><br />Robiąc sobie sterownik do diod RGB chciałem ich kolor regulować za pomocą potencjometrów (w systemie HSV). Mam taki problem z ADC ponieważ ciągle otrzymuję tan sam wynik &quot;1023&quot;. Wymieniony przypadek tyczy się pracy na procesorze ATmega8 gdy ten sam układ zrobiłem na ATmega32 to wszytko działało (wiem, że te układy mają na tych samych portach inne funkcje ale wszytko podłączyłem dobrze ponieważ wszystkie inne funkcje działają). <br /><br />Inny problem mam taki, że podczas pomiaru napięcia w momencie gdy przełączę kanał to pierwszy odczyt jaki otrzymam nie jest prawidłowy (mniej więcej w połowie pomiędzy wartościami kanału obecnego i poprzedniego) dopiero powtórzenie pomiaru daje prawidłowy wynik - dzieję się tak na  ATmedz8 jak i 32.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 12 gru 2015<br /> *      Author: Paweł<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;uart/mkuart.h&quot;//biblioteki UARTa<br /><br />#define KEY1_PIN (1&lt;&lt;PD4)//defincje dla klawiszy ustalających wartosci konkretnych kanałów PWM<br />#define KEY1 !(PIND &amp; KEY1_PIN)<br />#define KEY2_PIN (1&lt;&lt;PD5)<br />#define KEY2 !(PIND &amp; KEY2_PIN)<br />#define KEY3_PIN (1&lt;&lt;PD6)<br />#define KEY3 !(PIND &amp; KEY3_PIN)<br />#define KEY4_PIN (1&lt;&lt;PD7)<br />#define KEY4 !(PIND &amp; KEY4_PIN)<br /><br />#define R_LED (1&lt;&lt;PB5)//definicje dla diody RGB pokazujacej aktualnie wybrany kolor<br />#define R_ON PORTB &amp;= ~R_LED<br />#define R_OFF PORTB |= R_LED<br />#define G_LED (1&lt;&lt;PB4)<br />#define G_ON PORTB &amp;= ~G_LED<br />#define G_OFF PORTB |= G_LED<br />#define B_LED (1&lt;&lt;PB3)<br />#define B_ON PORTB &amp;= ~B_LED<br />#define B_OFF PORTB |= B_LED<br /><br />uint16_t H;//deklaracje zmiennych z kolorami w systemie HSV<br />uint8_t S;<br />uint8_t V;<br />uint8_t R;//deklaracje zmiennych z kolorami w systemie RGB<br />uint8_t G;<br />uint8_t B;<br />uint8_t r&#91;4&#93;;//deklaracje tablic z wartosciami dla pwm dla każdego koloru<br />uint8_t g&#91;4&#93;;<br />uint8_t b&#91;4&#93;;<br />uint8_t pwm&#91;3&#93;;//tablica z wartosciami dla lokanej diody RGB - 0-R, 1-G, 2-B<br />uint8_t tryb;//zmienna z informacją z jakim trybem ma pracowac sterownik<br /><br />uint16_t pomiar( uint8_t kanal );//deklaracja funkcji wykonujacej pomiar napiecia<br />void HSV_to_RGB( void );//deklaracja funkcji konwertującej system HSV do RGB<br />void wyslij( void );//deklaracaj funkcji wysyłającej ramkę danych<br /><br />int main( void )<br />{<br />//Ustawienia portów<br />PORTD |= 0xF0;//podciagniecie klawiszy do Vcc - klawisze kanałów RGB<br />DDRB |= R_LED | G_LED | B_LED;//ustawieniei pinów z diodami jako wyjście<br />PORTB |= R_LED | G_LED | B_LED | 0x07;//wyłączenie diod i podciągniecie klawiszy do Vcc (klawisze trybu sterownika)<br /><br />USART_Init( __UBRR );//inicjalizacja UARTa<br /><br />//ADC - konfiguracja<br />ADMUX |= (1&lt;&lt;REFS0);//napięcie odniesienia Vcc<br />ADCSRA |= (1&lt;&lt;ADEN);//włączenie ADC<br />ADCSRA |= (1&lt;&lt;ADPS2) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);//preskaler = 128<br /><br />//Timer0 - przerwanie co 10ms<br />TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00);//preskaler = 1024<br />TIMSK |= (1&lt;&lt;TOIE0);//włączenie przerwania<br />TCNT0 = 113;//ustawieni rejestru zliczającego<br /><br />//Timer2 - PWM<br />TCCR2 |= (1&lt;&lt;CS20);//preskaler = 1<br />TIMSK |= (1&lt;&lt;TOIE2);//włączenie przerwania<br />TCNT2 = 0;<br /><br />sei();//włączenie przerwań<br /><br />_delay_ms( 10 );<br /><br />while( 1 )<br />{<br />H = pomiar( 0 ) / 2.84;//wykonanie pomiarów danych HSV<br />S = pomiar( 1 ) / 4;<br />V = pomiar( 2 ) / 4;<br /><br />HSV_to_RGB();//konwersja z HSV do RGB<br /><br />pwm&#91;0&#93; = R;//ustawienie pwm lokalnej diody RGB<br />pwm&#91;1&#93; = G;<br />pwm&#91;2&#93; = B;<br /><br />wyslij();//wysłanie ramki danych<br /><br />_delay_ms( 500 );<br />}<br />}<br /><br />ISR( TIMER0_OVF_vect )//obsługa przerwania od Timera0<br />{<br />TCNT0 = 113;//ustawieni rejestru zliczającego<br /><br />if( KEY1 )//wpiasnie odpowiednich wartosci RGB do konkretnych kanłów PWM<br />{<br />r&#91;0&#93; = R;<br />g&#91;0&#93; = G;<br />b&#91;0&#93; = B;<br />}<br /><br />if( KEY2 )<br />{<br />r&#91;1&#93; = R;<br />g&#91;1&#93; = G;<br />b&#91;1&#93; = B;<br />}<br /><br />if( KEY3 )<br />{<br />r&#91;2&#93; = R;<br />g&#91;2&#93; = G;<br />b&#91;2&#93; = B;<br />}<br /><br />if( KEY4 )<br />{<br />r&#91;3&#93; = R;<br />g&#91;3&#93; = G;<br />b&#91;3&#93; = B;<br />}<br /><br />tryb = 7 - (PINB &amp; 0x07);//zapisanie trybu pracy sterownika<br />}<br /><br />ISR( TIMER2_OVF_vect )//obsługa przerwania od Timera2 - PWM<br />{<br />static uint8_t cnt;//zmienna dla PWM<br />TCNT2 = 0;<br /><br />if( cnt&gt;=pwm&#91;0&#93; ) R_OFF; else R_ON;<br />if( cnt&gt;=pwm&#91;1&#93; ) G_OFF; else G_ON;<br />if( cnt&gt;=pwm&#91;2&#93; ) B_OFF; else B_ON;<br /><br />cnt++;<br />}<br /><br />uint16_t pomiar( uint8_t kanal )//funkcja wykonująca pomiar napiecia na wybranym kanale<br />{<br />ADMUX = (ADMUX &amp; 0xF8) | kanal;//wybór kanału<br /><br />ADCSRA |= (1&lt;&lt;ADSC);//start pomiaru<br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );//sprawdzenie czy pomiar się skończył<br /><br />ADCSRA |= (1&lt;&lt;ADSC);//powtórzenie pomiaru<br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br /><br />return ADCW;//zwrócenie wartosci pomiaru<br />}<br /><br />void HSV_to_RGB( void )<br />{<br />uint8_t f = (H % 60) * 255 / 60;<br />uint8_t p = (255 - S) * V / 255;<br />uint8_t q = (255 - f * S / 255) * V / 255;<br />uint8_t t = (255 - (255 - f) * S / 255) * V / 255;<br /><br />switch( (H / 60) % 6 )<br />{<br />case 0:<br />{<br />R = V;<br />G = t;<br />B = p;<br />break;<br />}<br />case 1:<br />{<br />R = q;<br />G = V;<br />B = p;<br />break;<br />}<br />case 2:<br />{<br />R = p;<br />G = V;<br />B = t;<br />break;<br />}<br />case 3:<br />{<br />R = p;<br />G = q;<br />B = V;<br />break;<br />}<br />case 4:<br />{<br />R = t;<br />G = p;<br />B = V;<br />break;<br />}<br />case 5:<br />{<br />R = V;<br />G = p;<br />B = q;<br />break;<br />}<br />}<br />}<br /><br />void wyslij( void )<br />{<br />uart_putc( '&lt;' );//znaki początku ramki<br />uart_putc( '&lt;' );<br /><br />for( int i=0; i&lt;4; i++ )<br />{<br />if( r&#91;i&#93; == 0 )//sprawdzenie wartosci wysłanego koloru<br />{<br />uart_putc( 'N' );//jeżeli dany kolor jest równy 0 to wysyłamy tag N oraz jako wartosc 0(znak)<br />uart_putc( '0' );<br />}<br />else//w przeciwnym wypadku wysyłany jest tag T oraz wartosc tego koloru<br />{<br />uart_putc( 'T' );<br />uart_putc( r&#91;i&#93; );<br />}<br /><br />if( g&#91;i&#93; == 0 )//sprawdzenie wartosci wysłanego koloru<br />{<br />uart_putc( 'N' );//jeżeli dany kolor jest równy 0 to wysyłamy tag N oraz jako wartosc 0(znak)<br />uart_putc( '0' );<br />}<br />else//w przeciwnym wypadku wysyłany jest tag T oraz wartosc tego koloru<br />{<br />uart_putc( 'T' );<br />uart_putc( g&#91;i&#93; );<br />}<br /><br />if( b&#91;i&#93; == 0 )//sprawdzenie wartosci wysłanego koloru<br />{<br />uart_putc( 'N' );//jeżeli dany kolor jest równy 0 to wysyłamy tag N oraz jako wartosc 0(znak)<br />uart_putc( '0' );<br />}<br />else//w przeciwnym wypadku wysyłany jest tag T oraz wartosc tego koloru<br />{<br />uart_putc( 'T' );<br />uart_putc( b&#91;i&#93; );<br />}<br />}<br /><br />uart_putint( tryb, 10 );//wysłanie informacji o trybie pracy sterownika<br /><br />uart_putc( '\n' );//wysłanie znaków kończących linie (dla terminala)<br />uart_putc( '\r' );<br /><br />uart_putc( '&gt;' );<br />uart_putc( '&gt;' );<br />}[/syntax]<br /><br />Dodam, że przestudiowałem już całą książkę, forum i filmy na youtubie i nie mogę znaleźć rozwiązania mojego problemu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12158">pudzio95</a> — 13 gru 2015, o 14:08</p><hr />
]]></content>
</entry>
</feed>