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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-13T21:27:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4729&amp;mode</id>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-13T21:27:47+01:00</updated>
<published>2013-11-13T21:27:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56741#p56741</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56741#p56741"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56741#p56741"><![CDATA[
Niestety nie działa Twój sposób.<br />Ponieważ to jest w zasadzie osobny temat dlatego pozwoliłem sobie założyć nowy temat, a ten będzie o Timerach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 13 lis 2013, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mipsa]]></name></author>
<updated>2013-11-13T11:14:26+01:00</updated>
<published>2013-11-13T11:14:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56667#p56667</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56667#p56667"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56667#p56667"><![CDATA[
ja bym to zrobił tak<br /><br />[syntax=c]#include &lt;avr/eeprom.h&gt;<br />uint16_t EEMEM kWh;<br />/* PROGRAM GŁÓWNY*/<br /><br />int main( void )<br />{<br />//Deklaracja zmiennej kWh_stan w kilowatogodzinach, a zmienna Moc jest w Watosekundach<br />uint16_t kWh_stan;<br />kWh_stan = eeprom_read_byte(&amp;kWh);<br />if (Moc &gt;= 3600000) {  //1 &#91;kWh&#93; = 3600000 &#91;Ws&#93;<br />//   kWh_stan = kWh_stan++ ; //dodaj jedną kilowatogodzinę do RAM<br />eeprom_write_byte (&amp;kWh, kWh_stan++); // zapis do eeprom<br />   Moc = 0 ; //wyzeruj licznik Watosekund[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1824">Mipsa</a> — 13 lis 2013, o 11:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-13T10:27:16+01:00</updated>
<published>2013-11-13T10:27:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56657#p56657</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56657#p56657"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56657#p56657"><![CDATA[
Chyba znalazłem błąd - muszę jeszcze potestować<br />deklaracja zmiennej uiAddress powinna  być z gwiazdką<br /><br />uint16_t * uiAddress = 0x000;<br />oraz trzeba zmienić w pliku eeprom.h przy tych 2 funkcjach uint8_t na uint16_t<br /><br />ale pytanie - czym różni się funkcja<br />eeprom_write_byte<br />od <br />eeprom_update_byte<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 13 lis 2013, o 10:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-13T01:10:57+01:00</updated>
<published>2013-11-13T01:10:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56636#p56636</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56636#p56636"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56636#p56636"><![CDATA[
Nie da się - nic nie działa.<br /><br />Ale są wbudowane funkcje i nie  trzeba ich pisać<br />eeprom_write_byte (lub eeprom_write_float)<br />eeprom_read_byte (lub  eeprom_read_float)<br /><br />Jeśli gdzieś zadeklaruję <br />[syntax=c]//EEPROM<br />float uiAddress = 0; //próbowałem to 0 zamienić na coś innego ale bez rezultatu<br />uint16_t kWh_stan;<br />float EEMEM kWh_stan_ee;[/syntax]<br />to potem kompilator pozwala odczytać zmienną kWh_stan_ee<br />[syntax=c]//Wczytanie z pamieci EEPROM do zmiennej kWh_stan<br /> kWh_stan = eeprom_read_float (&amp;kWh_stan_ee);[/syntax]<br />i to wszystko jest przed pętlą główną i się kompiluje.<br /><br />A w pętli jest zapis do EEPROMA[syntax=c]kWh_stan = kWh_stan + Moc/3600000 ;<br /> kWh_stan_ee = kWh_stan;<br /> eeprom_write_float (uiAddress, kWh_stan_ee); // zapis do eeprom<br /> Moc = 0 ; //wyzeruj licznik Watosekund[/syntax]<br /><br />a komunikat pojawia się taki: error: incompatible type for argument 1 of '__eewr_float_m8'<br />.... note: expected 'float *' but argument is of type 'float'<br /><br />próbowałem dać uint8_t ale to nie ma znaczenia - tak czy siak nie działa<br /><br />a nawet zamieniając funkcje na read_byte zamiast read_float to w ogóle nie kompiluje się ani zapis ani odczyt, a na flot przynajmniej odczyt działa.<br /><br />Oczywiście nie jest mi potrzebna zmienna float - uint16_t wystarczy bo to jest 65000kWh<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 13 lis 2013, o 01:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mipsa]]></name></author>
<updated>2013-11-12T14:06:24+01:00</updated>
<published>2013-11-12T14:06:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56516#p56516</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56516#p56516"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56516#p56516"><![CDATA[
o próbowałeś tak<br />[syntax=c]EEPROM_read(uiAddress,&amp;kWh_stan);[/syntax]<br /><br />Zapisujesz coś pod kWh_stan, odzytujesz &amp;kWh_stan<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1824">Mipsa</a> — 12 lis 2013, o 14:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-12T13:52:27+01:00</updated>
<published>2013-11-12T13:52:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56514#p56514</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56514#p56514"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56514#p56514"><![CDATA[
Przy przepisywanie popełniłem więcej błędów, ale już źródłowy kod jest poprawiony.<br />Tam oczywiście miałem uint16_t - kompilator by nie przeszedł.<br /><br />to może zapis działa prawidłowo tylko odczyt nie do końca.<br /><br />Odczyt zrobiłem tak.<br /><br />kWh_stan1 = EEPROM_read(uiAddress);<br />i potem sprawdzam sobie na RS232 czy wyświetla prawidłowo - i niestety nie.<br /><br />i potem przez RS232 wyświetlam co jest pod wartością zmiennej kWh_stan1 - i jest 0.<br /><br />i mam jeszcze pytanie o uiAddress. <br />Pamięć wEEPROM Atmedze8 jest 512 bajtów. W każdym bajcie jest 8 bitów. Czyli mam razem do zapisania 4096 bitów.<br />Jeżeli zmienna jest 16 bitowa to zapisana jest w 2 bajtach pamięci.<br />Jak się odwołujemy do konkretnego bajta w przypadku zmiennych 8 bitowych a jak do 16 bitowych i większych.<br />Ten przykład z datasheetu określa uiAddress na EEAR - a jaki jeszcze może być?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 12 lis 2013, o 13:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mipsa]]></name></author>
<updated>2013-11-12T13:08:43+01:00</updated>
<published>2013-11-12T13:08:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56504#p56504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56504#p56504"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56504#p56504"><![CDATA[
Tak na szybko to co widać w kodzie.<br />masz:<br />[syntax=c]//Deklaracja zmiennej kWh w kilowatogodzinach, a zmienna Moc jest w Watosekundach<br />uint16t kWh_stan;[/syntax]<br /><br />a powinno być :<br />[syntax=c]//Deklaracja zmiennej kWh w kilowatogodzinach, a zmienna Moc jest w Watosekundach<br />uint16_t kWh_stan;[/syntax]<br /><br /><br />ja zapisuje i odczytuje tak np:<br /><br />[syntax=c]uint16_t EEMEM kWh;<br /><br /><br />//=================================================PROGRAM GŁÓWNY=====================================================<br /><br />int main(void)<br />{<br />uint16_t kWh_stan;<br />kWh_stan = eeprom_read_byte(&amp;kWh);[/syntax]<br /><br /><br />Może to nie jest najlepszy sposób. <br />Ale ja również dopiero się uczę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1824">Mipsa</a> — 12 lis 2013, o 13:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-12T13:54:06+01:00</updated>
<published>2013-11-12T10:57:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56479#p56479</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56479#p56479"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56479#p56479"><![CDATA[
Witajcie.<br />Zliczanie działa już ładnie. Ale występują 2 problemy.<br />Po dołączeniu tego kodu do zliczania Watosekund do całego programu pojawił się problem, że jak tutaj miałem już wyskalowane w sekundach (zostawiłem kwarc 10MHz na razie) to w nowym programie operacje wykonują się co 3sekundy.<br />ZNalazłem jeden delay_ms ustawiony na 1s i go usunałem i potem jeszcze raz wyskalowałem układ.<br />Pytanie teraz - jeśli będę dopisywał jakieś linijki kody to od nowa będę musiał skalować układ?<br /><br />I drugie pytanie - jak przenieść zmienne do nieulotnej pamięci. zeby po resecie nie traciło się wyniku.<br />takie coś spłodziłem, ale coś nie działa. W RAMie działa prawidłowo, ale w EEPROmie nie bardzo.<br /><br />[syntax=c]#include &lt;avr/eeprom.h&gt;<br />void EEPROM_write( uiAddress, kWh_stan);<br />void EEPROM_read(uiAddress);<br />uint16_t uiAddress ;<br />...<br />//Deklaracja zmiennej kWh_stan w kilowatogodzinach, a zmienna Moc jest w Watosekundach<br />uint16_t kWh_stan; <br />if (Moc &gt;= 3600000) {  //1 &#91;kWh&#93; = 3600000 &#91;Ws&#93;<br />//   kWh_stan = kWh_stan++ ; //dodaj jedną kilowatogodzinę do RAM<br />   EEPROM_write (uiAddress, kWh_stan++); // zapis do eeprom<br />   Moc = 0 ; //wyzeruj licznik Watosekund<br />}<br />....<br />//Funkcje Zapisu do EEPROM<br />void EEPROM_write( uiAddress, kWh_stan)<br />{<br />/* Wait for completion of previous write */<br />while(EECR &amp; (1&lt;&lt;EEWE))<br />;<br />/* Set up address and data registers */<br />EEAR = uiAddress;<br />EEDR = ucData;<br />/* Write logical one to EEMWE */<br />EECR |= (1&lt;&lt;EEMWE);<br />/* Start eeprom write by setting EEWE */<br />EECR |= (1&lt;&lt;EEWE);<br />}<br />// Odczyt z EEPROM<br />void EEPROM_read(uiAddress)<br />{<br />/* Wait for completion of previous write */<br />while(EECR &amp; (1&lt;&lt;EEWE))<br />;<br />/* Set up address register */<br />EEAR = uiAddress;<br />/* Start eeprom read by writing EERE */<br />EECR |= (1&lt;&lt;EERE);<br />/* Return data from data register */<br />return EEDR;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 12 lis 2013, o 10:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[acid3]]></name></author>
<updated>2013-11-11T08:52:06+01:00</updated>
<published>2013-11-11T08:52:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56301#p56301</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56301#p56301"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56301#p56301"><![CDATA[
To są zmienne programowe. Nazywają się tylko Timer1 i Timer2. Równie dobrze mogą się nazwać APSIK1 i HAU2 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Te nazwy (timer1 i 2 ) łatwiej zapamiętać i łatwiej posługiwać się nimi w kodzie, bo od razu wiadomo czym są.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=944">acid3</a> — 11 lis 2013, o 08:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-10T23:08:34+01:00</updated>
<published>2013-11-10T23:08:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56265#p56265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56265#p56265"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56265#p56265"><![CDATA[
Ale jeszcze dla wyjaśnienia Timera. Te zmienne odpowiadają timerowi 1 i 2 z kontrolera czy to są zupełnie inne zmienne i możemy ich tworzyć do woli ale pamiętając że działają z jednakową częstotliwością i prescalerem.<br />Czyli możemy ustawić Timer1=50 Timer2=100 (jak w naszym przypadku), Timer3 = 1000 itd. i ewentualnie powołać pierwszy timer sprzetowy 16bitowy z tak samo dowolną ilością zmiennych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 10 lis 2013, o 23:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[programek]]></name></author>
<updated>2013-11-10T19:50:05+01:00</updated>
<published>2013-11-10T19:50:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56198#p56198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56198#p56198"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56198#p56198"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />Ale zastanawiam sie po co zmienna Timer1  bo nigdzie nie jest użyta.<br /></div><br /><br />Zawsze jak piszę sobie program z użyciem Timera to tworze sobie od razu 2 Timery gdybym później w kodzie go potrzebował... Ale spokojnie możesz sobie usunąć z pierwszej lini: Timer1, i na końcu jeszcze jest taki fragment:<br />[syntax=c]n = Timer1;<br />if (n) Timer1 = --n;  /* 100Hz Timer1 */[/syntax]<br /><br />on też jest nie potrzebny jeśli nie używasz Timera1<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Ale nie bardzo go zrozumialem dlatego zamiast !Timer2<br /></div><br /><br />To jest bardzo proste <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />w języku C można stworzyć taki warunek:<br />[syntax=c]if(zmienna){<br />   //instrukcje<br />}[/syntax]<br />w tym przypadku instrukcje wykonają się jeśli zmienna będzie większa od 0<br /><br />Natomiast w tym przypadku jest odwrotnie:<br />[syntax=c]if(!zmienna){<br />   //instrukcje<br />}[/syntax]<br />instrukcje wykonają się gdy zmienna ma wartość 0<br /><br />Rozumiesz???? <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=1526">programek</a> — 10 lis 2013, o 19:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-10T17:31:56+01:00</updated>
<published>2013-11-10T17:31:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56163#p56163</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56163#p56163"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56163#p56163"><![CDATA[
Widzialem podobny kod co Mirek napisał. Ale nie bardzo go zrozumialem dlatego zamiast !Timer2 dalem warunek kiedy Timer równy 0. Ale zastanawiam sie po co zmienna Timer1  bo nigdzie nie jest użyta. Teraz widzę że to jest równoważny zapis<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 10 lis 2013, o 17:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[programek]]></name></author>
<updated>2013-11-10T08:42:07+01:00</updated>
<published>2013-11-10T08:42:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56076#p56076</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56076#p56076"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56076#p56076"><![CDATA[
[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 10-11-2013<br /> *      Author: programek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br />volatile uint8_t Timer1, Timer2;  /* timery programowe 100Hz */<br /><br />// Definicje inne<br />#define LED1 (1&lt;&lt;PB0)<br /><br />float Moc=0; // Moc w Watach<br />float napiecie=20; //napiecie w V<br />float natezenie=5; //natezenie w A<br /><br />int main(void) {<br /><br />/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 |= (1&lt;&lt;WGM21);         // tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22) | (1&lt;&lt;CS21) | (1&lt;&lt;CS20);       // preskaler = 1024<br />OCR2 = F_CPU/1024UL/100UL;              // przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2);      // Odblokowanie przerwania CompareMatch<br /><br />sei();/* włączamy globalne przerwania */<br /><br /><br />/* pętla nieskończona */<br />while(1) {<br /><br />if (Moc &gt; 1000){<br />        DDRB |= LED1; //załączamy diodę LED jesli Moc przekroczy 1kWh<br /> }<br /><br /><br />if( !Timer2 ) {             /*Timer2 co 1000ms*/<br />Timer2 = 100;<br /> Moc = Moc + (napiecie * natezenie);<br /><br />      }<br /><br /><br /><br />  }  //koniec while<br /><br />}   //koniec main(void)<br /><br />ISR( TIMER2_COMP_vect ) {<br />uint8_t n;<br /><br />   n = Timer1;<br />   if (n) Timer1 = --n;  /* 100Hz Timer1 */<br />   n = Timer2;<br />   if (n) Timer2 = --n;  /* 100Hz Timer2 */<br />}[/syntax]<br /><br />Powinno działać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Widzę że kolega mnie już wyprzedził<br /><br />PS. Przeoczyłem że masz tu błąd:<br />[syntax=c]if (Timer2 = 0){[/syntax]<br />i napisałem kod od początku... <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1526">programek</a> — 10 lis 2013, o 08:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[acid3]]></name></author>
<updated>2013-11-10T08:31:01+01:00</updated>
<published>2013-11-10T08:31:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56075#p56075</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56075#p56075"/>
<title type="html"><![CDATA[Re: Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56075#p56075"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br /> if (Timer2 = 0){<br /></div><br /><br />tu masz zamiast warunku przypisanie wartości do Timer2<br /><br />powinno być :<br /><br />[syntax=c]if (Timer2 == 0){[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 11 minutach ]</span></strong><br /><br />A jeśli chodzi o kwarc i Timer2 i za jego pomocą chcesz &quot;bardzo dokładnie&quot; (znacz teoretycznie dokładniej niż 0,16%) to musisz zastosować jakiś kwarc &quot;przyjazny&quot; dla UART np. 11059200 , 14 745 600 , 18 432 000, it. i wtedy z obliczeń wyjdzie Ci &quot;dokładnie&quot; 1 sek.<br /><br /><br />PS. Cz któryś z kolegów posiadających częstotliwościomierz mógłby zrobić taki mały test kwarców jak Mirek zrobił przy DS3231 ... <br />     Bardzo chętnie sam bym się dowiedział jak bardzo można liczyć na pomiar czasu za pomocą tych urządzeń.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=944">acid3</a> — 10 lis 2013, o 08:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2013-11-10T02:30:46+01:00</updated>
<published>2013-11-10T02:30:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56064#p56064</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56064#p56064"/>
<title type="html"><![CDATA[Zliczanie zmiennej co określony czas Timer2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4729&amp;p=56064#p56064"><![CDATA[
Witajcie.<br />Nie mogę się uporać z problemem napisania programu, który co okreslony czas zliczałby mi Moc.<br />Napisałem coś takiego[syntax=c]/*<br /> /*      Atmega8A 8MHz<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />// timery programowe<br />volatile uint16_t Timer2;<br /><br />// Definicje inne<br />#define LED1 (1&lt;&lt;PB0)<br /><br />float Moc=0; // Moc w Watach<br />float napiecie=20; //napiecie w V<br />float natezenie=5; //natezenie w A<br /><br />int main(void) {<br /><br /><br /> /* Timer2 – konfigurcajca Timera 8bit w trybie NORMAL */<br /> TCCR2  |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); // preskaler = 1024<br /> OCR2  = 78;   // przerwanie porównania co 10ms (100Hz) troche niedokladnie bo powinno byc 78,125 ale przy tym zegarze nic sie nie da zrobic<br /> TIMSK  = (1&lt;&lt;OCIE2); // Odblokowanie przerwania CompareMatch<br /><br /> sei();<br /> while(1){<br /> if (Moc &gt; 1000){<br /> DDRB |= LED1; //załączamy diodę LED jesli Moc przekroczy 1kWh<br /> }<br /> if (Timer2 = 0){<br /> Moc = Moc + (napiecie * natezenie);<br />                         Timer2 = 100; //ustawiamy odliczanie<br /> }<br /> }<br />}<br />//*** przerwanie Timer2 CompareMatch<br />ISR(TIMER2_COMP_vect) {<br />uint16_t n;<br />n = Timer2;<br />if (n) Timer2 = --n;<br />}[/syntax] <br /><br />Program co 1 sekundę powinien zwiększać zmienną Moc o 100W. A tutaj raz, że nie działa to jeszcze nie wiem jak poradzić sobie z tym ustawieniem 1 sekundy. Na pewno będę musiał dobrać kwarc bo widzę, że na tym prescalerze i f procesora niewiele da się ustawić, ale może są jakieś inne pomysły.<br />Ponieważ to jest tylkoczęść programu dlatego nie skorzystanie z Timera i zastosowanie delaya np na 100ms i odliczanie zmiennej Timer2 od 10 do 0 nie wchodzi w rachubę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 10 lis 2013, o 02:30</p><hr />
]]></content>
</entry>
</feed>