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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-20T22:32:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9353&amp;mode</id>
<entry>
<author><name><![CDATA[Pixello]]></name></author>
<updated>2014-11-20T22:05:38+01:00</updated>
<published>2014-11-20T22:05:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105210#p105210</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105210#p105210"/>
<title type="html"><![CDATA[Re: Program do atmega 16 - Długo działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105210#p105210"><![CDATA[
Programuje przez AtmelStudio, ale tak, mam wszystkie bity odznaczone oprócz SPIEN.<br /><br /><br /><br />Hah, znalazłem, zmienna wychodziła poza tablicę, teraz już działają wyjścia, ale dalej program czeka 8 sekund zanim skończy liczyć timer.<br /><br />EDIT<br /><br />Program działa, ale timer źle odmierza czas. nie wiem co jest tego przyczyną.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5672">Pixello</a> — 20 lis 2014, o 22:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Humanoid]]></name></author>
<updated>2014-11-20T21:57:48+01:00</updated>
<published>2014-11-20T21:57:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105208#p105208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105208#p105208"/>
<title type="html"><![CDATA[Re: Program do atmega 16 - Długo działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105208#p105208"><![CDATA[
Wyłączyłeś w fusach uproszczonych w Mkavrcaltulatorze interfejs JTAG?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2228">Humanoid</a> — 20 lis 2014, o 21:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pixello]]></name></author>
<updated>2014-11-20T22:32:29+01:00</updated>
<published>2014-11-20T21:52:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105206#p105206</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105206#p105206"/>
<title type="html"><![CDATA[Program do atmega 16 - Długo działa i PORTC nie zmienia się.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9353&amp;p=105206#p105206"><![CDATA[
Witam,<br /><br />Popełniłem ostatnio taki program <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#define Lewo 1<br />#define Prawo 0<br />#define SilnikA1 PC0 //Sputnik<br />#define SilnikA2 PC1 //nr1<br />#define SilnikA3 PC2 //obrót wokó³<br />#define SilnikA4 PC3 //X<br />#define SilnikAPORT PORTC // Port silnika a<br />#define SilnikAKrok 1000 // Liczba kroków, do ustalenia<br />#define SilnikACzasKroku_Szybkosc3  10*124//najszybsze<br />#define SilnikACzasKroku_Szybkosc2  15*124<br />#define SilnikACzasKroku_Szybkosc1  20*124<br />#define SilnikACzasKroku_Szybkosc0  25*124//najwolniejsze<br />//#define Xcentrum<br />//#define Xmax<br />//#define Xmin<br />// #define SilnikB1 //Silnik<br />// #define SilnikB2 //nr2<br />// #define SilnikB3 //Obrót wokó³<br />// #define SilnikB4 //osi Y<br />#define Dioda1 PD5<br />#define Dioda2 PD6<br /><br />volatile uint16_t SilnikACzasKroku = 20;<br />volatile char stan1 = 1;<br />volatile char stan2 = 1;<br />volatile uint16_t PozycjaXSet = SilnikAKrok / 2;<br />volatile uint16_t PozycjaXSetTest = SilnikAKrok / 2;<br />volatile uint16_t PozycjaX = SilnikAKrok / 2;<br />volatile uint8_t krokA = 0;<br />volatile uint8_t SilnikAPredkoscZmiana;<br />uint8_t i = 0;<br />volatile uint8_t FlagaKrokA = 0;<br />unsigned char tablica_krokow&#91;5&#93; =<br />{<br />0b00001111, // 00001111 &amp; 10101010  = 00001010<br />0b10000000, // 10000000 | 00001010  = 10001010<br />0b00100000,<br />0b01000000,<br />0b00010000,<br />};<br />/*<br /><br />//TODO:<br />//W przerwaniach ustawianie pozycji //Done // działa<br />//Ruch po wprowadzeniu danych //Done // Działa<br />//Działający i zdebugowany progam podstawowy //Done //Działa na 1MHZ =&gt; Docelowo 16MHZ<br />//Automatyczny dobór prêdkoœci//Done dodać kontrolę zasilacza<br />//Lepszy algorytm pracy // Done <br />//Rozgryść i zdefiniować tablicę kroków// done<br />//Odliczanie przerw na timerze//done<br />//Komunikacja uart<br />//Automatyczna kalibracja<br />//Wyjścia sterowania układem zasilacza<br />//Wyjścia multipleksowania wyświetlaczy i linijki led<br /><br />*/<br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />FlagaKrokA = 1;<br /><br />}<br />ISR(INT0_vect)<br />{<br />PozycjaXSetTest = PozycjaXSetTest + 10;<br />if (PozycjaXSetTest &gt;= SilnikAKrok) {PozycjaXSetTest = 220;}<br />}<br />ISR(INT1_vect)<br />{<br />PozycjaXSetTest = PozycjaXSetTest - 10;<br />if (PozycjaXSetTest &lt;= 0) {PozycjaXSetTest = 20;}<br />}<br />ISR(INT2_vect)<br />{<br />PozycjaXSet = PozycjaXSetTest;<br /><br />SilnikAPredkoscZmiana = 1;<br />}<br />void ruch (uint8_t ktorysilnik/*0 to A 1 to B*/, uint8_t czyprawo,uint8_t stan /*0 trzymanie 1 praca 2 luz */)<br />{<br />//if (ktorysilnik = 0)<br />//{<br />if (stan == 0)<br />{<br />SilnikAPORT |= tablica_krokow&#91;krokA&#93; | tablica_krokow &#91;krokA + 2&#93;;<br />}<br />else<br />{<br />if (stan == 1)<br />{<br />if (czyprawo == Lewo)<br />{<br />krokA = krokA - 1;<br />if (krokA == 0) {krokA = 4;}<br />}<br />else<br />{<br />krokA = krokA + 1;<br />if (krokA == 5) {krokA = 1;}<br />}<br />SilnikAPORT &amp;= tablica_krokow&#91;0&#93;;// zerowanie<br />SilnikAPORT |= tablica_krokow&#91;krokA&#93;;//praca<br />}<br />if (stan == 2)<br />{<br />SilnikAPORT &amp;= tablica_krokow&#91;0&#93;;<br />}<br />}<br />//}<br />}<br /><br />int main(void)<br />{<br />//////////////////////////////////////////////////////////////////////////<br />/**/    TCCR1B = (1 &lt;&lt; CS11); //Preskaler /8 1Hz<br />/**/    TCCR1A = (1 &lt;&lt; WGM12); // Tryb CTC<br />/**/    TIMSK |= (1 &lt;&lt; OCIE1A); //Przerwanie generowane A<br />/**/    MCUCR |= (1 &lt;&lt; ISC11) | (1 &lt;&lt; ISC10); //Ustawienie bitu przerwañ int1 wyzwalanego zboczem wzrastaj¹cym<br />/**/    MCUCR |= (1 &lt;&lt; ISC01) | (1 &lt;&lt; ISC00); // Jak wyżej int0<br />/**/    GICR |= (1 &lt;&lt; INT1) | (1 &lt;&lt; INT0) | (1 &lt;&lt; INT2);//Przerwania do rejestru gicr<br />/**/    SilnikAPORT |= (1 &lt;&lt; SilnikA1) | (1 &lt;&lt; SilnikA2) | (1 &lt;&lt; SilnikA3) | (1 &lt;&lt; SilnikA4); // Wyjœcia krokowe<br />/**/    DDRD |= (1 &lt;&lt; Dioda2) | (1 &lt;&lt; Dioda1); //DIODY<br />/**/    DDRD &amp;= ((~(1 &lt;&lt; PD2)) &amp; (~(1 &lt;&lt; PD3))); //Wejœcia na przzerwania  ++ i --<br />/**/DDRD |= (1 &lt;&lt; PD1);<br />/**/    DDRB &amp;= (~(1 &lt;&lt; PB2)); // Zmiana  trybu // przerwania stan niski<br />/**/PORTD |= (1 &lt;&lt; PD2) | (1 &lt;&lt; PD3); // VCC przerwania<br />/**/PORTB |= (1 &lt;&lt; PB2); //VCC przerwañ<br />/**/ruch(0,0,2);//Zluzowanie<br />/**/TCNT1 = 100;<br />/**/OCR1A = 10;<br />/**/TIFR = 16;<br />/**/    sei();<br />//////////////////////////////////////////////////////////////////////////<br />while(1)<br />{<br /><br />if (PozycjaXSet == PozycjaX)<br />{<br />ruch(0,0,0);<br />PORTD |= (1 &lt;&lt; Dioda1);<br />PORTD |= (1 &lt;&lt; Dioda2);<br />}<br />if (SilnikAPredkoscZmiana == 1)<br />{<br />OCR1A = SilnikACzasKroku_Szybkosc0;<br />SilnikACzasKroku = SilnikACzasKroku_Szybkosc0;<br />//Porty ustawienie 00 dla wskaźnika zasilacza<br />if ((abs(PozycjaXSet-PozycjaX)) &lt;= (SilnikAKrok / 2))<br />{<br />OCR1A = SilnikACzasKroku_Szybkosc1;<br />SilnikACzasKroku = SilnikACzasKroku_Szybkosc1;<br />//PORTY NA USTAWIENIE 01 dla wskaźnika zasilacza<br />if ((abs(PozycjaXSet-PozycjaX)) &lt;= (SilnikAKrok / 4))<br />{<br />OCR1A = SilnikACzasKroku_Szybkosc2;<br />SilnikACzasKroku = SilnikACzasKroku_Szybkosc2;<br />//PORTY NA USTAWIENIE 10 dla wskaźnika zasilacza<br />if ((abs(PozycjaXSet-PozycjaX)) &gt;= (SilnikAKrok / 8))<br />{<br />OCR1A = SilnikACzasKroku_Szybkosc3;<br />SilnikACzasKroku = SilnikACzasKroku_Szybkosc3;<br />//PORTY NA USTAWIENIE 11 dla wskaźnika zasilacza<br />}<br />}<br />}<br />}<br />if ((PozycjaXSet != PozycjaX) &amp; (FlagaKrokA == 1))<br />{<br />FlagaKrokA = 0;<br />if (PozycjaX &lt; PozycjaXSet)<br />{<br />ruch(0,0,1);<br />PozycjaX = PozycjaX + 1;<br />PORTD |= ((1 &lt;&lt; Dioda1));<br />PORTD &amp;= (~(1 &lt;&lt; Dioda2));<br />}<br />if (PozycjaX &gt; PozycjaXSet)<br />{<br />ruch(0,1,1);<br />PozycjaX = PozycjaX - 1;<br />PORTD |= ((1 &lt;&lt; Dioda2));<br />PORTD &amp;= (~(1 &lt;&lt; Dioda1));<br />}<br />}<br />}<br />}[/syntax]<br />i gdy ustawiam przerwaniem PozycjaSetXtest i wpisuje do PozycjaSetX program wykonuje się bardzo długo.<br /><br />Na wyjściach PC0 1 2 3 nie zmienia się stan  logiczny, a diody zmieniają stan z dużym opóźnieniem. Reset jest podciągnięty do vcc+ rezystorem 3k, oba zasilania są filtrowane kondensatorami, F_CPU zdefiniowane w symbolach na F_CPU=1000000.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5672">Pixello</a> — 20 lis 2014, o 21:52</p><hr />
]]></content>
</entry>
</feed>