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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-10-03T21:47:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1616&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-03T21:47:42+01:00</updated>
<published>2012-10-03T21:47:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16394#p16394</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16394#p16394"/>
<title type="html"><![CDATA[Re: Zapisywanie i przechowywanie zmiennych w C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16394#p16394"><![CDATA[
wbrew pozorom jak na początkującego to napisałeś niezłą bo NIEBLOKUJĄCĄ funkcję - tą getkbd() <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> o ile już wiesz co to są funkcje nieblokujące i jak duże to ma znaczenie podczas programowania. Ale skoro programowałeś dużo w asm, to być może takie pojęcia są już tobie znane.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 paź 2012, o 21:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[CeBe]]></name></author>
<updated>2012-10-03T21:36:12+01:00</updated>
<published>2012-10-03T21:36:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16392#p16392</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16392#p16392"/>
<title type="html"><![CDATA[Re: Zapisywanie i przechowywanie zmiennych w C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16392#p16392"><![CDATA[
Działa!  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  Popełniłem błąd nie stosując takiego rozkazu:  <br />[syntax=c]<br />nr_klawisza = getkbd();[/syntax]<br />zamiast przypisać to stosowałem bezpośrednio:<br />[syntax=c]<br />lcd_int( getkbd )[/syntax]<br /><br />Czyli trzeba tą funkcję w ten sposób wywołać, chociaż nie do końca wiem dlaczego ale to dopiero początki. Bardzo dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=573">CeBe</a> — 3 paź 2012, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-03T16:38:49+01:00</updated>
<published>2012-10-03T16:38:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16358#p16358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16358#p16358"/>
<title type="html"><![CDATA[Re: Zapisywanie i przechowywanie zmiennych w C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16358#p16358"><![CDATA[
zakładając że ta obsługa klawiaturki matrycowej działa to:<br /><br />[syntax=c]uint8_t nr_klawisza = 255;<br /><br />while(1) {<br /><br />   nr_klawisza = getkbd();<br />   if( nr_klawisza != 255 ) {<br />      lcd_cls();<br />      lcd_int( nr_klawisza );<br />   }<br />}[/syntax]<br /><br />ale ....<br /><br />ale niech kolega jak najszybciej zmieni te wszystkie unsigned char na uint8_t to po pierwsze<br /><br />po drugie - wcięcia - wcięcia i jeszcze raz wcięcia w kodzie tej funkcji getkbd() bo tego nie da się czytać <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />po trzecie jeśli już gdzieś będzie kolega używał znaków ASCII i potrzebny będzie typ char to w AVR GCC proponuję zapomnieć o<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">unsigned char</div><br /><br />tylko pisać<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">char</div><br /><br />dlatego że domyślnie typ char jest za pomocą też domyślnych opcji kompilatora - kompilowany do unsigned char. A usilny nawyk stosowania unsigned char bardzo szybko odbije się poważną czkawką dalej<br /><br />poza tym własnie jeśli nie znaki ASCII w zmiennych to proszę zapamiętać - stosujemy typu charakterystyczne dla AVR GCC czyli<br /><br />[syntax=c]uint8_t<br />int8_t<br /><br />uint16_t<br />int<br /><br />uint32_t<br />long int<br /><br />uint64_t<br />long long int[/syntax]<br /><br />to ważne ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 paź 2012, o 16:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[CeBe]]></name></author>
<updated>2012-10-03T16:24:45+01:00</updated>
<published>2012-10-03T16:24:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16355#p16355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16355#p16355"/>
<title type="html"><![CDATA[Zapisywanie i przechowywanie zmiennych w C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1616&amp;p=16355#p16355"><![CDATA[
Witam,<br />jestem początkującym w C jak dotąd korzystałem z asemblera na '51 i na ST7 jakoś zachciało mi się poznać rodzinę AVR to już sobie pomyślałem żeby pisać programy w C. Zakupiłem książki, programator USBASP (rewelacja!) i na początku utknąłem z problemem.<br />Chodzi mi o konkretny przykład:<br /><br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &quot;kbd4x4.h&quot;<br /><br />unsigned char getkbd(void)<br />{<br />unsigned char stan_klawiszy = 255;<br />DDR_KEY = 0xF0;<br />PORT_KEY = 0xFF;<br />ROW1_CLR;<br />asm(&quot;nop&quot;);<br />if(!COL1)<br />stan_klawiszy = 0;<br />if(!COL2)<br />stan_klawiszy = 1;<br />if(!COL3)<br />stan_klawiszy = 2;<br />if(!COL4)<br />stan_klawiszy = 3;<br />ROW1_SET;<br />ROW2_CLR;<br />asm(&quot;nop&quot;);<br />if(!COL1)<br />stan_klawiszy = 4;<br />if(!COL2)<br />stan_klawiszy = 5;<br />if(!COL3)<br />stan_klawiszy = 6;<br />if(!COL4)<br />stan_klawiszy = 7;<br />ROW2_SET;<br />ROW3_CLR;<br />asm(&quot;nop&quot;);<br />if(!COL1)<br />stan_klawiszy = 8;<br />if(!COL2)<br />stan_klawiszy = 9;<br />if(!COL3)<br />stan_klawiszy = 10;<br />if(!COL4)<br />stan_klawiszy = 11;<br />ROW3_SET;<br />ROW4_CLR;<br />asm(&quot;nop&quot;);<br />if(!COL1)<br />stan_klawiszy = 12;<br />if(!COL2)<br />stan_klawiszy = 13;<br />if(!COL3)<br />stan_klawiszy = 14;<br />if(!COL4)<br />stan_klawiszy = 15;<br />ROW4_SET;<br />return(stan_klawiszy);<br />}<br />[/syntax]<br /><br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br /><br />#define PORT_KEY PORTB<br />#define DDR_KEY  DDRB<br />#define PIN_KEY  PINB<br /><br />#define C1 0<br />#define C2 1<br />#define C3 2<br />#define C4 3<br /><br />#define R1 4<br />#define R2 5<br />#define R3 6<br />#define R4 7<br /><br />#define ROW1_SET PORT_KEY |= (1 &lt;&lt; R1)<br />#define ROW1_CLR PORT_KEY &amp;= ~(1 &lt;&lt; R1)<br /><br />#define ROW2_SET PORT_KEY |= (1 &lt;&lt; R2)<br />#define ROW2_CLR PORT_KEY &amp;= ~(1 &lt;&lt; R2)<br /><br />#define ROW3_SET PORT_KEY |= (1 &lt;&lt; R3)<br />#define ROW3_CLR PORT_KEY &amp;= ~(1 &lt;&lt; R3)<br /><br />#define ROW4_SET PORT_KEY |= (1 &lt;&lt; R4)<br />#define ROW4_CLR PORT_KEY &amp;= ~(1 &lt;&lt; R4)<br /><br />#define COL1 (PIN_KEY &amp; (1 &lt;&lt; C1))<br />#define COL2 (PIN_KEY &amp; (1 &lt;&lt; C2))<br />#define COL3 (PIN_KEY &amp; (1 &lt;&lt; C3))<br />#define COL4 (PIN_KEY &amp; (1 &lt;&lt; C4))<br /><br />unsigned char getkbd(void);<br />[/syntax]<br /><br />za pomocą klawiatury matrycowej z powyższego programu jak umieścić znak na wyświetlaczu 2x16 w programie do obsługi wyświetlacza dołączonym do książki lub zapisać go do pamięci np EEPROM w celu późniejszego wykorzystania. <br /><br />Przykład obsługi z książki:<br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;klawiatura/kbd4x4.h&quot;<br /><br />//#define LED_PIN (1&lt;&lt;PC7)<br />//#define LED_PIN1 (1&lt;&lt;PC6)<br />//#define LED_ON PORTC &amp;= ~LED_PIN<br />//#define LED_OFF PORTC |= LED_PIN<br />//#define LED_TOG PORTC ^=LED_PIN<br />//#define LED_ON1 PORTC &amp;= ~LED_PIN1<br />//#define LED_OFF1 PORTC |= LED_PIN1<br />//#define LED_TOG1 PORTC ^=LED_PIN1<br /><br /><br />// poniższą linijkę czasami trzeba wpisać w eclipse przed definicjami<br />// zmiennych w pamięci EEPROM, żeby nie podkreślał składni jako błędnej<br />#define EEMEM __attribute__((section(&quot;.eeprom&quot;)))<br /><br />char PROGMEM tab1[] = {&quot;FLASH&quot;};<br />char EEMEM tab2[] = {&quot;EEPROM&quot;};<br /><br />uint8_t znak_L[] = {16,16,18,20,24,16,31,0};// wzór znaku litery Ł w pamięci RAM<br />uint8_t znak_o[] EEMEM = {4,32,14,17,17,17,14,0};// wzór znaku litery ó w pamięci EEPROM<br />uint8_t znak_buzka[] PROGMEM = {14,17,27,17,17,21,17,14};// wzór znaku buźki w pamięci FLASH<br />uint8_t znak_termo[] PROGMEM = {4,10,10,10,17,31,31,14};// wzór znaku termometru w pamięci FLASH<br /><br />volatile uint8_t pwm1, pwm2, pwm3;<br /><br />int main(void)<br /><br /><br />{<br />DDRD |= (1&lt;&lt;PD0);<br />PORTD |= (1&lt;&lt;PD0);<br /><br />lcd_init();<br /><br /><br />lcd_str_P(tab1);// napis z pamięci FLASH<br />lcd_locate(0,10);<br />lcd_str_P( PSTR(&quot;Linia1&quot;) );// napis z pamięci FLASH<br />lcd_locate(1,0);<br />lcd_str_E(tab2);// napis z pamięci EEPROM<br />lcd_locate(1,10);<br />lcd_str(&quot;Linia2&quot;);// napis z pamięci RAM<br /><br />// załadowanie znaków do pamięci CGRAM<br />lcd_defchar(0x80, znak_L);<br />lcd_defchar_E(0x81, znak_o);<br />lcd_defchar_P(0x82, znak_buzka);<br />lcd_defchar_P(0x83, znak_termo);<br /><br /><br />// wyświetlenie własnych znaków na LCD<br />lcd_locate(0,7);<br />lcd_str(&quot;\x80\x81&quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;\x82&quot;);<br />lcd_locate(1,7);<br />lcd_str(&quot;\x83&quot;);<br /><br />while(1);<br />}<br />[/syntax] <br /><br />Jak to wszystko ogarnąć. W asemblerze to ja wiedziałem jak zrobić. Proszę forumowiczów o pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=573">CeBe</a> — 3 paź 2012, o 16:24</p><hr />
]]></content>
</entry>
</feed>