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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-09-15T11:12:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23337&amp;mode</id>
<entry>
<author><name><![CDATA[tomasz1987]]></name></author>
<updated>2020-09-15T11:12:38+01:00</updated>
<published>2020-09-15T11:12:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23337&amp;p=228983#p228983</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23337&amp;p=228983#p228983"/>
<title type="html"><![CDATA[attiny13 sterowanie fazowe timer programowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23337&amp;p=228983#p228983"><![CDATA[
wydawało mi się ze jest to ultra prosty program <br />w timerze programowym inkremetuje zmienną i resetuje w przerwaniu od przejścia przez 0<br />zależnie od wartosci tej zmiennej właczam i wyłaczam triaka <br /><br /><br /><br />ustawienia timera :<br />[syntax=c]TCCR0A |= _BV(WGM01); // set timer counter mode to CTC<br />TCCR0B |= _BV(CS01)|_BV(CS00); <br />OCR0A = 5; // set Timer's counter max value<br />TIMSK0 |= _BV(OCIE0A); // enable Timer CTC interrupt<br /><br />MCUCR |= FALLING_EDGE_IRQ;[/syntax]<br /><br /><br />obsługa timera :<br />[syntax=c]ISR(TIM0_COMPA_vect)<br />{<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />n = Timer3;/* 100Hz Timer3 */<br />if (n) Timer3 = --n;<br />}[/syntax]<br /><br />timery programowe w main(w zasadzie cały main):<br /><br />[syntax=c]while(1){<br />    if(!Timer3) {<br />    Timer3=1;<br />    ticks++;<br />    ticks_bac=ticks;<br />    if(!MOC3020_IS_HIGT &amp;&amp; ticks_bac&gt;=adc )MOC3020_ON;<br /><br /><br />    }<br /><br />    if(!Timer1) {<br />    Timer1=10000;//100ticks = 1sec<br />         // adc=ReadADC(2);<br />    adc = analog_read(POT_PIN)/25;<br /><br /><br />    }<br />}[/syntax]<br /><br />przerwanie od przejscia przez 0:<br /><br />[syntax=c]ISR (INT0_vect) {<br />ticks=0;<br />MOC3020_OFF;<br /><br /><br />}[/syntax]<br /><br /><br />obsługa analog:<br /><br />[syntax=c]int analog_read(uint8_t pin)//16bit<br />{<br />uint8_t low, high;<br /><br />switch(pin) {<br />case PB2: ADMUX = _BV(MUX0); break; // ADC1<br />        case PB4: ADMUX = _BV(MUX1); break; // ADC2<br />        case PB3: ADMUX = _BV(MUX0)|_BV(MUX1); break; // ADC3<br />        case PB5: // ADC0<br />default: ADMUX = 0; break;<br />}<br /><br />ADMUX &amp;= ~_BV(REFS0); // explicit set VCC as reference voltage (5V)<br />ADCSRA |= _BV(ADEN);  // Enable ADC<br />ADCSRA |= _BV(ADSC);  // Run single conversion<br />while(bit_is_set(ADCSRA, ADSC)); // Wait conversion is done<br /><br />// Read values<br />low = ADCL;<br />        high = ADCH;<br /><br />        // combine two bytes<br />        return (high &lt;&lt; 8) | low;<br />}[/syntax]<br />i owszem ściemnia ten program ale mruga żarówka :/<br />przejrzałem to na oscyloskopie i wygląda to tak<br /><br /><br /><a href="https://obrazkiforum.atnel.pl/1096/ab01116919e63aee3a66fd44c178a56a.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1096/ab01116919e63aee3a66fd44c178a56a.jpg" alt="Obrazek" /></a><br /><br />czyli zaraz po przerwaniu jest spowrotem on zcego nie pojmuje. <br />Poradzcie co mogę jeszcze sprawdzić<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1096">tomasz1987</a> — 15 wrz 2020, o 11:12</p><hr />
]]></content>
</entry>
</feed>