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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-11-25T08:07:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16879&amp;mode</id>
<entry>
<author><name><![CDATA[medyk]]></name></author>
<updated>2016-11-25T08:07:48+01:00</updated>
<published>2016-11-25T08:07:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175579#p175579</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175579#p175579"/>
<title type="html"><![CDATA[Re: Zmiana PWM 250 Hz na 300 Hz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175579#p175579"><![CDATA[
Dlaczego to nie działa. Chciałbym by komparator uruchamiał pętle zliczania. Wynik zliczania wykorzystać do obliczenia wypełnienia <br /><br />[syntax=c]// ***********************************************************  <br />// ***********************************************************  <br />// Atmega8 - PWM  <br />// FCPU 8MHz  <br />// http://www.mikrokontrolery.blogspot.com  <br />// ***********************************************************  <br />#include &lt;avr/io.h&gt;  <br />#include &lt;stdint.h&gt;  <br />#include &lt;avr/interrupt.h&gt;   <br />#include &lt;avr/signal.h&gt;<br /><br />  <br />#define LED1 (1&lt;&lt;PB1)  <br />#define LED2 (1&lt;&lt;PB2)  <br /><br />int x=0;<br /><br />int sygnal(void)<br />{<br /><br /><br /><br />for(x=0;x&lt;100000;x++)// pętla odpowiedzialna za liczenie czasu<br />{<br />if(bit_is_set(ACSR,ACO))// jeżeli bit ACO rejestru ACSR ustawiony<br />{<br />break;// to przerwij<br />}<br />}<br />return x;// zwróć wartość zmiennej x<br />}<br /><br />  <br />int main(void)   <br /><br /><br /><br />{<br /><br />DDRB |= LED1 | LED2;   //Wyjścia LED  <br />ACSR =  _BV(ACIE);  //wejscie PD6<br />   <br />   //Inicjalizacja Timer1 (PWM)  <br />   TCCR1A |= (1&lt;&lt;COM1A1) //Zmiana stanu wyjścia OC1A na niski przy porównaniu A  <br />          |  (1&lt;&lt;COM1B1) //Zmiana stanu wyjścia OC1B na niski przy porównaniu B  <br />          |  (1&lt;&lt;WGM11); //Tryb 14 (FAST PWM, TOP=ICR1)  <br />  <br />   TCCR1B |= (1&lt;&lt;WGM13) | (1&lt;&lt;WGM12)  //Tryb 14 (FAST PWM, TOP=ICR1)  <br />          | (1&lt;&lt;CS01)<br />  | (1&lt;&lt;CS00);                //preskalera  64<br />  <br />   ICR1 = 417;  //Wartość maksymalna (dla trybu 14)  <br />                 //a więc częstotliwość = CLK/(ICR1*64) = 300Hz  <br />  <br />   OCR1A = sygnal()/100;    //Wartość początkowa porównania A (Wyjście OC1A - PB1),  <br />                 <br />  <br />   OCR1B = 217;    //Wartość początkowa porównania B (Wyjście OC1B - PBB),   <br />                 //wypełnenie = 50%  <br /><br />return(0);<br /><br />}<br />   <br /> <br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15533">medyk</a> — 25 lis 2016, o 08:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2016-11-25T07:46:45+01:00</updated>
<published>2016-11-25T07:46:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175578#p175578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175578#p175578"/>
<title type="html"><![CDATA[Re: Zmiana PWM 250 Hz na 300 Hz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175578#p175578"><![CDATA[
Da się to zrobić programowo bez problemu ale możesz ten swój PWM też podać na adc przez filtr dolnoprzepustowy. Będziesz miał tam napięcie zależne od wypelnienia. Pozniej mierzysz to napięcie najlepiej w trybie 8 bit i odrazu zapisujesz to do OCRx<br /><br />Wysłane z mojego LG-K350 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 25 lis 2016, o 07:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[medyk]]></name></author>
<updated>2016-11-25T02:26:55+01:00</updated>
<published>2016-11-25T02:26:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175577#p175577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175577#p175577"/>
<title type="html"><![CDATA[Re: Zmiana PWM 250 Hz na 300 Hz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175577#p175577"><![CDATA[
Teraz mam PWM wychodzące o częstotliwości 300Hz. Zmieniając OCR1A zmienia wypełnienie PWM. Potrzebuje dorobić do tego odczyt wypełnienia PWM 250Hz przychodzące. Proszę o pomoc. Program na Atmega8<br /><br />[syntax=c]// ***********************************************************  <br />// Atmega8 - PWM  <br />// FCPU 8MHz  <br />// http://www.mikrokontrolery.blogspot.com  <br />// ***********************************************************  <br />#include &lt;avr/io.h&gt;  <br />#include &lt;stdint.h&gt;  <br />#include &lt;avr/interrupt.h&gt; <br />#include &lt;util/delay.h&gt;   <br /><br />  <br />#define LED1 (1&lt;&lt;PB1)  <br />#define LED2 (1&lt;&lt;PB2)  <br /><br /> <br /><br /><br />void PWM_Init (void)<br /><br />{<br />DDRB |= LED1 | LED2;   //Wyjścia LED  <br />   <br />   //Inicjalizacja Timer1 (PWM)  <br />   TCCR1A |= (1&lt;&lt;COM1A1) //Zmiana stanu wyjścia OC1A na niski przy porównaniu A  <br />          |  (1&lt;&lt;COM1B1) //Zmiana stanu wyjścia OC1B na niski przy porównaniu B  <br />          |  (1&lt;&lt;WGM11); //Tryb 14 (FAST PWM, TOP=ICR1)  <br />  <br />   TCCR1B |= (1&lt;&lt;WGM13) | (1&lt;&lt;WGM12)  //Tryb 14 (FAST PWM, TOP=ICR1)  <br />          | (1&lt;&lt;CS01)<br />  | (1&lt;&lt;CS00);                //preskalera  64<br />  <br />   ICR1 = 417;  //Wartość maksymalna (dla trybu 14)  <br />                 //a więc częstotliwość = CLK/(ICR1*64) = 300Hz  <br />  <br />   OCR1A=200;    //Wartość początkowa porównania A (Wyjście OC1A - PB1),  <br />                 //wypełnenie = 50%  <br />  <br />   OCR1B=217;    //Wartość początkowa porównania B (Wyjście OC1B - PBB),   <br />                 //wypełnenie = 50%  <br />  <br />  <br />  sei();<br />  <br /><br />  <br />  <br /><br />   }<br /><br /><br /><br />  <br />int main(void)   <br />{  <br /> <br />sei();  <br /> PWM_Init();     //inicjalizajca PWM <br />  <br /><br /> for(;;)  <br /> { <br /><br /> } <br /> return (0);      <br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15533">medyk</a> — 25 lis 2016, o 02:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-11-23T07:56:51+01:00</updated>
<published>2016-11-23T07:56:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175432#p175432</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175432#p175432"/>
<title type="html"><![CDATA[Re: Zmiana PWM 250 Hz na 300 Hz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175432#p175432"><![CDATA[
<div class="quotetitle">medyk napisał(a):</div><div class="quotecontent"><br />...Witam, jestem tu nowy<br /></div><br />Witamy - zamieść ten kod w bardziej strawialnej formie: listing kodu/SYNTAX wybierz/C - bo taki zapis to...<br /><br />Pozdr.<br /><br />...a to nie jest tutaj?<br /><div class="quotetitle">medyk napisał(a):</div><div class="quotecontent"><br />[syntax=c]// with timer1 clock rate @ 15.625KHz(64MHz/4096): Then 300Hz PWM count:52 and 250Hz PWM count:62.5<br />#define SLOW_THRESHOLD  62[/syntax]<br /></div><br />zamiast 62 wpisujesz 52 (chyba)<br /><br />Pozdr.II<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 lis 2016, o 07:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[medyk]]></name></author>
<updated>2016-11-23T10:50:39+01:00</updated>
<published>2016-11-22T23:26:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175430#p175430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175430#p175430"/>
<title type="html"><![CDATA[Zmiana PWM 250 Hz na 300 Hz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16879&amp;p=175430#p175430"><![CDATA[
Witam, jestem tu nowy i poszukuje pomocy. Potrzebuje przerobić sygnał Pwm o częstotliwości 250Hz na sygnał o taki samym wypełnieniu (procentowo) ale częstotliwości 300 Hz.<br /><br />Na tym pliku ma wyjściowy PWM o częstotliwości 312 Hz<br /><br />[syntax=c]//*************************************************************<br />//  BOOST1.c  SAAB 9-3 T5 BCV to T7 BCV valve conversion<br />//<br />//  (c) 2016 Escherlogic Inc.   All right reserved.<br />//<br />//  By: Stefan Hax  stefan@escherlogic.com <br />//<br />//  You are free to use this at your own risk!<br />//<br />//*************************************************************<br />// ATtiny45 code to convert SAAB 93 T5 boost control valve output<br />// from the ECU to use the newer signle coil T7 boost control valve<br />// <br />// for T7 valve PWM freq is 50Hz for engine speeds lower than 2500RPM<br />// and 32Hz for higher engine speeds<br />// <br />// for T5 valve freq is 90Hz for engine speeds lower than 2500RPM<br />// and 70Hz for higher engine speeds<br />//<br />//**********************************************************************<br />#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />//********************* Memory Config ******************************************<br />#define EEPROMMEM __attribute__ ((section (&quot;.eeprom&quot;)))<br />uint8_t eeprominit&#91;&#93; EEPROMMEM = {0,0,0,255};    // default eeprom memory settings<br /><br />#define HFUSEMEM __attribute__ ((section (&quot;.hfuse&quot;)))<br />uint8_t hfuseinit&#91;&#93; HFUSEMEM = {0xd6};    // hfuse settings -- protect flash during erase -- BOD = 1.8v<br /><br />#define LFUSEMEM __attribute__ ((section (&quot;.lfuse&quot;)))<br />uint8_t lfuseinit&#91;&#93; LFUSEMEM = {0xe2};    // lfuse settings -- internal RC osc @ 8Mhz<br /><br />#define EFUSEMEM __attribute__ ((section (&quot;.efuse&quot;)))<br />uint8_t efuseinit&#91;&#93; EFUSEMEM = {0xff};    // efuse settings<br />//******************************************************************************<br /><br />//************************************************<br />// Port B I/O assignment<br />#define T5A_IN3// PB3 connected to T5 A coil drive (input)<br />#define T5B_IN4// PB4 connected to T5 B coil drive (input)<br />#define T7_VALVE0// PB0 connected to T7 valve (output)<br />//***********************************************<br />#define VALVE_ONPORTB |= _BV(T7_VALVE)<br />#define VALVE_OFFPORTB &amp;= (uint8_t)~_BV(T7_VALVE)<br /><br />//*********************************************************************************************************<br />// timer0 in CTC mode to generate 50Hz x 100 and 32Hz x 100 interrupt rates<br />#define T_SLOW3<br />#define T_FAST3<br />// with timer1 clock rate @ 15.625KHz(64MHz/4096): Then 300Hz PWM count:52 and 250Hz PWM count:62.5 <br />#define SLOW_THRESHOLD62<br /><br />// pwm_speed states:<br />enum { PWM_FAST=0, PWM_SLOW };<br /><br />// T5 2-coil input states: <br />enum { DC_OFF=0, DC_ON, DC_REST };<br /><br />// globals<br />volatile uint8_t pwm_speed, pwm_out, pwm_cnt;<br />volatile uint8_t dc_state, dc_count, dc_on, dc_calc;<br /><br />//*********************************************<br />// valve output ISR<br />ISR(TIM0_COMPA_vect)<br />{<br />pwm_cnt++;<br />if(pwm_cnt &gt;= 100) {<br />pwm_cnt = 0;<br />OCR0A = (pwm_speed == PWM_FAST)? T_FAST : T_SLOW;// set the TOP valve for the correct PWM frequency<br />}<br /><br />if(pwm_cnt &gt;= pwm_out) { VALVE_OFF; } else { VALVE_ON; }<br />}<br /><br />//*******************************************<br />// timer1 overflow -- if this ISR is called then there is a dead input!!  -- Reset everything...<br />ISR(TIM1_OVF_vect)<br />{<br />pwm_speed = PWM_FAST;<br />pwm_out = 0;<br />dc_state = DC_OFF;<br />dc_calc = 0;<br />}<br /><br />//*******************************************<br />// Pin Change ISR (T5A / T5B inputs)<br />ISR(PCINT0_vect)<br />{<br /><br />switch(dc_state) {<br />default:<br />case DC_OFF:<br />if(PINB &amp; _BV(T5A_IN)) {// NOT TRUE!!<br />} else {// TRUE!!<br />dc_count = TCNT1;<br />TCNT1 = 0;<br />dc_state = DC_ON;<br />dc_calc = 1;// trigger PWM output calculations<br />}<br />break;<br /><br />case DC_ON:<br />if(PINB &amp; _BV(T5B_IN)) {// NOT TRUE!!<br />} else {// TRUE!!<br />dc_on = TCNT1;<br />dc_state = DC_REST;<br />}<br />break;<br /><br />case DC_REST:<br />if( PINB &amp; (_BV(T5A_IN) | _BV(T5B_IN)) ) {// BOTH NOT TRUE!!<br />dc_state = DC_OFF;<br />}<br />break;<br />}<br />}<br /><br />//***********************************<br />// initialize...<br />void init(void)<br />{<br />uint16_t n;<br /><br />//****** timer0 setup ***************************<br />// generate interrupts for bit-bang-PWM output<br />// where: 0 -&gt; output OFF<br />// and 100 -&gt; output 100%<br />TCCR0A = _BV(WGM01);// CTC mode<br />TCCR0B = _BV(CS01) | _BV(CS00);// 8MHz dix 64<br />OCR0A = (pwm_speed == PWM_FAST)? T_FAST : T_SLOW;// set the TOP valve for the correct PWM frequency<br />pwm_out = 1;// default duty cycle<br />TIMSK |= _BV(OCIE0A);// enable interrupt<br /><br />//****** T7 Valve setup ************************<br />DDRB = _BV(T7_VALVE);// T7 valve output<br />VALVE_OFF;// turn valve OFF<br /><br /><br />//******* PLL ***********************************<br />// setup for 64MHHz<br />PLLCSR = _BV(PLLE);// enable PLL<br />for(n=0; n&lt;1000; n++);// time delay &gt; 100us<br />while(!(PLLCSR &amp; _BV(PLOCK)));// wait for PLL to lock<br />PLLCSR |= _BV(PCKE);// enable Pclk<br /><br />//******* timer1 setup **************************<br />// divide by 4096<br />TCCR1 = _BV(CS13) | _BV(CS12) | _BV(CS10);// PCK/4096<br />TIMSK |= _BV(TOIE1);// just enable overflow interrupt<br /><br /><br />//***** control input ***************************<br />// setup port change int<br />PCMSK = _BV(T5A_IN) | _BV(T5B_IN);// enable only PB3 &amp; PB4 for PC Int<br />GIMSK |= _BV(PCIE);// enable PC Int<br /><br />//***** global int enable *********************<br />sei();// enable global interrupt<br />}                                                                                                                <br /><br />//*************************************<br />// compute T7 valve PWM signal and set<br />void pwm_go(void)<br />{<br />if(dc_calc) {// signal from PCINT0 ISR<br />dc_calc = 0;// clear the flag<br /><br />if(dc_count) {//<br />if(dc_count &gt; SLOW_THRESHOLD) {// determine engine speed state..<br />pwm_speed = PWM_SLOW;<br />} else {<br />pwm_speed = PWM_FAST;<br />}<br /><br />pwm_out = (uint8_t)( ((uint16_t)dc_on * 100) / (uint16_t)dc_count);// compute output PWM <br /><br />} else { // avoiding div/0<br />pwm_speed = PWM_FAST;<br />pwm_out = 2;<br />}<br />}<br />}<br /><br />//************************************<br />// main<br />int main(void)<br />{<br />init();<br /><br />while(1) {<br />pwm_go();<br />}<br />}<br />//***** done *************************[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15533">medyk</a> — 22 lis 2016, o 23:26</p><hr />
]]></content>
</entry>
</feed>