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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-04-22T20:47:54+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20613&amp;mode</id>
<entry>
<author><name><![CDATA[vSoulz]]></name></author>
<updated>2018-04-22T20:47:54+01:00</updated>
<published>2018-04-22T20:47:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207058#p207058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207058#p207058"/>
<title type="html"><![CDATA[Re: ATMEGA168 problem z timerem, czujnik HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207058#p207058"><![CDATA[
Ahhh... właśnie rozmawiałem z kolegą i mi to samo powiedział. Już działa<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19344">vSoulz</a> — 22 kwi 2018, o 20:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-04-22T20:19:20+01:00</updated>
<published>2018-04-22T20:19:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207056#p207056</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207056#p207056"/>
<title type="html"><![CDATA[Re: ATMEGA168 problem z timerem, czujnik HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207056#p207056"><![CDATA[
A gdzie jest konfiguracja PB1 jako wyjście?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 22 kwi 2018, o 20:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vSoulz]]></name></author>
<updated>2018-04-22T19:37:56+01:00</updated>
<published>2018-04-22T19:37:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207051#p207051</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207051#p207051"/>
<title type="html"><![CDATA[Re: ATMEGA168 problem z timerem, czujnik HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=207051#p207051"><![CDATA[
Witam<br /><br />Chodzi mi tym razem o inny problem. Mianowicie INT0 wyzwalam jakąkolwiek zmianą logiczną, czyli do EICRA wpisuję ISC00. Pod INT0(PD2) mam podpięty PB1, który zmieniam co 1 sekundę. Gdy wyzwolone jest INT0 chcę aby migała mi dioda którą mam podłączoną pod PB0. Myślę, że szukałbym dalej jak to zrobić, ale jak mam podpięty miernik, żeby sprawdzić napięcie na PB1 to ogólnie działa mi to tak jak chcę żeby mi działało, lub jak dotykam kabla, a jak odłączę miernik to nic się nie dzieje. Próbowałem pod PB1 podpinać rezystory albo kondensatory ale nic niestety to nie dało. Proszę o pomoc. Napewno nie jest to kwestia styków.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />#define red_led_change PORTB ^= _BV(0)<br /><br />void InitInterrupt(void)<br />{<br />DDRD &amp;= ~(1 &lt;&lt; DDD2);  <br />//PORTD |= (1 &lt;&lt; PD2); <br />EICRA|=(1&lt;&lt;ISC00);<br />EIMSK|=(1&lt;&lt;INT0);<br />//TCNT0 = 0x00;<br />//TCCR0A = (1&lt;&lt;CS01);<br />//OCR0A = 0x10;<br />/*SREG = 0x80;*/<br />}<br /><br />int main(void)<br />{<br />InitInterrupt();<br />sei();<br />    /* Replace with your application code */<br />    while (1) <br />    {<br />PORTB |= (1 &lt;&lt; 1);<br />_delay_ms(1000);<br />PORTB &amp;= ~(1 &lt;&lt; 1);<br />_delay_ms(1000);<br />    }<br />}<br /><br />ISR(INT0_vect){<br />red_led_change;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19344">vSoulz</a> — 22 kwi 2018, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2018-04-18T05:12:04+01:00</updated>
<published>2018-04-18T05:12:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206929#p206929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206929#p206929"/>
<title type="html"><![CDATA[Re: ATMEGA168 problem z timerem, czujnik HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206929#p206929"><![CDATA[
A syntax to chyba nie actionscript?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 18 kwi 2018, o 05:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-04-17T20:55:56+01:00</updated>
<published>2018-04-17T20:55:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206921#p206921</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206921#p206921"/>
<title type="html"><![CDATA[Re: ATMEGA168 problem z timerem, czujnik HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206921#p206921"><![CDATA[
Kilka uwag porządkowych:<br />1. F_CPU definiuje się w opcjach projektu- tu do usunięcia<br />2.makro _BV  już jest zdefiniowane w io.h -nie trzeba definiować<br />3. funkcja: sys_init(void)-niepotrzebna- po co za każdym razem ustawiać preskaler kontrolera , najlepiej zaprogramować jeden raz za pomocą odpowiedniego fusa.<br />4. funkcja: double l_pomiar(void) -horror- ma zwracać typ double a zwraca typ int (kompilator nie protestuje?). Poza tym po co ma zwracać zmienną, z którą nic nie robi, a która i tak jest dostępna (globalna).<br />5. sei()-lepiej włączać już po wszystkich &quot;initach&quot; ( jeżeli nie koliduje to z nimi).<br />6. &quot;pulse&quot; &quot;i&quot; są volatile ale &quot;licznik&quot; i &quot;flaga&quot; już nie- a są używane przez przerwania- a może będą za chwilę przez kompilator zoptymalizowane?.  <br />Reszty nie sprawdzałem. Lepiej na początek opanuj jednak mruganie Led-em z przerwaniami i bez, co określony, zadany okres, potem dołącz wyświetlacz-opanuj , potem czujnik-opanuj.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 17 kwi 2018, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vSoulz]]></name></author>
<updated>2018-04-22T19:39:22+01:00</updated>
<published>2018-04-17T19:35:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206919#p206919</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206919#p206919"/>
<title type="html"><![CDATA[ATMEGA168 problem z timerem, czujnik HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20613&amp;p=206919#p206919"><![CDATA[
Witam<br /><br />Od kilku dni siedzę nad podłączeniem tego czujnika odległości do mojej ATMEGI i nic w niej nie chce działać. Ogólnie miałem dużo problemów z przerywaniami, ale coś się w końcu z nimi udało i teraz nie działa mi timer. Mam podłączony wyświetlacz OLED pod I2C oraz czujnik odległości. Pod TRIG jest PB0 a pod ECHO mam INT0, czyli PD2. Próbowałem sam coś napisać, potem także kody z internetu, ale nic nie chce działać. Na wyświetlaczu podaje mi ile pętli wykonał główny program, ilość wejść do INT0 oraz odległość z timera, która zawsze wynosi 0. Do przerwań mi czasem wchodzi bo widzę, że licznik się zwiększa. Wrzucam cały kod, niektóre elementy mam &quot;//&quot;, ale to są te z których wcześniej korzystałem. Wrzucę je żebyście widzieli co też moja wyobraźnia próbowała stworzyć, jednak nie jest to wszystko, ponieważ dużo kodu usunąłem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dodam też, że jak nie miałem dodanych przerwań i robiłem sobie coś na diodach dla nauki to jak deklarowałem F_CPU jako 1MHz to diody mi migały co ~ 1 sekundę, a po dodaniu przerwań, jak dam delay na 5 sec to też jakoś co sekundę się coś robi. Nie wiem czemu to ma wpływ na te taktowanie, ale próbowałem w fusebitach zmienić taktowanie na 8MHz i teraz w tym programie widzę, że wyświetlacz mi się odświeża co ~3 sec jak mam ustawione na 2. Pozdrawiam i dzięki za pomoc<br /><br />[syntax=c]#ifndef F_CPU<br />#define F_CPU 8000000UL // 8 MHz clock speed<br />#endif<br /><br />#define INTERFACE_IIC<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;time.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;u8g.h&quot;<br /><br /><br />#define _BV(n) (1 &lt;&lt; n)<br />#define red_led_change PORTC ^= _BV(0)<br />#define red_led_on PORTB |= _BV(0)<br />#define red_led_off PORTB &amp;= ~_BV(0)<br />#define switch_B0 PORTB ^= _BV(0)<br />#define ClrBit(reg, bit) ((reg) &amp;= ~(0x01 &lt;&lt; (bit))) <br />#define SetBit(reg, bit) ((reg) |= (0x01 &lt;&lt; (bit))) <br /><br />u8g_t u8g;<br /><br />void u8g_setup(void)<br />{  <br />  u8g_InitI2C(&amp;u8g, &amp;u8g_dev_sh1106_128x64_i2c, U8G_I2C_OPT_NONE);<br />}<br /><br />void sys_init(void)<br />{<br />#if defined(__AVR__)<br />  CLKPR = 0x80;<br />  CLKPR = 0x00;<br />#endif<br />}<br /><br />void draw(int i,int ix, int odl)<br />{<br />char string&#91;55&#93;;<br /><br />char liczba&#91;20&#93;;<br />char proba&#91;5&#93;;<br />char pomiar&#91;5&#93;;<br /><br />sprintf(liczba, &quot;%d\0&quot;, odl);<br /><br />sprintf(proba, &quot;%d\0&quot;, i);<br /><br />sprintf(pomiar, &quot;%d\0&quot;, ix);<br /><br />strcpy(string,&quot;&quot;);<br /><br />strcat(string,&quot;Pr:&quot;);<br /><br />strcat(string, proba);<br /><br />strcat(string,&quot; Pom:&quot;);<br /><br />strcat(string, pomiar);<br />strcat(string,&quot;  Odl:&quot;);<br /><br />strcat(string, liczba);<br />strcat(string, &quot;\0&quot;);<br />  u8g_SetFont(&amp;u8g, u8g_font_6x10); <br />  u8g_DrawStr(&amp;u8g, 0, 15, string);<br />}<br /><br />static volatile int pulse = 0;<br />static volatile int i = 0;<br />int ix = 0;<br />int licznik = 0;<br />int flaga = 0;<br /><br />void InitInterrupt(void)<br />{<br />//PRZERWANIA ZEWNĘTRZNE<br /><br />DDRD = 0xf8;                            //PD0-PD2 - wejscie (Echo); PD3-PD5 - wyjścia(Trig)<br />// <br />// EICRA = 0x3f;                            //Przerwanie zostanie wywołane zboczem narastająym<br />//na wejściach INT0, INT1, INT2<br />EIMSK|=(1&lt;&lt;INT0);//setting interrupt triggering logic change<br /> EICRA|=(1&lt;&lt;ISC01)|(1&lt;&lt;WGM01);//enabling interrupt0<br />//TIMER2<br />TCNT0 = 0x00;                            //Zerowanie rejestru TCNT2 (Rejestr jednostki zegara)<br /><br />TCCR0A = (1&lt;&lt;CS01);            //Ustawia timer2 w tryb CTC bez preskalera<br />//Czestotliwość 16Mhz/1=16MHz<br /><br />OCR0A = 0x10;                            //Górna wartość licznika wynosi 16<br />//Przerwania będą następować co 1us<br /><br />SREG = 0x80;<br />}<br /><br /><br /> double l_pomiar(void)<br /> {<br /> SetBit(MCUCR, INT0);<br /> <br /> <br /> switch_B0;<br /> _delay_us(15);<br /> switch_B0;<br /> <br /> _delay_ms(8);<br /><br /> ClrBit(MCUCR, INT0);<br /> i++;<br /> return pulse;<br /> }<br /><br /><br />void main()<br />{<br />/*int16_t COUNTA = 0;*/<br />//PORTB |= 0xFF;<br />//PORTD |= 0x00;<br />/*DDRD  = 0b11111011;*/   // set PD2 to input<br />//PORTD = 0b00000100;   // set PD2 to high<br />//DDRD &amp;= ~(1&lt;&lt;PD7);<br />PORTB = 0x00;<br />// EIMSK|=(1&lt;&lt;INT0);//setting interrupt triggering logic change<br />// EICRA|=(1&lt;&lt;ISC00);//enabling interrupt0<br />InitInterrupt();<br />sei();<br /> sys_init();<br /> u8g_setup();<br />while(1)<br />{<br /> //_delay_ms(5000);<br /> //swich_B0;    //uaktywnienie SC-HC04<br /> //_delay_us(10);<br /> <br /> //red_led_change;<br /> //_delay_ms(2000);<br /> //swich_B0;<br /> //red_led_change;<br />// COUNTA = pulse/58;<br />_delay_ms(2000);<br />double xd =  l_pomiar();<br /> u8g_FirstPage(&amp;u8g);<br /> do{<br /> draw(i, ix, xd);<br /> }while(u8g_NextPage(&amp;u8g));<br />// COUNTA = 0;<br /><br />}<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />licznik++;             ////domyślam się że muszę na początku zadeklarować zmienna licznik? ///<br />}<br /><br />// ISR(INT0_vect)<br />// {<br />//  if (i==1){<br />//  TCCR0B=0;<br />//  pulse=TCNT0;<br />//  TCNT0=0;<br />//  i=0;<br />//  }<br />//  if (i==0)<br />//  {<br />//  TCCR0B|=(1&lt;&lt;CS00);<br />//  i=1;<br />//  }<br />// //red_led_change;<br />//  ix++;<br />// }<br />ISR(INT0_vect){<br /> if(flaga==0)<br /> {<br /> TIMSK0 = (1&lt;&lt;OCIE0A);                //włącza Timer2 w trybie dopasowania (START)<br /> <br /> ClrBit(EIMSK, INT0);<br /> <br /> EICRA = 0x00;                        //Przerwanie zostanie wywołane zboczem opadającym<br /> EICRA = (1&lt;&lt;ISC01);                //na wejściu INT0<br /> <br /> SetBit(EIMSK, INT0);<br /> <br /> flaga=1;<br /> }<br /> <br /> else if(flaga==1)<br /> {<br /> TIMSK0 &amp;=~(1&lt;&lt;OCIE0A);                //zatrzymuje Timer2 (STOP)<br /> <br /> ClrBit(EIMSK, INT0);<br /> <br /> EICRA = 0x00;                        //Przerwanie zostanie wywołane zboczem rosnącym<br /> EICRA = (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00);        //na wejściu INT0<br /> <br /> SetBit(EIMSK, INT0);<br /> <br /> pulse=licznik;                        //Zapisuje wartość licznika do zmiennej &quot;odl&quot;<br /> //pulse/=20;                            //oraz skaluje go<br />  ix++;<br /> licznik=0;                            //Zerowanie licznika<br /> flaga=0;<br /><br /> }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19344">vSoulz</a> — 17 kwi 2018, o 19:35</p><hr />
]]></content>
</entry>
</feed>