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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-11T19:35:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3467&amp;mode</id>
<entry>
<author><name><![CDATA[adamstepniak41]]></name></author>
<updated>2013-07-11T19:35:01+01:00</updated>
<published>2013-07-11T19:35:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41377#p41377</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41377#p41377"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41377#p41377"><![CDATA[
Problem rozwiązany. Miałem źle ustawione bity konfiguracyjne timera. Mam teraz kolejny dylemat. Dopisałem do funkcji głównej programu pętle while z opóźnieniem w celu możliwości zaobserwowania zwiększania szybkości multipleksowania. Wartość początkowa rejestru ORC1A została ustawiona na 150. Pętla ma za zadanie zmniejszyć jej wartość do 4. Jeśli ustawie wartość opóźnienia na 150ms to ustalenie wartości powinno nastąpić po 150msx146petli=21s, jednak następuje po ok 30s. Poza tym na oko wszystko wygląda ok. Jeśli jednak ustawie opóźnienie na mniejszą wartość to nie tylko czas ustalenia się nie zgadza ale również wyświetlacz po wystartowaniu zawiesza się na jakieś liczbie i po jakimś czasie zaświecają się wszystkie liczby. Co może być przyczyną takiego stanu rzeczy? Oto zmieniony kod programu: (poza nim zmieniona wartość inicjujaca rejestru ORC1A w funkcji inicjującej)<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 01-07-2013<br /> *      Author: Adam<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;d_led.h&quot;<br /><br />static uint8_t i =1;<br /><br />int main(void)<br />{<br />d_led_init();  // inicjalizacja wyswietlacza multipleksowanego<br /><br />cy1=9;<br />cy2=6;<br />cy3=9;<br />cy4=6;<br /><br /><br />sei();  // wlaczenie globalnego zezwolenia na przerwania<br /><br />while(i&lt;146)<br />{<br />OCR1A = OCR1A-1;<br />i++;<br />_delay_ms(4);<br />}<br /><br />while(1)<br />{<br /><br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1473">adamstepniak41</a> — 11 lip 2013, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2013-07-07T23:05:03+01:00</updated>
<published>2013-07-07T23:05:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41069#p41069</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41069#p41069"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41069#p41069"><![CDATA[
Witam<br />[syntax=c]TCCR1A |= (1&lt;&lt;WGM12); // ustawienie trybu ctc<br /><br />TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler = 1024[/syntax]<br /><br />Nota katalogowa  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  TCCR1B<br />.. oraz wywalić z linii 29 &quot;PORTC=~licznik; &quot; i już &quot;coś&quot; świeci  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 7 lip 2013, o 23:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2013-07-07T22:28:07+01:00</updated>
<published>2013-07-07T22:28:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41061#p41061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41061#p41061"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41061#p41061"><![CDATA[
Cześć. Odpaliłem ten kod na ATB, po drobnej modyfikacji bo musiałem rejestry i Porty sobie pozmieniać na Atmege32. ale on w takiej postaci działa:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />//----------------- definicja dla preprocesora<br /><br />volatile uint16_t a;<br /><br />int main(void)<br /><br />{<br /> DDRA = 0xFF;<br />     PORTA = 0xFF;<br />     DDRC = 0xFF;<br />     PORTC= 0xFF;<br /><br />     sei();<br /><br />     TCCR1B |= (1&lt;&lt;WGM12); // ustawienie trybu ctc<br />     TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler = 1024<br />     OCR1A = 10 ;  //podzial przez 5<br />     TIMSK = (1&lt;&lt;OCIE1A); // zezwolenie na przerwanie od Compare Match<br /><br />     while(1)<br />     {<br />     <br />     }<br />}<br /><br />    //----------------------------------<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint8_t licznik=1;<br /><br />    PORTC =~licznik;<br />    if(licznik ==1 ) a = ~((1&lt;&lt;0)|(1&lt;&lt;1)|(1&lt;&lt;2)|(1&lt;&lt;3)|(1&lt;&lt;4)|(1&lt;&lt;5));<br />    else if(licznik==2) a = ~((1&lt;&lt;1)|(1&lt;&lt;2));<br />    PORTA=a;<br /><br />    licznik= licznik*2;<br />    if(licznik&gt;2) licznik=1;<br />}[/syntax]<br /><br /><br />Ale takie rozwiązanie nie jest najlepsiejsze <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=279">banita 17</a> — 7 lip 2013, o 22:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Juffre]]></name></author>
<updated>2013-07-07T22:19:59+01:00</updated>
<published>2013-07-07T22:19:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41058#p41058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41058#p41058"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41058#p41058"><![CDATA[
Dobrze ustawiłeś rejestry od timera?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=473">Juffre</a> — 7 lip 2013, o 22:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamstepniak41]]></name></author>
<updated>2013-07-07T22:13:11+01:00</updated>
<published>2013-07-07T22:13:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41057#p41057</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41057#p41057"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41057#p41057"><![CDATA[
Kod z książki mi nie działa. Sprawdzałem już dziesiątki razy. Pracuje na atmedze8 i w kodzie wprowadziłem tylko kilka zmian z tym związanych. Poniżej wklejam listeningi kodów: <br />main.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;d_led.h&quot;<br /><br />int main(void)<br />{<br />d_led_init();  // inicjalizacja wyswietlacza multipleksowanego<br /><br />cy1=1;<br />cy2=4;<br />cy3=9;<br />cy4=5;<br /><br />sei();  // wlaczenie globalnego zezwolenia na przerwania<br /><br />while(1)<br />{<br /><br />}<br /><br />}[/syntax]<br />d_led.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;d_led.h&quot;<br /><br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br />volatile uint8_t cy4;<br /><br />uint8_t cyfry&#91;15&#93; = {<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),          //0<br />~(SEG_B|SEG_C)                         ,         //1<br />~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G)        ,        //2<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G)         ,       //3<br />~(SEG_B|SEG_C|SEG_F|SEG_G)                ,      //4<br />~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G) ,//5<br />~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G) ,//6<br />~(SEG_A|SEG_B|SEG_C|SEG_F) ,//7<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G) ,   //8<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G) ,//9<br />};<br /><br />void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF;<br />LED_DATA = 0xFF;<br />ANODY_DIR |= CA1 | CA2 | CA3 | CA4;<br />ANODY_PORT |= CA1 | CA2 | CA3 | CA4;<br /><br />TCCR1A |= (1&lt;&lt;WGM12); // ustawienie trybu ctc<br />TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler = 1024<br />OCR1A = 5 ;  //podzial przez 5<br />TIMSK = (1&lt;&lt;OCIE1A); // zezwolenie na przerwanie od Compare Match<br /><br />}<br /><br /><br /><br />//-----------------------------------p.o przerwania-------------------------<br /><br />ISR (TIMER1_COMPA_vect)<br />{<br />static uint8_t licznik=1;<br />ANODY_PORT =~licznik;<br /><br />if     (licznik==1) LED_DATA = cyfry&#91;cy1&#93;;<br />else if(licznik==2) LED_DATA = cyfry&#91;cy2&#93;;<br />else if(licznik==4) LED_DATA = cyfry&#91;cy3&#93;;<br />else if(licznik==8) LED_DATA = cyfry&#91;cy4&#93;;<br /><br />licznik &lt;&lt;=1;<br />if(licznik&gt;8) licznik=1;<br /><br />}[/syntax]<br />d_led.h:<br />[syntax=c]#ifndef D_LED_H_<br />#define D_LED_H_<br /><br />#define LED_DATA PORTD<br />#define LED_DATA_DIR DDRD<br />#define ANODY_PORT PORTC<br />#define ANODY_DIR DDRC<br /><br />#define CA1  (1&lt;&lt;PC0)<br />#define CA2  (1&lt;&lt;PC1)<br />#define CA3  (1&lt;&lt;PC2)<br />#define CA4  (1&lt;&lt;PC3)<br /><br /><br />#define SEG_A (1&lt;&lt;0)<br />#define SEG_B (1&lt;&lt;1)<br />#define SEG_C (1&lt;&lt;2)<br />#define SEG_D (1&lt;&lt;3)<br />#define SEG_E (1&lt;&lt;4)<br />#define SEG_F (1&lt;&lt;5)<br />#define SEG_G (1&lt;&lt;6)<br />#define SEG_DP (1&lt;&lt;7)<br /><br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br />extern volatile uint8_t cy4;<br /><br /><br /><br /><br /><br />void d_led_init(void);<br /><br />#endif /* D_LED_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1473">adamstepniak41</a> — 7 lip 2013, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-07T21:56:28+01:00</updated>
<published>2013-07-07T21:56:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41053#p41053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41053#p41053"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41053#p41053"><![CDATA[
Masz w książce przykładowy i na pewno dobrze działający kod i zamiast z niego skorzystać, a potem ew modyfikować to próbujesz stworzyć - no że tak powiem koło od nowa ....<br /><br />błędów co nie miara nie wspominając że nie wiem co chciałeś w ogóle uzyskać <br /><br />przecież ten kod w ogóle nie powinien się kompilować - np zmienna licznik, już pal pies do czego ona jest <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale jak ty chcesz widzieć zmienną lokalną licznik z przerwania w pętli głównej programu ? <br /><br />mam propozycję - odpal kod z książki najpierw i zobacz jak to działa - na dwóch wyświetlaczach to tylko odjęcie kilku linijek kodu z niego<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />poza tym - stawiasz na głowie to multipleksowanie bo w przerwaniu ustawiasz jakąś zmienną a a potem w pętli głównej wpisujesz ją na PORTD ? no na prawdę - co ty chciałeś przez to uzyskać ? - zachodzę w głowę i nie mogę wymyślić <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=54">mirekk36</a> — 7 lip 2013, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Deruix]]></name></author>
<updated>2013-07-07T21:40:46+01:00</updated>
<published>2013-07-07T21:40:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41049#p41049</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41049#p41049"/>
<title type="html"><![CDATA[Re: Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41049#p41049"><![CDATA[
Coś kod Ci się źle wkleił <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=594">Deruix</a> — 7 lip 2013, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamstepniak41]]></name></author>
<updated>2013-07-07T21:48:32+01:00</updated>
<published>2013-07-07T21:33:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41048#p41048</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41048#p41048"/>
<title type="html"><![CDATA[Problem z przewaniami Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3467&amp;p=41048#p41048"><![CDATA[
Witam.<br />Mam problem z problem z mutlipleksowaniem. Pracuje na Atmedze8 i próbuje wyświetlić cyfry na wyświetlaczu siedmiosegmentowym wykorzystując timer1 w trybie CTC. Po wgraniu programu na mikrokontroler nie wyświetlają się żadne cyfry. Obsługa przerwań jest raczej skonfigurowana poprawnie gdyż napisałem kod sprawdzający czy procedura działa i wszystko działało zgodnie z oczekiwaniami. Nie mam już pojęcia do może być nie tak. Poniższy kod jest zmodyfikowanym kodem z książki Pana Kardasia.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />//----------------- definicja dla preprocesora<br /><br />volatile uint16_t a;<br /><br />int main(void)<br /><br />{<br />DDRD = 0xFF;<br />PORTD = 0xFF;<br />DDRC = 0xFF;<br />    PORTC= 0xFF;<br /><br />sei();<br /><br />TCCR1A |= (1&lt;&lt;WGM12); // ustawienie trybu ctc<br />TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler = 1024<br />OCR1A = 10 ;  //podzial przez 5<br />TIMSK = (1&lt;&lt;OCIE1A); // zezwolenie na przerwanie od Compare Match<br /><br />while(1)<br />{<br /><br />PORTD=a;<br />PORTC=~licznik;<br /><br />}<br />}<br /><br />//----------------------------------<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint8_t licznik=1;<br />PORTC =~licznik;<br /><br />if     (licznik==1) a = ~((1&lt;&lt;0)|(1&lt;&lt;1)|(1&lt;&lt;2)|(1&lt;&lt;3)|(1&lt;&lt;4)|(1&lt;&lt;5));<br />else if(licznik==2) a = ~((1&lt;&lt;1)|(1&lt;&lt;2));<br /><br /><br />licznik= licznik*2;<br />if(licznik&gt;2) licznik=1;<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1473">adamstepniak41</a> — 7 lip 2013, o 21:33</p><hr />
]]></content>
</entry>
</feed>