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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-31T22:55:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=4016&amp;mode</id>
<entry>
<author><name><![CDATA[TeO]]></name></author>
<updated>2013-08-31T22:55:59+01:00</updated>
<published>2013-08-31T22:55:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47692#p47692</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47692#p47692"/>
<title type="html"><![CDATA[Re: Atmega8 i sterowanie wyświetlaczem za pomocą protokołu r]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47692#p47692"><![CDATA[
Przepraszam, że tyle czasu nie odpisywałem ale cały dzień byłem zajęty. Teraz poprawiłem te błędy w programie i nadal nic, ale wgrałem do jednej atmegi (1MHz) program testowy hd44780 i do drugiej (8Mhz) i brak reakcji, musiałem coś schrzanić w okablowaniu. Jeszcze jutro postaram się to naprawić bo dziś jestem już zmęczony.<br />Tak tylko piszę żebyście nie myśleli, że was olałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Edit: to jednak nie wina połączenia tylko kompilacji (troche pokiełbasiłem w komendach). Przykładowy &quot;hello world&quot; dziala, a rc5 juz nie (poprawilem błędy) :/  spróbuje jeszcze przerobic ten program i dam znać<br /><br />Edit2: No niestety nadal bez zmian... Nie wiem czy to wina programu czy czegoś innego. W każdym razie i tak nie moge sobie z tym poradzić, Temat pozostaje nierozwiązany <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=1698">TeO</a> — 31 sie 2013, o 22:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-30T20:13:06+01:00</updated>
<published>2013-08-30T20:13:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47535#p47535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47535#p47535"/>
<title type="html"><![CDATA[Re: Atmega8 i sterowanie wyświetlaczem za pomocą protokołu r]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47535#p47535"><![CDATA[
To jest spoko (chociaż zamiast 0 lepiej pisać PB0)<br />[syntax=c]#define RC5_IN   (PINB &amp; (1&lt;&lt;0))[/syntax]<br />A to jest nieczytelne i niepotrzebne. Skasuj to całkowicie.<br />[syntax=c]DDRB = 0xFF;<br />DDRD = 0xFC;<br />PORTB = 0xFF;<br />PORTD = 0xF7;<br />DDRC &amp;= ~(1 &lt;&lt; PC5);[/syntax]<br />Wyświetlacz LCD ma konfigurowane I/O swoich plikach. Musisz tylko dobrze wybrać piny i RW podłączyć do masy. Po uruchomieniu powinien migać kursor na pierwszej pozycji. Pisząc <em>DDRB = 0xFF;</em> wyprowadzenie, które miało być wejściem RC5 konfigurujesz jako wyjście i dlatego nie działa.<br /><div class="quotetitle">TeO napisał(a):</div><div class="quotecontent"><br />PS. Masz taki avatar z powodu gry lolipop chainsaw czy może Jessici Nigri   ?<br /></div><br />Lubię lizaki  <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=465">Krauser</a> — 30 sie 2013, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TeO]]></name></author>
<updated>2013-08-30T06:33:23+01:00</updated>
<published>2013-08-30T06:33:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47441#p47441</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47441#p47441"/>
<title type="html"><![CDATA[Re: Atmega8 i sterowanie wyświetlaczem za pomocą protokołu r]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47441#p47441"><![CDATA[
Doszkoliłem się troszkę na temat fuse bitów... a więc ustawiłem tak: hfuse=0xD9, lfuse=0xe4 (raczej powinno być 8MHz, czyż nie?) w razie wu daję kod<br />[syntax=bash]sudo avrdude -p m8 -c usbasp -U flash:w:main.hex:i -U hfuse:w:0xD9:m -U lfuse:w:0xe4:m[/syntax]<br />A na wyświetlaczu nadal pozostają smutne kwadraciki kontrastu <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=1698">TeO</a> — 30 sie 2013, o 06:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-29T21:45:13+01:00</updated>
<published>2013-08-29T21:45:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47420#p47420</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47420#p47420"/>
<title type="html"><![CDATA[Re: Atmega8 i sterowanie wyświetlaczem za pomocą protokołu r]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47420#p47420"><![CDATA[
<div class="quotetitle">TeO napisał(a):</div><div class="quotecontent"><br />Nie wystarczy jak ustawie taktowanie w avr-gcc?<br /></div><br /><br />W avr gcc nie ustawia się taktowania procesora .... to co piszesz pokazuje tylko jak na razie mocno nie rozumiesz o co tu chodzi. Więc dwa słowa wyjaśnienia.<br /><br />1. Za pomocą fusebitów ustawiasz FIZYCZNE taktowanie ... częstotliwość z jaką procesor pracuje - rozumiesz - fizyczne taktowanie<br /><br />2. za pomocą ustawienia F_CPU - dajesz tylko kompilatorowi informację z jaką częstotliwością jest taktowany procek aby mógł sobie odpowiednio obliczać opóźnienia.<br /><br />A więc jeśli w avr gcc ustawisz jakąś tam wartość F_CPU nie związaną z tym co masz w procku ustawione to chyba sam już się domyślasz, że oszukujesz kompilator i on sobie przelicza opóźnienia dla twojej wyssanej z palca częstotliwości ... A potem wszystko źle działa.<br /><br />Więc:<br /><br /><div class="quotetitle">TeO napisał(a):</div><div class="quotecontent"><br />a tak szczerze mówiąc to nigdy nie miałem potrzeby zmieniania ustawień fuse bitów<br /></div><br /><br />to nie jest dobre podejście bo Fuski nie są trudne - zobacz sobie np na zakładkę &quot;Fusy Uproszczone&quot; w programie MkAvrCalculator, który w pełni będzie w wersji FREE działał z twoim prockiem ATmega8 - zobaczysz, że to łatwe i przyjemne<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mkavrcalculator.html" >http://atnel.pl/mkavrcalculator.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 sie 2013, o 21:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TeO]]></name></author>
<updated>2013-08-29T21:09:34+01:00</updated>
<published>2013-08-29T21:09:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47415#p47415</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47415#p47415"/>
<title type="html"><![CDATA[Re: Atmega8 i sterowanie wyświetlaczem za pomocą protokołu r]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47415#p47415"><![CDATA[
Poprawiłem ten plik, a tak szczerze mówiąc to nigdy nie miałem potrzeby zmieniania ustawień fuse bitów, zawsze odpalam µC na wewnętrznym generatorze rc. Nie wystarczy jak ustawie taktowanie w avr-gcc? (piszę program w gedit a kompiluje i wgrywam na µC z poziomu terminala, nie lubie babrać się w tych wszystkich ustawieniach eclipse czy tym podobnych)<br />[syntax=bash]avr-gcc -w -Os -DF_CPU=8000000UL -mmcu=atmega8 -c -o main.o main.c[/syntax]<br /><br />PS. Masz taki avatar z powodu gry lolipop chainsaw czy może Jessici Nigri  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1698">TeO</a> — 29 sie 2013, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-29T18:21:09+01:00</updated>
<published>2013-08-29T18:21:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47401#p47401</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47401#p47401"/>
<title type="html"><![CDATA[Re: Atmega8 i sterowanie wyświetlaczem za pomocą protokołu r]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47401#p47401"><![CDATA[
Masz problem z taktowaniem i związanymi z tym funkcjami. W pliku aux_globals nie potrzebnie jest:<br />[syntax=c]//delay functions<br />#define F_CPU 16000000UL //Your clock speed in Hz (16Mhz here)[/syntax]<br />i nie potrzebujesz zdeklarowanej tam funkcji delay_us skoro odpowiednik jest w util/delay.h<br />Zgodnie z opisem konfiguracji timera powinieneś mieć taktowanie 8MHz. Które ustaw programując odpowiednie fusebity i dodatkowo ustaw w opcjach projektu, bo z niego korzystają funkcje _delay_ms i _delay_us (nie zapomnij zrobić Clean a potem Build po takiej zmianie)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 29 sie 2013, o 18:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TeO]]></name></author>
<updated>2013-08-29T17:29:05+01:00</updated>
<published>2013-08-29T17:29:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47399#p47399</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47399#p47399"/>
<title type="html"><![CDATA[Atmega8 i sterowanie wyświetlaczem za pomocą protokołu rc5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4016&amp;p=47399#p47399"><![CDATA[
Witam serdecznie wszystkich forumowiczów <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Przejdę odrazu do rzeczy. znalazłem w sieci program do odbioru rc5 i drugi program do sterowania wyświetlaczem ze sterownikiem hd44780. Gdy je połączyłem w jeden i skompilowałem, nie wywaliło mi żadnych błędów, ale gdy sprawdziłem jak działa na mikrokontrolerze... no właśnie nie działa :/ tzn na wyświetlaczu nic się nie pokazuje. Sprawdzałem na 4 pilotach. Podłączyłem nawet diodę przy tsop1736 i działa poprawnie, ale na wyświetlaczu nic nie ma...<br />Poniżej zamieszczam owy program.<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#include &quot;aux_globals.h&quot;<br /><br /><br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />// Odbiornik podczerwieni SFH5110  przyłączona do portu  PB0 <br />#define RC5_IN   (PINB &amp; (1&lt;&lt;0))<br /><br />//<br />typedef unsigned char u8;<br />typedef unsigned int  uint;<br /><br />// Zmienne globalne pełnią rolę  programowych zegarów<br />// napędzanych przerwaniem TIMER0_OVF<br />volatile u8 timerL; <br />volatile u8 timerH; <br /><br />//---------------------------------------------------------------<br />// Funkcja konfiguruje i uruchamia Timer0 <br />// oraz włącza przerwanie od przepełnienia timera,<br />// przerwanie powinno występować co 32us.  <br />//---------------------------------------------------------------<br />void init_rc5()<br />{<br />  //atmega8<br />  TCCR0 = (1&lt;&lt;CS00);  // włącza Timer0  <br />  TIMSK = (1&lt;&lt;TOIE0); // włącza przerwanie &quot;Timer0 Overflow&quot;<br /><br />/*<br />  //atmega88<br />  TCCR0B = (1&lt;&lt;CS00);<br />  TIMSK0 = (1&lt;&lt;TOIE0);<br />*/<br />  // Zezwala na przerwania <br />  sei();<br />}<br /><br />//---------------------------------------------------------------<br />// Procedura obsługi przerwania  Timer0 Overflow&quot;<br />//---------------------------------------------------------------<br />ISR(TIMER0_OVF_vect)<br />{<br />   volatile  static u8 inttemp;<br /><br />   // zmienna timerL zwiększa się co 32us<br />   timerL++;<br /><br />   // zmienna timerH  zwiększa się co 8.192ms (32us*256) <br />   inttemp++;<br />   if(!inttemp ) timerH++;<br />}<br /><br />//---------------------------------------------------------------<br />// Funkcja wykrywa i dekoduje  komendę pilota RC5                                             <br />//---------------------------------------------------------------<br /> uint detect()<br /> {<br />    u8 temp;<br />    u8 ref1;<br />    u8 ref2;<br />    u8 bitcnt;<br />    uint command;<br /><br />    timerH  = 0;<br />    timerL  = 0;<br /><br />    // Czeka na okres ciszy na linii wejścia uC trwający  3.5ms<br />    // Jeśli nie wykryje takiego okresu ciszy w ciągu 131ms,<br />    // to kończy działanie funkcji z błędem<br />    while( timerL&lt;110)<br />    {<br />       if(timerH&gt;=16)  return  command = -1;<br /><br />       if(!RC5_IN) timerL = 0;<br />    }<br /><br />    // Czeka na  pierwszy bit startowy. <br />    // Jeśli nie wykryje bitu startowego w ciągu 131ms,<br />    // to kończy działanie funkcji z błędem<br />    while(RC5_IN)  <br />         if(timerH&gt;=16)  return command = -1 ;<br /><br /><br />    // Pomiar czasu trwani niskiego poziom syganłu <br />    // w pierwszym bicie startowym.<br />    // Jeśli nie wykryje rosnącego zbocza sygnału w ciągu  <br />    // 1ms, to kończy działanie funkcji z błędem <br />    timerL = 0;<br />    while(!RC5_IN)<br />         if(timerL&gt;34) return command = -1;<br /><br />    //<br />    temp = timerL;<br />    timerL = 0;<br /><br />    // ref1 - oblicza  3/4 czasu trwania bitu<br />    ref1 =temp+(temp&gt;&gt;1);<br /><br />    // ref2 - oblicza 5/4 czasu trwania bitu<br />    ref2 =(temp&lt;&lt;1)+(temp&gt;&gt;1);<br /><br /> <br />    // Oczekuje na zbocze opadające sygnału w środku drugiego<br />    // bitu startowego.<br />    // Jeśli nie wykryje zbocza w ciągu 3/4 czasu trwania <br />    // bitu, to kończy działanie funkcji z błędem <br />    while(RC5_IN)<br />         if(timerL &gt; ref1) return command = -1;<br /><br />    // W momencie wykrycia zbocza sygnału, synchronizuje<br />    // zmieną timerL dla próbkowania  bitu toggle<br />    timerL = 0;<br /><br />    // Odczytuje dekoduje pozostałe 12 bitów polecenia rc5<br />    for(bitcnt=0, command = 0; bitcnt &lt;12; bitcnt++)<br />    {<br />       // Czeka 3/4 czasu trwania bitu od momentu wykrycia<br />       // zbocza sygnału w połowie poprzedniego bitu <br />       while(timerL &lt; ref1) {};<br /> <br />       // Próbkuje - odczytuje port we  uC<br />       if(!RC5_IN)<br />       {<br />          // Jeśli odczytano 0, zapamiętuje w zmiennej <br />          // &quot;command&quot; bit o wartości 0         <br />          command &lt;&lt;= 1 ;<br /><br />          // Oczekuje na zbocze rosnące sygnału w środku bitu.<br />          // Jeśli nie wykryje zbocza w ciągu 5/4 czasu trwania <br />          // bitu, to kończy działanie funkcji z błędem    <br />          while(!RC5_IN)<br />             if(timerL &gt; ref2) return command = -1;<br />       }<br />       else<br />       {<br />          // Jeśli odczytano 1, zapamiętuje w zmiennej <br />          // &quot;command&quot; bit o wartości 1  <br />          command = (command &lt;&lt;1 ) | 0x01;<br /><br />          // Oczekuje na zbocze opadające sygnału w środku bitu.<br />          // Jeśli nie wykryje zbocza w ciągu 5/4 czasu trwania <br />          // bitu, to kończy działanie funkcji z błędem <br />          while(RC5_IN)<br />             if(timerL &gt; ref2) return command = -1;<br />       }<br /><br />       // W momencie wykrycia zbocza sygnału, synchronizuje<br />       // zmieną timerL dla próbkowania kolejnego bitu<br />       timerL = 0;<br />   }<br /><br />   // Zwraca kod polecenia rc5<br />   // bity 0..5 numer przycisku<br />   // bity 6..10  kod systemu(urządzenia)<br />   // bit 11 toggle bit<br />   return command;<br /> }<br /><br /><br />int main(void)<br />{<br />lcd_init();// init the LCD screen<br />lcd_clrscr();// initial screen cleanup<br />lcd_home();<br /><br /><br /><br />DDRB = 0xFF;<br />DDRD = 0xFC;<br />PORTB = 0xFF;<br />PORTD = 0xF7;<br />DDRC &amp;= ~(1 &lt;&lt; PC5);<br /><br />// zapisz na LCD przykładowy tekst<br />//write_text(&quot;Ala ma kota :D&quot;);<br />// petla nieskończona<br /><br /><br />char *tab&#91;5&#93;;<br />tab&#91;0&#93; = &quot;aaaaaaaaaaaaaaaa&quot;;<br />tab&#91;1&#93; = &quot;iiiiiiiiiiiiiiii&quot;;<br />tab&#91;2&#93; = &quot;qqqqqqqqqqqqqqqq&quot;;<br />tab&#91;3&#93; = &quot;qwertyuiopqwerty&quot;;<br />tab&#91;4&#93; = &quot;zxcvbnmzxcvbnmzx&quot;;<br />tab&#91;5&#93; = &quot;aaaaaaaaaaaaaaaa&quot;;<br /><br />int  a = 0;<br />int  b = 1;<br /><br /><br />uint cmd;<br />  u8 out;<br /><br /><br />  // uruchamia Timer0 i przerwanie<br />  init_rc5();<br /><br />  while (1)<br />  {<br />     // Wykrywa i dekoduje polecenie pilota RC5 <br />     cmd = detect();<br /><br />     // Jeśli odebrano komendę <br />     if(cmd != -1)<br />     {  <br />lcd_gotoxy(1,1);<br />lcd_string(tab&#91;a&#93;);<br />lcd_gotoxy(1,2);<br />lcd_string(tab&#91;b&#93;);<br />int l;<br />for (l = 0; l &lt; 100; l++) _delay_ms(10);<br />a = a + 1;<br />b = b + 1;<br /><br /><br /><br />     }<br />  }<br /><br />  return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1698">TeO</a> — 29 sie 2013, o 17:29</p><hr />
]]></content>
</entry>
</feed>