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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-31T09:28:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8349&amp;mode</id>
<entry>
<author><name><![CDATA[matek45]]></name></author>
<updated>2014-08-31T09:28:58+01:00</updated>
<published>2014-08-31T09:28:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93600#p93600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93600#p93600"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93600#p93600"><![CDATA[
O kurcze. Mam bluebooka i widziałem jak to się liczy, ale za każdym razem klepanie w kalkulator męczy. Co do programu mkAVRCalculator to nie wiedziałem. <br />ŻAŁUJĘ ZA GRZECHY! PRZEPRASZAM!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3571">matek45</a> — 31 sie 2014, o 09:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-08-31T09:24:23+01:00</updated>
<published>2014-08-31T09:24:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93599#p93599</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93599#p93599"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93599#p93599"><![CDATA[
<div class="quotetitle">matek45 napisał(a):</div><div class="quotecontent"><br />Co do obliczeń przerwań to polecam stronę: <!-- m --><a class="postlink" href="http://eleccelerator.com/avr-timer-calculator/" >http://eleccelerator.com/avr-timer-calculator/</a><!-- m --><br /></div><br /><br />Cudze panie chwalicie a swego nie znacie - masz to samo w MkAvrCalculator jak nie lepiej <br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mkavrcalculator.html" >http://atnel.pl/mkavrcalculator.html</a><!-- m --><br /><br />a co więcej - bez żadnej takiej strony - łatwo i z głowy można obliczać tylko trzeba poznać prosty sposób - wystarczy zajrzeć do Bluebooka:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 sie 2014, o 09:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matek45]]></name></author>
<updated>2014-08-31T09:25:12+01:00</updated>
<published>2014-08-31T09:20:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93598#p93598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93598#p93598"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93598#p93598"><![CDATA[
1. Dla TCCR1A jest tylko WGM11 i WGM10, TCCR1B posiada WGM12. Nie zauważyłem tego :/<br />2. Co do ręcznego podziału to w ostatnim poście jest 1 dlatego, że próbowałem dla innych wartości kombinować i zapomniałem ustawić na 39, ale nie miało to znaczenia.<br />Bardzo dziękuję za pomoc.<br />Co do obliczeń przerwań to polecam stronę: <!-- m --><a class="postlink" href="http://eleccelerator.com/avr-timer-calculator/" >http://eleccelerator.com/avr-timer-calculator/</a><!-- m --><br /><br />Pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3571">matek45</a> — 31 sie 2014, o 09:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-08-31T08:46:58+01:00</updated>
<published>2014-08-31T08:46:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93592#p93592</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93592#p93592"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93592#p93592"><![CDATA[
1. Sprawdź sobie lepiej gdzie jest bit WGM12<br />2. sprawdź jak obliczyłeś przerwanie dla 1MHz w CTC<br /><br />3. zajrzyj w tym celu do przykładu do Bluebooka np przy multipleksowaniu wyświetlaczy LED jak obliczać czas przerwania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 sie 2014, o 08:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matek45]]></name></author>
<updated>2014-08-31T00:56:52+01:00</updated>
<published>2014-08-31T00:56:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93582#p93582</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93582#p93582"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93582#p93582"><![CDATA[
Kod programu (po poprawkach użytkownika szopler):<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;hd44780.h&quot;<br /><br />//int sekundy = 0;<br />volatile int setne = 0;<br />    //int godziny = 0;<br />    //int minuty = 0;<br /><br />int main(void)<br />    {<br />        TCCR1A |= (1 &lt;&lt; WGM12); //Ustawienie CTC<br />        TCCR1B |= (1 &lt;&lt; CS12);  //Wewnętrzny preskaler 256<br />        TIMSK |= (1 &lt;&lt; OCIE1A); //Zezwolenie na przerwanie<br />        OCR1A = 1; // Ręczny podział<br /><br />        lcd_init();<br />        LCD_DISPLAY(LCDDISPLAY);<br />        sei(); //Włączenie przerwań<br /><br />             while(1)<br />                {<br />                   LCD_LOCATE(0,0);<br />                   lcd_int(setne);<br />                }<br />             return 0;<br />    }<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />          setne++;<br />}[/syntax]<br /><br /><br /><br />Plik .h dla wyświetlacza hd44780:<br />[syntax=c]/*<br />Plik hd44780.h<br />*/<br /><br />#ifndef LCD_HD44780<br />#define LCD_HD44780<br /><br />/* RS */<br />#define SET_OUT_LCD_RS  DDRD  |=  _BV(PD0)<br />#define SET_LCD_RS      PORTD |=  _BV(PD0)<br />#define CLR_LCD_RS      PORTD &amp;= ~_BV(PD0)<br /><br />/* RW */<br />#define SET_OUT_LCD_RW  DDRD  |=  _BV(PD1)<br />#define SET_LCD_RW      PORTD |=  _BV(PD1)<br />#define CLR_LCD_RW      PORTD &amp;= ~_BV(PD1)<br /><br />/* E */<br />#define SET_OUT_LCD_E   DDRD  |=  _BV(PD2)<br />#define SET_LCD_E       PORTD |=  _BV(PD2)<br />#define CLR_LCD_E       PORTD &amp;= ~_BV(PD2)<br /><br />/* D4 */<br />#define SET_OUT_LCD_D4  DDRD  |=  _BV(PD3)<br />#define SET_IN_LCD_D4   DDRD  &amp;= ~_BV(PD3)<br />#define SET_LCD_D4      PORTD |=  _BV(PD3)<br />#define CLR_LCD_D4      PORTD &amp;= ~_BV(PD3)<br />#define IS_SET_LCD_D4   PIND  &amp;   _BV(PD3)<br /><br />/* D5 */<br />#define SET_OUT_LCD_D5  DDRD  |=  _BV(PD4)<br />#define SET_IN_LCD_D5   DDRD  &amp;= ~_BV(PD4)<br />#define SET_LCD_D5      PORTD |=  _BV(PD4)<br />#define CLR_LCD_D5      PORTD &amp;= ~_BV(PD4)<br />#define IS_SET_LCD_D5   PIND  &amp;   _BV(PD4)<br /><br />/* D6 */<br />#define SET_OUT_LCD_D6  DDRD  |=  _BV(PD5)<br />#define SET_IN_LCD_D6   DDRD  &amp;= ~_BV(PD5)<br />#define SET_LCD_D6      PORTD |=  _BV(PD5)<br />#define CLR_LCD_D6      PORTD &amp;= ~_BV(PD5)<br />#define IS_SET_LCD_D6   PIND  &amp;   _BV(PD5)<br /><br />/* D7 */<br />#define SET_OUT_LCD_D7  DDRD  |=  _BV(PD6)<br />#define SET_IN_LCD_D7   DDRD  &amp;= ~_BV(PD6)<br />#define SET_LCD_D7      PORTD |=  _BV(PD6)<br />#define CLR_LCD_D7      PORTD &amp;= ~_BV(PD6)<br />#define IS_SET_LCD_D7   PIND  &amp;   _BV(PD6)<br /><br /><br />#define LCD_NOP asm volatile(&quot;nop\n\t&quot;&quot;nop\n\t&quot; &quot;nop\n\t&quot; &quot;nop\n\t&quot; ::);<br /><br /><br /><br />#define LCDCOMMAND 0<br />#define LCDDATA    1<br /><br />#define LCD_LOCATE(x,y)  WriteToLCD(0x80|((x)+((y)*0x40)), LCDCOMMAND)<br /><br />#define LCD_CLEAR              WriteToLCD(0x01, LCDCOMMAND)<br />#define LCD_HOME               WriteToLCD(0x02, LCDCOMMAND)<br /><br />/* IDS */<br /><br />#define LCDINCREMENT           0x02<br />#define LCDDECREMENT           0x00<br />#define LCDDISPLAYSHIFT        0x01<br /><br />#define LCD_ENTRY_MODE(IDS)    WriteToLCD(0x04|(IDS), LCDCOMMAND)<br /><br />/* BCD */<br />#define LCDDISPLAY             0x04<br />#define LCDCURSOR              0x02<br />#define LCDBLINK               0x01<br /><br />#define LCD_DISPLAY(DCB)       WriteToLCD(0x08|(DCB), LCDCOMMAND)<br /><br />/* RL */<br />#define LCDLEFT                0x00<br />#define LCDRIGHT               0x04<br /><br />#define LCD_SHIFT_DISPLAY(RL)  WriteToLCD(0x18|(RL), LCDCOMMAND)<br />#define LCD_SHIFT_CURSOR(RL)   WriteToLCD(0x10|(RL), LCDCOMMAND)<br /><br />#define LCD_CGRAM_ADDRESS(A)   WriteToLCD(0x40|((A)&amp;0x3f), LCDCOMMAND)<br />#define LCD_DDRAM_ADDRESS(A)   WriteToLCD(0x80|((A)&amp;0x7f), LCDCOMMAND)<br /><br />#define LCD_WRITE_DATA(D)      WriteToLCD((D),LCDDATA)<br /><br /><br />void lcd_init(void);<br />void WriteToLCD(unsigned char v,unsigned char rs);<br />unsigned char ReadAddressLCD(void);<br />void lcd_puts(char *str);<br />void lcd_int(int val);<br /><br />#endif[/syntax]<br /><br /><br />Plik .c dla wyświetlacza:<br />[syntax=c]/*<br />  Plik hd44780.c<br /><br />  Definicje kilku funkcji do obsługi alfanumerycznego<br />  wyświetlacza LCD HD44780<br />*/<br /><br /><br />#include&lt;avr/io.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include &quot;hd44780.h&quot;<br />#include &lt;stdlib.h&gt;<br /><br />/*--------------------------------------------------------*/<br />/* Zapis danej lub instrukcji */<br /><br />void WriteToLCD (unsigned char v,unsigned char  rs)<br />{<br />    unsigned char bf;<br /><br />    SET_OUT_LCD_D4;<br />    SET_OUT_LCD_D5;<br />    SET_OUT_LCD_D6;<br />    SET_OUT_LCD_D7;<br /><br />    if(v&amp;0x10) SET_LCD_D4; else CLR_LCD_D4;<br />    if(v&amp;0x20) SET_LCD_D5; else CLR_LCD_D5;<br />    if(v&amp;0x40) SET_LCD_D6; else CLR_LCD_D6;<br />    if(v&amp;0x80) SET_LCD_D7; else CLR_LCD_D7;<br /> <br />    CLR_LCD_E;<br />    if(rs) SET_LCD_RS;else CLR_LCD_RS;<br />    CLR_LCD_RW;<br /><br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP; <br />    CLR_LCD_E;<br />    LCD_NOP;<br /> <br />    if(v&amp;0x01) SET_LCD_D4; else CLR_LCD_D4;<br />    if(v&amp;0x02) SET_LCD_D5; else CLR_LCD_D5;<br />    if(v&amp;0x04) SET_LCD_D6; else CLR_LCD_D6;<br />    if(v&amp;0x08) SET_LCD_D7; else CLR_LCD_D7;<br /> <br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP; <br />    CLR_LCD_E;<br />    LCD_NOP;<br /> <br />    SET_IN_LCD_D4;<br />    SET_IN_LCD_D5;<br />    SET_IN_LCD_D6;<br />    SET_IN_LCD_D7;<br /><br />    CLR_LCD_RS;<br />    SET_LCD_RW;<br />    SET_LCD_D7;<br /><br /><br />/* Przydałby się pełny odczyt */<br />    do<br />    {<br />        LCD_NOP;<br />        SET_LCD_E;<br />        LCD_NOP;<br />        bf = IS_SET_LCD_D7;<br />        CLR_LCD_E;<br />        LCD_NOP;<br />        SET_LCD_E;<br />        LCD_NOP;<br />        LCD_NOP;<br />        CLR_LCD_E;<br />        <br />    }while( bf );<br />}<br /><br /><br />/*--------------------------------------------------------*/<br />/* Funkcja odczytuje adres i flage zajetosci */<br /><br />unsigned char ReadAddressLCD ( void)<br />{<br />    unsigned char g = 0 ;<br /><br />    CLR_LCD_RS;<br />    SET_LCD_RW; <br /><br />    SET_IN_LCD_D4;<br />    SET_IN_LCD_D5;<br />    SET_IN_LCD_D6;<br />    SET_IN_LCD_D7;<br /><br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP;<br /><br />    if(IS_SET_LCD_D4) g+=16;<br />    if(IS_SET_LCD_D4) g+=32;<br />    if(IS_SET_LCD_D4) g+=64;<br />    if(IS_SET_LCD_D4) g+=128;<br /> <br />    CLR_LCD_E;<br />    LCD_NOP;<br />    SET_LCD_E;  <br />    LCD_NOP;<br />  <br />    if(IS_SET_LCD_D4) g+=8;<br />    if(IS_SET_LCD_D4) g+=4;<br />    if(IS_SET_LCD_D4) g+=2;<br />    if(IS_SET_LCD_D4) g+=1;<br />  <br />    CLR_LCD_E; <br /><br />    return  g ;<br />}<br /><br /><br />/*---------------------------------------------------------*/<br />/* Inicjalizacja wyświetlacza */<br /><br />void lcd_init(void)<br />{<br />    _delay_ms(31);    <br />   <br />    SET_OUT_LCD_RS;<br />    SET_OUT_LCD_RW;<br />    SET_OUT_LCD_E;<br />    SET_OUT_LCD_D4;<br />    SET_OUT_LCD_D5;<br />    SET_OUT_LCD_D6;<br />    SET_OUT_LCD_D7;<br /><br />    CLR_LCD_E;<br />    CLR_LCD_RS;<br />    CLR_LCD_RW;<br />    SET_LCD_D4;<br />    SET_LCD_D5;<br />    CLR_LCD_D6;<br />    CLR_LCD_D7;        <br />  <br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP; <br />    CLR_LCD_E;<br />    LCD_NOP;<br />    _delay_ms(10);<br /><br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP; <br />    CLR_LCD_E;<br />    LCD_NOP;<br />    _delay_ms(2);<br /><br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP; <br />    CLR_LCD_E;<br />    LCD_NOP;<br />    _delay_ms(2);<br /><br />    CLR_LCD_D4;<br />    LCD_NOP;<br />    SET_LCD_E;<br />    LCD_NOP; <br />    CLR_LCD_E;<br />    LCD_NOP;<br />    _delay_us(80);<br /><br />    WriteToLCD (0x28 , LCDCOMMAND) ;<br />    LCD_DISPLAY(0) ;<br />    LCD_CLEAR ;<br />    LCD_ENTRY_MODE(LCDINCREMENT) ;<br />}<br /><br /><br />/*--------------------------------------------------------*/<br />/* Wyswietla tekst na aktualnej pozycji kursora */<br /><br />void lcd_puts(char *str)<br />{<br />    unsigned char i =0;<br /><br />    while( str&#91;i&#93;)<br />        LCD_WRITE_DATA(str&#91;i++&#93;) ;<br />}<br />void lcd_int(int val)<br />{<br />char bufor&#91;17&#93;;<br />    itoa(val, bufor, 10);<br />lcd_puts( bufor );<br />}[/syntax]<br /><br /><br />uC to atmega8, wyświetlacz hd44780 lcd 2x16 - niebieski, program: eclipse z avrdude i mkAVRcalculator.<br /><br />Jeśli mam coś więcej powiedzieć to piszcie, bo nie wiem co jeszcze mógłbym dodać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3571">matek45</a> — 31 sie 2014, o 00:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bogdanc]]></name></author>
<updated>2014-08-31T00:08:41+01:00</updated>
<published>2014-08-31T00:08:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93575#p93575</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93575#p93575"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93575#p93575"><![CDATA[
<div class="quotetitle">szopler napisał(a):</div><div class="quotecontent"><br />Kod, po którym nic mi się nie wyświetla wstawił @szopler. Dodałem w 13 linijce tego kodu: LCD_DISPLAY(LCDDISPLAY); i zaczęło &quot;gadać&quot;.<br />Jednak cały czas zmienna wzrasta mi po ok.17 sekundach<br /></div><br /><br />Przede wszystkim to kolega <strong>szopler</strong> dobrze Ci podpowiada.<br /><br />Po pierwsze przerwanie powinno zajmować jak najkrócej - czyli szybkie instrukcje wewnątrz przerwania.<br />A co za tym idzie po co wrzuciłeś do przerwanie inicjalizacje wyświetlacza i wyświetlanie na ekranie?<br />Oglądałeś poradniki o przerwaniach?  link: <a href="https://www.youtube.com/watch?v=J82_Zop9cjE"  class="postlink">https://www.youtube.com/watch?v=J82_Zop9cjE</a><br /><br />Wyświetlacz inicjalizuje się tylko raz.<br /><br />A wywołanie funkcji do wyświetlania wywołuj w peli głównej programu.<br />A i kod mógł nie działać od kolegi szoplera bo TY masz pisane funkcje z dużych liter a on zapiasał lcd_init, lcd_int z małych.<br />Ważne w nazewnictwie jest trzymanie się wielkości liter.<br /><br />Przede wszystkim powiedz czego używasz do wyświetlania na LCD? na jakim sprzęcie działasz?<br />Pokaż cały kod i zawsze jak zadajesz pytanie to opisz wszystko dokładnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1319">bogdanc</a> — 31 sie 2014, o 00:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matek45]]></name></author>
<updated>2014-08-30T22:57:31+01:00</updated>
<published>2014-08-30T22:57:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93563#p93563</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93563#p93563"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93563#p93563"><![CDATA[
Kod, po którym nic mi się nie wyświetla wstawił @szopler. Dodałem w 13 linijce tego kodu: LCD_DISPLAY(LCDDISPLAY); i zaczęło &quot;gadać&quot;. <br />Jednak cały czas zmienna wzrasta mi po ok.17 sekundach <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3571">matek45</a> — 30 sie 2014, o 22:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-08-30T22:47:29+01:00</updated>
<published>2014-08-30T22:47:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93559#p93559</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93559#p93559"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93559#p93559"><![CDATA[
Witam<br /><div class="quotetitle">matek45 napisał(a):</div><div class="quotecontent"><br />Już nic mi nie wyświetla na ekranie.....<br /></div><br />Może pokaż kod po którym nic Ci się nie wyświetla bo pisząc w ten sposób, można z powodzeniem odpisać że może masz wyłączony zasilacz. <br />Nie piszę tego złośliwie, ale najpierw strzępek kodu potem tylko opisówka....<br />Tutaj każdy stara się ratować tonącego, ale za coś trzeba złapać  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 30 sie 2014, o 22:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matek45]]></name></author>
<updated>2014-08-30T22:32:44+01:00</updated>
<published>2014-08-30T22:32:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93554#p93554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93554#p93554"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93554#p93554"><![CDATA[
Już nic mi nie wyświetla na ekranie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Co do sei(), to wiem po co to jest i co to jest, tylko nie wiem dlaczego dalej potrzebna jest pętla.<br />Edit:<br />Już wyświetla, zabrakło LCD_DISPLAY, ale cały czas wolno się nalicza.<br /><br />Edit2:<br />Zmieniłem uC na inny. Co prawda atmega8L, ale ta sama nota katalogowa i problem cały czas taki sam.<br />Na 1 szybko się zmienia - zaraz po włączeniu, ale na kolejne liczby trzeba czekać niecałe 17 sekund.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3571">matek45</a> — 30 sie 2014, o 22:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2014-08-30T22:17:33+01:00</updated>
<published>2014-08-30T22:17:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93548#p93548</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93548#p93548"/>
<title type="html"><![CDATA[Re: Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93548#p93548"><![CDATA[
sei(); to Główny włącznik przerwań.<br />Zmienna &quot;setne&quot; powinna być volatile.<br />Nigdy nie rób wyświetlania w przerwaniu, że o inicjalizacji wyświetlacza za każdym razem nie wspomnę!<br /><br />To powinno wyglądać tak:<br />[syntax=c]//int sekundy = 0;<br />volatile int setne = 0;<br />    //int godziny = 0;<br />    //int minuty = 0;<br />     <br />    int main(void) {<br />        TCCR1A |= (1 &lt;&lt; WGM12); //Ustawienie CTC<br />        TCCR1B |= (1 &lt;&lt; CS12);  //Wewnętrzny preskaler 256<br />        TIMSK |= (1 &lt;&lt; OCIE1A); //Zezwolenie na przerwanie<br />        OCR1A = 39; // Ręczny podział<br /><br />        lcd_init();     <br /><br />        sei(); //Włączenie przerwań<br /><br />         while(1) {<br />           LCD_LOCATE(0,0);<br />           lcd_int(setne);<br />           }<br />return 0;<br />    }<br />     <br />    ISR(TIMER1_COMPA_vect) {<br />          setne++;<br />      }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 30 sie 2014, o 22:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matek45]]></name></author>
<updated>2014-08-30T22:13:01+01:00</updated>
<published>2014-08-30T22:13:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93546#p93546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93546#p93546"/>
<title type="html"><![CDATA[Złe odmierzanie czasu przy CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8349&amp;p=93546#p93546"><![CDATA[
Witam, problem polega na złym odmierzaniu przerwań. Wg ustawień liczba (nazwana jako &quot;setne&quot;) powinna zmieniać się w ciągu 0.01 sekundy. Jednak sama zmiana na wyższą o 1 liczbę dokonuje się po ok.17 sekundach. Myślałem, że coś źle policzyłem przy ustawianiu częstotliwości przerwań ale nawet po zmianie prescalera i OCR na inne wartości, &quot;setne&quot; zmienia się tak samo. Co zrobiłem źle?<br />Posiadam atmege8 ustawioną na 1MHz. <br /><br />[syntax=c]//int sekundy = 0;<br />int setne = 0;<br />//int godziny = 0;<br />//int minuty = 0;<br /><br />int main(void)<br />{<br />    TCCR1A |= (1 &lt;&lt; WGM12); //Ustawienie CTC<br />    TCCR1B |= (1 &lt;&lt; CS12);  //Wewnętrzny preskaler 256<br />    TIMSK |= (1 &lt;&lt; OCIE1A); //Zezwolenie na przerwanie<br />    OCR1A = 39; // Ręczny podział<br />    TIMSK |= (1 &lt;&lt; OCIE1A); //Zezwolenie na przerwanie<br />    sei(); //Procedura przerwania<br /><br /><br /><br />     while(1)<br />       {<br /><br />       }<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />  {<br />       setne++;<br />       lcd_init();<br />       LCD_DISPLAY(LCDDISPLAY);<br />       LCD_LOCATE(0,0);<br />       lcd_int(setne);<br />  }[/syntax]<br /><br />Jeszcze mam pytanie - dlaczego potrzebna jest pętla po zezwoleniu na przerwania ( sei(); )?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3571">matek45</a> — 30 sie 2014, o 22:13</p><hr />
]]></content>
</entry>
</feed>