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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=1831&amp;mode</id>
<entry>
<author><name><![CDATA[niemy]]></name></author>
<updated>2012-11-22T21:38:42+01:00</updated>
<published>2012-11-22T21:38:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1831&amp;p=19357#p19357</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1831&amp;p=19357#p19357"/>
<title type="html"><![CDATA[ustawienie I/O]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1831&amp;p=19357#p19357"><![CDATA[
Witam<br /><br />Chciałem umieścić w programie I/O na portach C tak aby 0 i 3 były wej z podciagnietymi poziomami do plusa a port 1 jako wyjscie.<br />Calośc miała działać tak, że SWITCH1 rozjaśnia diodę a SWITCH2 ściemnia z tym, że cały czas mam zero na I i nie moge tego zmienić zaraz po uruchomieniu programu spada wartośc do zera.<br />Jeżeli nacisnę sw1 to wskakuje na 1 i tam zostaje jeżeli puszcze to wraca na zero.<br /><br />Czy coś robię żle przy definicji czy dalej gdzieś w programie.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-11-15<br /> *       Autor: niemy<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<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 /><br />#define EEMEM __attribute__((section(&quot;.eeprom&quot;)))<br /><br />#define DIODA1 (1&lt;&lt;PC1)<br />#define SWITCH1 (1&lt;&lt;PC0)<br />#define SWITCH2 (1&lt;&lt;PC3)<br />int i, w1;<br /><br />volatile uint8_t s1_flag, sekundy, pwm1;/* flaga tyknięcia timera co 1 sekundę */<br /><br />char PROGMEM tabKNI[] = {&quot;KRIS&quot;};<br />char EEMEM tab2[] = {&quot;EEPROM&quot;};<br /><br />uint8_t znak_buzka[] PROGMEM = {32,27,27,32,4,4,17,14};        // wzór znaku<br />uint8_t znak_termo[] PROGMEM = {4,10,10,10,17,31,31,14};// wzór znaku<br /><br />int main(void)<br />{<br /><br /><br />TCCR2 |= (1&lt;&lt;WGM21)|(1&lt;&lt;WGM20);// tryb Fast PWM<br />TCCR2 |= (1&lt;&lt;COM21);// clear at TOP<br />TCCR2 |= (1&lt;&lt;CS21);// preskaler = 1<br />OCR2=255;<br />i=150;<br />/* ustawienie TIMER0 dla F_CPU=16MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0 = 155;<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br /><br />    DDRD |= (1&lt;&lt;PD7);<br /><br />    DDRC |= DIODA1;<br />    DDRC &amp;= ~SWITCH1;<br />    PORTC |= SWITCH1;<br />    DDRC &amp;= ~SWITCH2;<br />    PORTC |= SWITCH2;<br /><br />lcd_init();<br /><br /><br />lcd_defchar_P(0x82, znak_buzka);<br />lcd_defchar_P(0x83, znak_termo);<br /><br />sei();/* włączamy globalne przerwania */<br /><br />while(1)<br />{<br />if(!(PINC &amp; SWITCH1 ))<br />{<br />i++;<br />if (i&gt;255) i=255;<br /><br />}<br />if(!(PINC &amp; SWITCH2 ))<br />{<br />i--;<br />if (i&lt;0) i=0;<br />}<br /><br />if(s1_flag) {/* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br />lcd_locate(0,0);<br />lcd_int(sekundy);<br />lcd_str(&quot; &quot;);<br />lcd_locate(0,3);<br />lcd_str(&quot;W:&quot;);<br />lcd_int(w1);<br />lcd_locate(0,7);<br />lcd_str(&quot;S1:&quot;);<br />lcd_int(SWITCH1;<br />s1_flag=0;<br /><br /><br />switch(w1)<br />{<br />case 0:<br />lcd_locate(1,w1);<br />lcd_str(&quot;T&quot;);<br />break;<br />case 1:<br />lcd_locate(1,w1);<br />lcd_str(&quot;E&quot;);<br />break;<br />case 2:<br />lcd_locate(1,w1);<br />lcd_str(&quot;S&quot;);<br />break;<br />case 3:<br />lcd_locate(1,w1);<br />lcd_str(&quot;T&quot;);<br />break;<br />case 4:<br />lcd_locate(1,w1);<br />lcd_str(&quot;1&quot;);<br />break;<br />case 5:<br />lcd_locate(1,0);<br />lcd_str(&quot;     &quot;);<br />}<br />w1++;<br />if (w1==6) w1=0 ;<br />}<br />if(!(PINC &amp; (1&lt;&lt;PC0) )){<br />PORTC &amp;=~DIODA1;<br />lcd_locate(1,7);<br />lcd_str(&quot;\x82&quot;);<br />}else{<br />PORTC |= DIODA1;<br />lcd_locate(1,7);<br />lcd_str(&quot;\x83&quot;);<br />}<br /><br />OCR2=i;<br />lcd_locate(1,9);<br />lcd_str(&quot;i=&quot;);<br />lcd_int(i);<br />lcd_str(&quot;     &quot;);<br />}<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99) <br />{<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0; <br />cnt=0;<br />}<br />}[/syntax]<br /><br /><span style="color: #FF0000">[ ok panie kolego ale przede wszystkim proszę umieszczać kody programów w znacznikach [ syntax = c ], może sobie kolega wyedytować ten post i sprawdzić jak się to robi na początku i końcu kodu ok? - mirekk36 ]</span><br /><br /> <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> <span style="color: #BFFF00"> [ Dziękuję bedę stosował - niemy] </span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=675">niemy</a> — 22 lis 2012, o 21:38</p><hr />
]]></content>
</entry>
</feed>