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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-03-29T00:58:45+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2693&amp;mode</id>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2013-03-29T00:58:45+01:00</updated>
<published>2013-03-29T00:58:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32294#p32294</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32294#p32294"/>
<title type="html"><![CDATA[Re: Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32294#p32294"><![CDATA[
no ok poczytam jeszcze raz, zobaczymy, tylko ze strasznie według mnie jest skomplikowane to wyswietlanie temperatury... wdl mnei powinno byc coś znacznie prościej bo fakt jak nie ma przycisków tylko ustawie żeby samo sie zmieniały czujniki np co 5 sekund to działa oki.... dlatego jakoś dziwnie ze dodanie przycisków tak strasznie komplikuje.<br /><br />No ale rozumiem z e malo wiem i to tego wina, wiec poczytam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 29 mar 2013, o 00:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-29T00:52:01+01:00</updated>
<published>2013-03-29T00:52:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32293#p32293</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32293#p32293"/>
<title type="html"><![CDATA[Re: Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32293#p32293"><![CDATA[
no ja rozumiem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale jeszcze raz powtarzam - trzeba zacząć jednak od podstaw - a tą podstawą w przypadku DS'ów jest ścisła procedura pomiarów czyli<br /><br />1. wysłanie rozkazu pomiaru<br />2. odczekanie min 750ms<br />3. odczyt temperatury<br />4. jakaś mała zwłoka<br />5. leć do pkt.1<br /><br />a ty likwidując timer programowy rozłożyłeś to na łopatki dlatego nie działa dobrze - więc nie ma co się dziwić<br /><br />nawet jak potrzebowałeś timera sprzętowego do obsługi LED to nie koliduje to ani z tym żeby w tym samym timerze sprzętowym zrobić podstawę czasu dla timera programowego albo użyć po prostu drugiego timera sprzętowego - przecież ATmega każda ma co najmniej 2 timery 8-bitowe<br /><br />wiem wiem - to może brzmieć o tych timerach programowych jak czary-mary na razie dla ciebie - i myślisz pewnie że mi łatwo mówić ....<br /><br />nie nie - rozumiem cię doskonale ale po prostu moim zdaniem troszkę wykonałeś za daleki skok w przód nie trenując wcześniejszych prostszych rzeczy i stąd braki w poradzeniu sobie z tym na razie<br /><br />dlatego cofnij się może troszkę w przerabianiu materiału w książce i na tą chwilę więcej różnych ćwiczeń z samymi diodami LED i timerami programowymi podziałaj najpierw - to łatwiej to pójdzie ok?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 mar 2013, o 00:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2013-03-29T00:39:37+01:00</updated>
<published>2013-03-29T00:39:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32291#p32291</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32291#p32291"/>
<title type="html"><![CDATA[Re: Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32291#p32291"><![CDATA[
Panie Mirku, przerwanie  ISR(TIMER0_COMP_vect) u mnie steruje wyświetlaczem led - bo zamieniłem wyswietlacz LCD na diodowy bo nie miałem HD4470. Tu by trzeba było uzyc dwóch przerwan, a to nie chciało przejść za bardzo... Oczywisnie pewnie da sie to zrobic tylko ze nie moglem jakos tego ogarnac i usunąłem przerwanie służące za taki timer programowy zebym mogl obsłużyć wyświetlacz diodowy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 29 mar 2013, o 00:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-29T00:13:48+01:00</updated>
<published>2013-03-29T00:13:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32285#p32285</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32285#p32285"/>
<title type="html"><![CDATA[Re: Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32285#p32285"><![CDATA[
przede wszystkim zauważ, że:<br /><br />1. w ogóle nie pilnujesz czasu konwersji <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... gdzie u ciebie odczekanie 750ms ?<br /><br />2. wciąż w pętli głównej atakujesz czujniki rozkazem pomiaru<br /><br />3. wciąż w pętli głównej sprawdzasz ile czujników na magistrali<br /><br />tak więc w ogóle że odczytuje się jakaś temperatura co jakiś czas to raczej toto lotek<br /><br />przerobiłeś program z książki ale niestety nie zrozumiałeś tam jeszcze - co było NAJWAŻNIEJSZE czyli taki ala timer programowy do odmierzania czasów. Tam czujniki były cyklicznie co 1 sekundę czy co 2 odpytywane ... może dokładniej tak że co 3 sekundy <br /><br />w pierwszej - rozkaz pomiaru do wszystkich<br />w drugiej - pomiar z pierwszego<br />w trzeciej - pomiar z drugiego<br /><br />ty to w ogóle wyrzuciłeś i wstawiłeś sobie klawisze niefrasobliwie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale kwestię czasów TOTALNIE pominąłeś jak widzę w tym kodzie<br /><br />no i skoro dalej zostawiłeś sprawdzanie temperatury w IF'ie sprawdzającym stan klawisza (tak nie powinieneś robić) to nie dziw się że gdy trzymasz klawisz to coś się dzieje a gdy go puszczasz to nie...<br /><br />ja na twoim miejscu zostawiłbym kod tak jak z książki - a klawiszami sterował tylko i wyłącznie samym wyświetlaniem - natomiast w TLE działałoby sobie spokojnie mierzenie temperatury<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 mar 2013, o 00:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2013-03-29T00:14:50+01:00</updated>
<published>2013-03-28T23:52:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32280#p32280</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32280#p32280"/>
<title type="html"><![CDATA[Re: Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32280#p32280"><![CDATA[
po wyrzuceniu  sprawdzania DS18B20 z ifów sprawdzalnych stan przycisków jest taka sama dokładnie sytuacja.<br /><br />Diody przełączają się prawidłowo. Tylko dziwna sprawa bo gdy wyciągnę jeden czujnik to diody sie przelaczaja, a jak wymienie go na inny DS to juz nie przełączają... jakies zwarcie w czujniku?.... temperature pokazuje<br /><br />co do efektu to dalej trzeba trzymac wciśnięty przycisk by na bierzaco odswiezał temperature<br /><br /><br />[syntax=c]#include &quot;1Wire/ds18x20.h&quot;<br />#define KEY (1&lt;&lt;PA5);<br />#define KEY1 (1&lt;&lt;PB4);<br /><br />void display_temp(void);<br /><br />uint8_t czujniki_cnt;<br />uint8_t keylock, keylock2;<br /><br /><br />uint8_t subzero, cel, cel_fract_bits;<br />uint8_t a1, a2;<br /><br />int main(void) {<br /><br />PORTA |= KEY;<br />PORTB |= KEY1;<br />DDRA |= LED_CZ_0;<br />DDRA |= LED_CZ_1;<br /><br /><br />d_led_init();<br /><br />sei();<br /><br />while(1) {<br />keylock=0;<br />keylock2=0;<br /><br />czujniki_cnt = search_sensors();<br />_delay_ms(10);<br /><br /><br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(30);<br /><br /><br />if(!keylock &amp;&amp; !(PINA &amp; (1&lt;&lt;PA5)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){<br /><br />_delay_ms(30);<br />keylock=1;<br />display_temp();<br />PORTA |= LED_CZ_0;<br />PORTA &amp;= ~LED_CZ_1;<br />}<br /><br />else if(keylock &amp;&amp; (PINA &amp; (1&lt;&lt;PA5))){<br />keylock=0;<br />}<br /><br />if(!keylock2 &amp;&amp; !(PINB &amp; (1&lt;&lt;PB4)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){<br /><br />_delay_ms(30);<br />display_temp();<br />PORTA &amp;= ~LED_CZ_0;<br />PORTA |= LED_CZ_1;<br />}<br /><br />else if(keylock2 &amp;&amp; (PINB &amp; (1&lt;&lt;PB4))){<br />keylock2=0;<br />}<br /><br />}<br />}<br /><br /><br /><br />void display_temp(void) {<br /><br />a1= cel/10;<br /> cy2=a1;<br />a2= (cel%10);<br /> cy1=a2;<br /><br />}<br /><br />[/syntax]<br /><br />Może napisze jak ja rozumiem ten kod.  Na poczatku podciągniecie VCC do klawiszy oraz ustawienie wyjścia na diodach LED pokazujacych ktora czujka aktualnie działa. Potem inicjuje globalne przerwania poprzez <em>sei();</em>. Wchodzimy do petli głównej, gdzie nastepuje inicjacja 2 zmiennych do obsługi drgan styków (bo dwa klawisze wiec 2 zmienne), sprawdzenie ilosci czujników podpietych do Atmegi. Następnie jest rozpoczęcie pomiaru[syntax=c] DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );[/syntax] Dochodzimy do pierwszego IF-a: <br />[syntax=c]if(!keylock &amp;&amp; !(PINA &amp; (1&lt;&lt;PA5)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){[/syntax]<br />Jesli pierwsza zmienna ma wartość 0 oraz przycisk pierwszy wciśnięty oraz jesli prawidłowo pobrany został pomiar to czekamy 30 ms, zmieniamy zmienna na 1 i potem uruchamiamy procedurę wyświetlenia wyniku na wyświetlaczu. <br />[syntax=c]void display_temp(void) {<br /><br />a1= cel/10;<br /> cy2=a1;<br />a2= (cel%10);<br /> cy1=a2;[/syntax]<br />W przeciwnym razie jeśli pierwsza zmienna jest różna od zera oraz przycisk nie jest wciśnięty ustaw zmienna pierwszą na 0.<br />Analogicznie z drugim czujnikiem.<img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 28 mar 2013, o 23:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-28T23:37:40+01:00</updated>
<published>2013-03-28T23:37:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32274#p32274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32274#p32274"/>
<title type="html"><![CDATA[Re: Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32274#p32274"><![CDATA[
Ja bym na początek radził dla testu wywalić z tego kodu obsługę DS18x20 i sprawdzić samo działanie IFów na samych diodach LED - bo teraz jest duży miszmasz niepotrzebnie, a szczególnie to sprawdzania czujników w IF'ach sprawdzających stany klawiszy  - to tworzy taki chaos i dlatego też kolega się na razie przez to gubi - nawet mi z samego kodu trudno się domyśleć co kolega ma na myśli.<br /><br />Ale jak wywalisz w testowej wersji obsługę DS'ów to powinno się zrobić od razu jaśniej ok?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 mar 2013, o 23:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2013-03-28T23:38:17+01:00</updated>
<published>2013-03-28T23:32:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32272#p32272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32272#p32272"/>
<title type="html"><![CDATA[Problem z obsługa przycisku - odczyt z DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2693&amp;p=32272#p32272"><![CDATA[
Witam,<br />Przede wszystkim witam wszystkich użytkowników tego forum,, a szczególnie moderatorów i proszę na wstępie o wyrozumiałość i cierpliwość <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .<br /><br />Mam problem z przyciskiem do mojego termometru.<br />Założenia: Dwa przyciski, dwie czujki, dwie diody. Przycisk 1 ma sprawić ze wyświetli się temperatura z czujnika 1, i analogicznie drugi z czujnika drugiego. I do tego zapalają się odpowiednie diody, mające sygnalizować która czujka podaje aktualnie temperaturę na wyświetlacz 2x 7segm.<br /><br />Ni by działa wszystko tylko temperatura jest pobierana raz tzn. nacisnę przycisk i pobierze np 20 stopni... i więcej nie mierzy mimo zmiany temperatury. jak nacisnę drugi raz to się &quot;odświeży&quot; -  tylko trzymając wciśnięty przycisk podaje temperaturę na bieżąco... kluczowe tu są zmienne odpowiadające za drgania styków... bez nich temp. jest odświeżana cały czas. wiem ze coś się blokuje, wiem co ale nie wiem jak zmienić kod... próbowałem rożnie i ciągle brak takiego efektu jaki chce osiągnąć.<br /><br />[syntax=c]#include &quot;1Wire/ds18x20.h&quot;<br />#define KEY (1&lt;&lt;PA5);<br />#define KEY1 (1&lt;&lt;PB4);<br /><br />void display_temp(void);<br /><br />uint8_t czujniki_cnt;<br />uint8_t keylock, keylock2;<br /><br />uint8_t subzero, cel, cel_fract_bits;<br />uint8_t a1, a2;<br /><br />int main(void) {<br /><br />PORTA |= KEY;<br />PORTB |= KEY1;<br />DDRA |= LED_CZ_0;<br />DDRA |= LED_CZ_1;<br /><br /><br />d_led_init();<br /><br />sei();<br /><br />while(1) {<br />keylock=0;<br />keylock2=0;<br /><br />czujniki_cnt = search_sensors();<br />_delay_ms(10);<br /><br /><br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(30);<br /><br /><br />if(!keylock &amp;&amp; !(PINA &amp; (1&lt;&lt;PA5)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){<br /><br />_delay_ms(30);<br />keylock=1;<br />display_temp();<br />PORTA |= LED_CZ_0;<br />PORTA &amp;= ~LED_CZ_1;<br />}<br /><br />else if(keylock &amp;&amp; (PINA &amp; (1&lt;&lt;PA5)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){<br />keylock=0;<br />}<br /><br />if(!keylock2 &amp;&amp; !(PINB &amp; (1&lt;&lt;PB4)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){<br /><br />_delay_ms(30);<br />display_temp();<br />PORTA &amp;= ~LED_CZ_0;<br />PORTA |= LED_CZ_1;<br />}<br /><br />else if(keylock2 &amp;&amp; (PINB &amp; (1&lt;&lt;PB4)) &amp;&amp; (DS18X20_OK == DS18X20_read_meas(gSensorIDs[1], &amp;subzero, &amp;cel, &amp;cel_fract_bits) )){<br />keylock2=0;<br />}<br /><br />}<br />}<br /><br /><br />void display_temp(void) {<br /><br />a1= cel/10;<br /> cy2=a1;<br />a2= (cel%10);<br /> cy1=a2;<br />}[/syntax]<br /><br /><span style="color: #FF0000">[ na przyszłość proszę zajrzeć do tego posta i zobaczyć jak się umieszcza kod w znacznikach [ syntax = c ] zamiast [ code ] ok? to taka prośba - już poprawiłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> - mirekk36]</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 28 mar 2013, o 23:32</p><hr />
]]></content>
</entry>
</feed>