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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-03-03T18:39:44+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2483&amp;mode</id>
<entry>
<author><name><![CDATA[MeSSer]]></name></author>
<updated>2013-03-03T18:39:44+01:00</updated>
<published>2013-03-03T18:28:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2483&amp;p=29737#p29737</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2483&amp;p=29737#p29737"/>
<title type="html"><![CDATA[Programowy PWM - Analog, 2 diody i LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2483&amp;p=29737#p29737"><![CDATA[
Witam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Po raz pierwszy prezentuję na łamach forum mój kod  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br />Program pisałem by utrwalić wiedzę o ADC, obsłudze LCD i nauczyć się pisać programowy PWM - Tu wielkie podziękowania dla <strong>Antystatycznego</strong> za pomoc i wytłumaczenie mi wszystkiego.<br />Do obsługi wyświetlacza użyłem libsów Mirka. <br /><br />Użyty mikrokontroler to Atmega644p<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 27-02-2013<br /> *      Author: Mateusz<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/***** definicje diod *****/<br />#define LED1_PIN (1&lt;&lt;PC7) // definicja pinu do którego podłączona jest dioda<br />#define LED1_ON PORTC &amp;= ~LED1_PIN // makrodefinicja - załącenie diody<br />#define LED1_OFF PORTC |= LED1_PIN // makrodefinicja - wyłaczenie diody<br />#define LED2_PIN (1&lt;&lt;PC6) // definicja pinu do którego podłączona jest dioda<br />#define LED2_ON PORTC &amp;= ~LED2_PIN // makrodefinicja - załącenie diody<br />#define LED2_OFF PORTC |= LED2_PIN // makrodefinicja - wyłaczenie diody<br /><br />/***** deklaracje funkcji *****/<br />void interr_set(void);<br />void led_port_set(void);<br />void adc_init(void);<br />void disp_led_resu(void);<br />void adc_for_led(void);<br />uint8_t get_adc(uint8_t channel);<br /><br />/***** zmienne globalne *****/<br />volatile uint8_t pwm;<br />uint8_t led1,led2;<br /><br /><br />int main(void)<br />{<br />adc_init();// Wlaczenie pomiaru adc<br />led_port_set(); // ustawienie portow diod<br />interr_set();// Ustawienie timera<br />lcd_init(); //Inicjalizacja wyswietlacza<br />sei(); // globalne zezwolenie na przerwanie<br /><br />/***** Petla glowna programu *****/<br />while(1)<br />{<br />adc_for_led();<br />disp_led_resu();<br />}<br />}<br /><br />/***** PROCEDURA OBSLUGI PRZERWANIA *****/<br />ISR(TIMER0_COMPA_vect)<br />{<br />pwm++;<br />if(pwm&lt;=led1) LED1_OFF;<br />else LED1_ON;<br />if(pwm&lt;=led2) LED2_OFF;<br />else LED2_ON;<br />}<br /><br />/***** definicje funkcji *****/<br />void interr_set(void)<br />{<br />TCCR0A |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0B |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00);// preskaler = 64<br />OCR0A = 9;// dodatkowy podział przez 9 (rej. przepełnienia)<br />TIMSK0 |= (1&lt;&lt;OCIE0A);// zezwolenie na przerwanie CompareMatch<br />}<br /><br />void led_port_set(void)<br />{<br />DDRC |= LED1_PIN;//kireunk portu PC7 - wyjciowy<br />DDRC |= LED2_PIN;//kireunk portu PC6 - wyjciowy<br />}<br /><br />void adc_init(void) // ustawienia ADC<br />{<br />ADMUX |= (1&lt;&lt;REFS0) | (1&lt;&lt;ADLAR); //Zasilanie wewnętrzne AVCC 5V i konwersja 8 bitowa<br />ADCSRA |= (1&lt;&lt;ADPS2) | (1&lt;&lt; ADPS1); // preskaler 64<br />ADCSRA |= (1&lt;&lt;ADEN); // wlaczenie modulu ADC<br />}<br /><br />void disp_led_resu(void) // Wyswietlanie wartosci led1 i led2 na LCD<br />{<br />lcd_locate(0,0);<br />lcd_str(&quot;LED1 - &quot;);<br />lcd_locate(0,7);<br />lcd_int(led1);<br />lcd_str(&quot;  &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;LED2 - &quot;);<br />lcd_locate(1,7);<br />lcd_int(led2);<br />lcd_str(&quot;  &quot;);<br />}<br /><br />void adc_for_led(void) // funkcja przypisania wartosci adc do zmiennej led1, led2<br />{<br />led1=get_adc(0);<br />led2=get_adc(1);<br />}<br /><br />uint8_t get_adc(uint8_t channel) // Definicja funkcji wlaczajacej konwersje<br />{<br />channel = channel &amp; 0b00000111; // Maskowanie 3 najmlodszych bitow channel<br />ADMUX = (ADMUX &amp; 0b11111000) | channel; // Maskowanie pieciu najstarszych bitow ADMUX<br />ADCSRA |= (1&lt;&lt;ADSC); // start konwersji<br />while(ADCSRA &amp; (1&lt;&lt;ADSC)); // Sprawdzanie czy moduł jest wylaczony<br />return ADCH;<br />}<br />[/syntax]<br /><br />Film prezentujący działanie programu  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /> <br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />Zdjęcie &quot;pająka&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=857">MeSSer</a> — 3 mar 2013, o 18:28</p><hr />
]]></content>
</entry>
</feed>