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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-05T15:33:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8714&amp;mode</id>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2014-10-04T19:08:15+01:00</updated>
<published>2014-10-04T19:08:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8714&amp;p=97673#p97673</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8714&amp;p=97673#p97673"/>
<title type="html"><![CDATA[Re: Atmega8 + 2x wyswietlacz 7-segmentowy i czujnik temperat]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8714&amp;p=97673#p97673"><![CDATA[
<!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><br /><br /><br />11:47 5 X - Brak reakcji na zalecenia = kod usunięty.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 4 paź 2014, o 19:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ozikus]]></name></author>
<updated>2014-10-05T15:33:43+01:00</updated>
<published>2014-10-04T19:05:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8714&amp;p=97672#p97672</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8714&amp;p=97672#p97672"/>
<title type="html"><![CDATA[Atmega8 + 2x wyswietlacz 7-segmentowy i czujnik temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8714&amp;p=97672#p97672"><![CDATA[
Witam. Jestem początkującym w programowaniu mikrokontrolerów ale dzięki Pani Mirkowi K. wszystko idzie w miarę dobrze i do tej pory nie miałem problemów.<br />Natknąłem sie teraz na mały kłopot.<br /><br />Na początek podpiąłem atmege8 i napisałem program do sterowania paroma diodami - poszło bez większych problemów.<br />Potem dołaczyłem podwójny wyświetlacz 7-segmentowy - na początku sterowałem siedmioma wyjściami  osobno dla każdego elementu, a potem  podpiąłem  układ 7447 (dwie sztuki) by ograniczyc liczbe wyjśc wymaganych do sterowania tym wyswietlaczem. Napisałem fukncje o nazwię &quot;liczba (a,b)&quot; która po podaniu argumentu wrzuca mi na segmenty liczbe np: liczba (2,5) wysiwetli mi 25. <br /><br />Do tej pory wszystko mi szło w miare ładnie. Troche czasochłonne ale satysfakcja i zabawa niesamowita.<br /><br />Postanowiłem podłączyć czujnik temperatury ds18b20 i sprawić by na wyświetlaczu wyświetlała mi się temperatura pokojowa  (tylko całkowita część temperatury bez części dziesiętnych np:25 stopni).<br /><br />Napisałem program korzystając z wielu proadników i dokumentacji i juz po 10 godzinach walki:) udało mi sie zainicjować połączenie z czujnikiem i zczytać temperature. Problem pojawa się gdy chce ją wrzucić tylko w części całkowitej na podwójny wiświetlacz 7-segmentowy. Pomyślałem, że jeśli mam liczbe w postaći np 25.634 to wystarczy, że podziele przez dziesięc i zaokrągle w dół i wtedy otrzymam liczbe dziesiątek którą na pierwszy segment , a następnie by uzyskac jedności uzyje funkcji % by uzyskać reszte z dzielenia przez dziesięć. <br /><br />Niestety na wyswietlaczu wywala mi głupoty. Prosze o pomoc i łagodność wobec mnie.<br /><br />Poniżej kod:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 18 wrz 2014<br /> *      Author: X<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;math.h&gt;<br /><br />#define WE 2<br />#define PORT_1WIRE PIND<br />#define SET_1WIRE DDRD&amp;=~_BV(WE)<br />#define CLEAR_1WIRE DDRD|=_BV(WE)<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />int main (void)<br />{<br />DDRB=0x00;<br />//int dziesiatki;<br />//int ldziesiatki;<br /><br />int cyferki&#91;10&#93;={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};<br /><br /><br />   /* for (dziesiatki=0; dziesiatki&lt;10;dziesiatki++)<br />    {<br />for(ldziesiatki=0;ldziesiatki&lt;10;ldziesiatki++)<br />{<br />DDRB=~(cyferki&#91;ldziesiatki&#93;|cyferki&#91;dziesiatki&#93;&lt;&lt;4);<br />_delay_ms ( 100 );<br /><br />}<br />}<br />*/<br />void liczba(int a,int b)<br />{<br />DDRB=~(cyferki&#91;b&#93;|cyferki&#91;a&#93;&lt;&lt;4);<br />}<br /><br />unsigned char RESET_PULSE(void)<br />{<br />unsigned char presence;<br />CLEAR_1WIRE;<br />_delay_us(500);<br />SET_1WIRE;<br />_delay_us(30);<br />if(bit_is_clear(PORT_1WIRE,WE))<br />{presence=1;}else{presence=0;}<br />_delay_us(470);<br />if(bit_is_set(PORT_1WIRE,WE)){presence=1;}else{presence=0;}<br />return presence;<br />}<br /><br /><br />void send(char bit){<br />CLEAR_1WIRE;<br />_delay_us(5);<br />if(bit==1)<br />{<br />SET_1WIRE;<br />_delay_us(80);<br />SET_1WIRE;<br />}<br />}//koniec send<br /><br /><br />unsigned char read(void)<br />{<br />unsigned char presence;<br />CLEAR_1WIRE;<br />_delay_us(2);<br />SET_1WIRE;<br />_delay_us(15);<br />if(bit_is_set(PORT_1WIRE,WE)) presence=1;else presence=0;<br />return presence;<br /><br />}//koniec read<br /><br />void send_byte(char wartosc)<br />{<br />unsigned char i;//zmienna licznikowa<br />unsigned char pom; //zmienna pomocnicza<br />for(i=0;i&lt;8;i++)<br />{<br />pom = wartosc&gt;&gt;i;<br />pom &amp;=0x01;<br />send(pom);<br />}<br />_delay_us(100);<br />}//koniec sendbyte<br /><br /><br />unsigned char read_byte(void)<br />{<br />unsigned char i;<br />unsigned char wartosc=0;<br />for(i=0;i&lt;8;i++)<br />{<br />if(read()) wartosc|=0x01&lt;&lt;i;<br />_delay_us(15);<br />}<br />return(wartosc);<br />}//koniec readbyte<br /><br /><br /><br /><br /><br />unsigned char sprawdz;<br />//int temp1=0,temp2=0;<br />while(1){<br />sprawdz=RESET_PULSE();<br />if(sprawdz==1)<br />{<br />uint8_t temperature&#91;2&#93;;<br />uint8_t digit;<br /><br />send_byte(0xCC);//skip rom<br />send_byte(0x44);//convert t<br />_delay_ms(750);<br />sprawdz=RESET_PULSE();<br />send_byte(0xCC);<br />send_byte(0xBE);<br />temperature&#91;0&#93;=read_byte();<br />temperature&#91;1&#93;=read_byte();<br />sprawdz=RESET_PULSE();<br />digit=temperature&#91;0&#93;&gt;&gt;4;<br />digit|=(temperature&#91;1&#93; &amp; 0x07)&lt;&lt;4;<br /><br /><br /><br /><br />liczba(floor(digit/10),digit%10);<br />_delay_ms(500);<br />RESET_PULSE();<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />}<br /><br /><br /><br />}[/syntax]<br /><br /> <br /><br />za jakąkolwiek pomoc bede bardzo wdzięczny bo mase godzin na to straciłem.<br />oto zdjęcie mojego &quot;projektu&quot;;)<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/6031/86bbb7aabc5a7f56cfb93ce56c2e92b6.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/6031/86bbb7aabc5a7f56cfb93ce56c2e92b6.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6031">ozikus</a> — 4 paź 2014, o 19:05</p><hr />
]]></content>
</entry>
</feed>