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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-24T09:54:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12987&amp;mode</id>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-24T09:54:42+01:00</updated>
<published>2015-09-24T09:54:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140544#p140544</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140544#p140544"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140544#p140544"><![CDATA[
<a href="https://obrazkiforum.atnel.pl/3043/f11e87bb9f5783e7089f058b1b55d36c.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3043/f11e87bb9f5783e7089f058b1b55d36c.png" alt="Obrazek" /></a><br /><br />W miejscu zaznaczonym czerwoną kreską przeciąłem ścieżkę i na rezystor R10 podałem 12V zamiast 5, to samo oczywiście dla drugiego wyświetlacza.<br />W oryginalnej konfiguracji tranzystor nigdy by się nie zamknął co skutkowało że oba wyświetlacze nigdy nie były wyłączane.<br /><br />Poczwórnego jeszcze nawet nie podpiąłem skoro nie potrafiłem przebrnąć przez podwójny <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br />Teraz sukcesywnie piszę resztę programu.<br /><br />Dzięki jeszcze raz za wskazówki (gdyby nie wskazówka że załączam wyświetlacze stanem niskim to nie popatrzyłbym do schematu).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 24 wrz 2015, o 09:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-09-24T06:33:41+01:00</updated>
<published>2015-09-24T06:33:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140533#p140533</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140533#p140533"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140533#p140533"><![CDATA[
<div class="quotetitle">Kocon napisał(a):</div><div class="quotecontent"><br />Ale wstyd, wszystko już pięknie działa.<br /></div><br />...no nie żaden wstyd ( nawiasem mówiąc specyficzny rodzaj okazywania radości z działającego układu  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ), tylko powiedz/napisz po jakim zabiegu  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />P.S. Co do sterowania ANODAMI - ja patrzyłem na ten poczwórny, bo nie wiedziałem na czym testujesz.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 24 wrz 2015, o 06:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-24T00:40:30+01:00</updated>
<published>2015-09-24T00:40:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140531#p140531</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140531#p140531"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140531#p140531"><![CDATA[
Nie mogę się zgodzić ale chyba znalazłem błąd :<br /><br /><a href="https://obrazkiforum.atnel.pl/3043/6946e9bafe4c3ec798f4f2f698cf90d9.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3043/6946e9bafe4c3ec798f4f2f698cf90d9.png" alt="Obrazek" /></a><br /><br />To fragment mojego schematu, fragment sterujący wspólną anodą jednego wyświetlacza. <br /><br />Podając napięcie 5V na bramkę (tranzystor npn zatkany, podajemy stan niski na bazę) pozostaje różnica napięć Vcc-5V,docelowo Vcc to 12V więc pozostaje 7V Ugs, a to z pewnością nie pozwoli się tranzystorowi zamknąć. Jutro przecinam ścieżki i spróbuję podać napięcie Vcc. <br /><br />Jeżeli źle rozumiem to proszę mnie poprawić ale nawet symulacje potwierdziły moje domysły.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />Jest tak jak pisałem w poście wyżej.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Fizyczny błąd połączeń wykluczam.<br /></div><br />Ale wstyd, wszystko już pięknie działa. <br />Dziękuję raz jeszcze za rady, są nieocenione. Kolejny krok w ramach nauki...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 24 wrz 2015, o 00:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-09-23T23:40:14+01:00</updated>
<published>2015-09-23T23:40:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140530#p140530</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140530#p140530"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140530#p140530"><![CDATA[
Witam<br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />musisz odwrócić sterowanie poszczególnych wyświetlaczy - <strong>zapalasz</strong> je stanem <strong>niskim</strong><br /></div><br />...czyli Ty masz włączonych kilka na raz.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 wrz 2015, o 23:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-23T22:42:37+01:00</updated>
<published>2015-09-23T22:42:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140529#p140529</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140529#p140529"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140529#p140529"><![CDATA[
d_led.c<br />[syntax=c]/////////////////////////////////////<br />////////// Made for atmega8, 16Mhz oscillator<br /><br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;d_led.h&quot;<br />#include &lt;util/delay.h&gt;<br /><br />//Segments data<br />volatile uint8_t seg1;<br />volatile uint8_t seg2;<br /><br />volatile uint8_t seg3;<br />volatile uint8_t seg4;<br />volatile uint8_t seg5;<br />volatile uint8_t seg6;<br />//clock counter<br />//olatile uint8_t clk_counter=2;<br /><br /><br />//definition initialize function to work with 7seg <br />void d_led_init(void)<br />{<br />/*****************************************************************************/<br />/***** Directions of ports *******/<br />//OUTPUTS<br />DDRC |=DIG1_A | DIG1_B | DIG1_C | DIG1_D | DIG1_E | DIG1_F;<br />DDRD |=DIG1_G | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4;<br />DDRB |=DIG2_C5 | DIG1B_com | DIG2_H;<br />//Turn off all outputs<br />PORTC &amp;=~(DIG1_A | DIG1_B | DIG1_C | DIG1_D | DIG1_E | DIG1_F);<br />PORTD &amp;=~(DIG1_G | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4);<br />PORTB &amp;=~(DIG2_C5 | DIG1B_com | DIG2_H);<br />//INPUTS<br />//DDRD &amp;=~CLK;<br />//high state in output<br />//PORTD |=CLK;<br /><br /><br />/************************  Timer2 settings  **************************/<br /><br />TCCR2 |=(1&lt;&lt;WGM21); //CTC mode<br />TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //prescaler 1024<br />OCR2=50; //50Hz+ switching<br />TIMSK |=(1&lt;&lt;OCIE2); // permission for compare match interrupt<br /><br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br /><br />/************************  INTERRUPT0,1 settings  **************************/<br />/*<br />MCUCR |=(1&lt;ISC01); //falling edge causing interrupt0<br />GICR |=(1&lt;&lt;INT0); //enable int0<br />*/<br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br /><br />}<br /><br /><br /><br /><br />////////////////////////////////////<br />//// Set number function<br />void set_num(int num)<br />{<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br /><br />switch(num){<br /><br />case 1:<br />PORTC |=(DIG1_B|DIG1_C);<br />break;<br /><br />case 2:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_D|DIG1_E);<br />break;<br /><br />case 3:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_D|DIG1_C);<br />break;<br /><br />case 4:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_B|DIG1_C|DIG1_F);<br />break;<br /><br />case 5:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_C|DIG1_D|DIG1_F);<br />break;<br /><br />case 6:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />break;<br /><br />case 7:<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_F);<br />break;<br /><br />case 8:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />break;<br /><br />case 9:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_F);<br />break;<br /><br />case 10: ////////Show F<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_E|DIG1_F);<br />break;<br /><br />case 11: ////////Show A<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_E|DIG1_F);<br />break;<br /><br />default:<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />}<br /><br />} <br /><br /><br /><br /><br /><br />///====================================PROCEDURE OF TIMER2 INTERRUPT=============================================//<br />        <br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t counter=1;<br />//variable for switching anodes of display<br />//swiching segements<br /><br /><br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF; //krok 1<br /><br />switch(counter){<br />case 1 :<br />set_num(seg1); //krok 2<br />DIG1A_com_ON; //krok 3<br />break;<br /><br />case 2 :<br />set_num(seg2); //krok 2<br />DIG1B_com_ON; //krok 3<br />break;<br /><br />case 4 :<br />set_num(seg3);<br />DIG2_C1_ON;<br />break;<br /><br />case 8 :<br />set_num(seg4);<br />DIG2_C2_ON;<br />break;<br /><br />case 16 :<br />set_num(seg5);<br />DIG2_C3_ON;<br />break;<br /><br />case 32 :<br />set_num(seg6);<br />DIG2_C4_ON;<br />break;<br /><br />default:<br />break;<br />}<br /><br />counter &lt;&lt;=1;<br />if(counter&gt;32) {counter=1;}<br /><br />}[/syntax]<br /><br />d_led.h :<br />[syntax=c]#ifndef _d_led_h<br />#define _d_led_h<br /><br />////////////////////////////////////////////////////////////////////////////////////////<br />///////////////////////////////////D E F I N I T I O N S////////////////////////////////<br />#define DIG1_A (1&lt;&lt;PC0)<br /><br />#define DIG1_B (1&lt;&lt;PC1)<br /><br />#define DIG1_C (1&lt;&lt;PC2)<br /><br />#define DIG1_D (1&lt;&lt;PC3)<br /><br />#define DIG1_E (1&lt;&lt;PC4)<br /><br />#define DIG1_F (1&lt;&lt;PC5)<br /><br />#define DIG1_G (1&lt;&lt;PD0)<br /><br /><br />#define DIG1A_com (1&lt;&lt;PD1)<br />#define DIG1A_com_OFF PORTD &amp;= ~DIG1A_com //DIG1A_com OFF<br />#define DIG1A_com_ON PORTD |= DIG1A_com  //DIG1A_com ON<br /><br />#define DIG1B_com (1&lt;&lt;PB1)<br />#define DIG1B_com_OFF PORTB &amp;= ~DIG1B_com //DIG1A_com OFF<br />#define DIG1B_com_ON PORTB |= DIG1B_com  //DIG1A_com ON<br /><br />#define DIG2_C1 (1&lt;&lt;PD4)<br />#define DIG2_C1_OFF PORTD &amp;= ~DIG2_C1 //DIG2_C1 OFF<br />#define DIG2_C1_ON PORTD |= DIG2_C1  //DIG2_C1 ON<br /><br />#define DIG2_C2 (1&lt;&lt;PD5)<br />#define DIG2_C2_OFF PORTD &amp;= ~DIG2_C2 //DIG2_C2 OFF<br />#define DIG2_C2_ON PORTD |= DIG2_C2  //DIG2_C2 ON<br /><br />#define DIG2_C3 (1&lt;&lt;PD6)<br />#define DIG2_C3_OFF PORTD &amp;= ~DIG2_C3 //DIG2_C3 OFF<br />#define DIG2_C3_ON PORTD |= DIG2_C3  //DIG2_C3 ON<br /><br />#define DIG2_C4 (1&lt;&lt;PD7)<br />#define DIG2_C4_OFF PORTD &amp;= ~DIG2_C4 //DIG2_C4 OFF<br />#define DIG2_C4_ON PORTD |= DIG2_C4  //DIG2_C4 ON<br /><br />#define DIG2_C5 (1&lt;&lt;PB0)<br />#define DIG2_C5_OFF PORTB &amp;= ~DIG2_C5 //DIG2_C5 OFF<br />#define DIG2_C5_ON PORTB |= DIG2_C5  //DIG2_C5 ON<br /><br />#define DIG2_H (1&lt;&lt;PB2)<br /><br />//#define CLK (1&lt;&lt;PD2) //clk interrupt<br /><br />extern volatile uint8_t seg1;<br />extern volatile uint8_t seg2; <br />extern volatile uint8_t seg3;<br />extern volatile uint8_t seg4;<br />extern volatile uint8_t seg5;<br />extern volatile uint8_t seg6;<br />//clock counter<br />//extern volatile uint8_t clk_counter;<br /><br />void  d_led_init(void);<br />#endif[/syntax]<br /><br />main.c ciągle bez zmian<br /><br /><br />Napisałem też program drugi raz, trochę bardziej minimalistycznie w oparciu o program wyżej :<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 seg1;<br />volatile uint8_t seg2;<br /><br />void d_led_init(void)<br />{<br />//wyjścia<br />DDRC |=DIGa|DIGb|DIGc|DIGd|DIGe|DIGf;<br />DDRD |=DIGg|DIG1A;<br /><br />//stan niski<br />PORTC &amp;=~(DIGa|DIGb|DIGc|DIGd|DIGe|DIGf);<br />PORTD &amp;=~(DIGg|DIG1A);<br /><br /><br />/************************  Timer2 settings  **************************/<br /><br />TCCR2 |=(1&lt;&lt;WGM21); //CTC mode<br />TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //prescaler 1024<br />OCR2=50; //50Hz+ switching<br />TIMSK |=(1&lt;&lt;OCIE2); // permission for compare match interrupt<br /><br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br />}<br /><br />void set_num(int num)<br />{<br />PORTD &amp;=~DIGg;<br />PORTC &amp;=~(DIGa|DIGb|DIGc|DIGd|DIGe|DIGf);<br /><br />switch(num){<br /><br />case 1:<br />PORTC |=(DIGb|DIGc);<br />break;<br /><br />case 2:<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGb|DIGd|DIGe);<br />break;<br /><br />case 3:<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGb|DIGd|DIGc);<br />break;<br /><br />case 4:<br />PORTD |=DIGg;<br />PORTC |=(DIGb|DIGc|DIGf);<br />break;<br /><br />case 5:<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGc|DIGd|DIGf);<br />break;<br /><br />case 6:<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGc|DIGd|DIGe|DIGf);<br />break;<br /><br />case 7:<br />PORTC |=(DIGa|DIGb|DIGc|DIGf);<br />break;<br /><br />case 8:<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGb|DIGc|DIGd|DIGe|DIGf);<br />break;<br /><br />case 9:<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGb|DIGc|DIGd|DIGf);<br />break;<br /><br />case 10: ////////Show F<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGe|DIGf);<br />break;<br /><br />case 11: ////////Show A<br />PORTD |=DIGg;<br />PORTC |=(DIGa|DIGb|DIGc|DIGe|DIGf);<br />break;<br /><br />default:<br />PORTC |=(DIGa|DIGb|DIGc|DIGd|DIGe|DIGf);<br />}<br /><br />}<br /> volatile uint8_t counter=0;<br />ISR(TIMER2_COMP_vect)<br />{<br />//variable for switching anodes of display<br />//swiching segements<br />PORTD &amp;=~DIG1A;<br />set_num(seg1); //krok 2<br />PORTD |=DIG1A; //krok 3<br /><br /><br /><br />}[/syntax]<br />d_led.h : <br />[syntax=c]#ifndef _d_led_h<br />#define _d_led_h<br /><br />#define DIGa (1&lt;&lt;PC0)<br />#define DIGb (1&lt;&lt;PC1)<br />#define DIGc (1&lt;&lt;PC2)<br />#define DIGd (1&lt;&lt;PC3)<br />#define DIGe (1&lt;&lt;PC4)<br />#define DIGf (1&lt;&lt;PC5)<br />#define DIGg (1&lt;&lt;PD0)<br /><br />#define DIG1A (1&lt;&lt;PD1)<br />#define DIG1B (1&lt;&lt;PB1)<br /><br />extern volatile uint8_t seg1;<br />extern volatile uint8_t seg2;<br /><br />void d_led_init(void);<br />#endif[/syntax]<br />Oraz main :<br />[syntax=c]#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 />int main(void)<br />{<br />d_led_init();<br />sei();<br />seg1=11;<br /><br />    while(1)<br />    {<br />seg1--;<br />_delay_ms(1500);<br /><br />    }<br />}[/syntax]<br /><br />Program działa względnie poprawnie, liczby się dekrementują od F do 0.<br />Problem jest jedynie że na obu wyświetlaczach jednocześnie...<br />A co do egzotycznego podłączenia DIG1A oraz DIG1B to duże wyświetlacze pracujące z napięciem ok 10V i prądem 30mA, już wiem jak mogłem zrobić to lepiej ale skoro już polutowałem płytkę to nie będę walczył z nią drugi raz dla złotówki czy dwóch oszczędności.<br />Wszystkie wyświetlacze są z wspólną anodą, stąd przełączanie wyświetlaczy Pmos'ami. Specjalnie stosowałem w ich obwodach tranzystory npn żeby wszystko było załączane stanem wysokim.<br />Jestem dozgonnie wdzięczny za zainteresowanie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 23 wrz 2015, o 22:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-09-23T22:08:06+01:00</updated>
<published>2015-09-23T22:08:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140528#p140528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140528#p140528"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140528#p140528"><![CDATA[
Witam<br />...a: 1-zmieniłeś na:<br />[syntax=c]DDRD |=DIG1_G |....;<br />...<br />PORTD &amp;=~(DIG1_G | ....;[/syntax]<br />? - w <strong>void d_led_init(void)</strong> miałeś DIG1_D.<br />2 -zastosowałeś się do rady kol.<strong>Krauser</strong>?<br />Wstaw jeszcze raz wszystkie pliki Twojego kodu, bo u mnie działa normalnie ( tylko podłączenia uC/LED mam mniej egzotyczne  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  katody przez tranzystory, segmenty przez rezystory).<br /><br />... a no właśnie ja mam wspólną katodę i działa a Ty masz anodę; musisz (chyba że nie anoda ) odwrócić sterowanie poszczególnych wyświetlaczy - zapalasz je stanem niskim<br />[syntax=c]case 1 :<br /><br />                        DIG1A_com_OFF;<br />                        DIG1B_com_ON;DIG2_C1_ON;DIG2_C2_ON;DIG2_C3_ON;DIG2_C4_ON;<br />                        break;[/syntax]<br />Mogę się mylić, ale chyba to jest to.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 wrz 2015, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-23T09:56:44+01:00</updated>
<published>2015-09-23T09:56:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140443#p140443</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140443#p140443"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140443#p140443"><![CDATA[
Nie mam nic do złośliwości jeżeli tylko pozwoli mi się czegokolwiek nauczyć. Nie ukrywam faktu że nie spotkałem się z taką życzliwością na innych forach jak tutaj. <br />Poprawiłem jak koledzy sugerowali, działanie niestety się nie poprawiło :<br /><!-- m --><a class="postlink" href="https://www.youtube.com/embed/OjIbQrc2fDw" >https://www.youtube.com/embed/OjIbQrc2fDw</a><!-- m --><br />W pętli głównej dodałem :<br />[syntax=c]seg1=1;<br />seg2=2;<br />_delay_ms(750);<br />seg1=2;<br />seg2=3;<br />_delay_ms(750);<br />seg1=3;<br />seg2=4;<br />_delay_ms(750);<br />seg1=0;<br />seg2=0;<br />_delay_ms(750);<br />seg1=4;<br />seg2=5;<br />_delay_ms(750);<br />seg1=5;<br />seg2=6;<br />_delay_ms(750);<br />seg1=7;<br />seg2=8;<br />_delay_ms(750);<br />seg1=8;<br />seg2=9;<br />_delay_ms(750);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 23 wrz 2015, o 09:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-09-22T23:59:59+01:00</updated>
<published>2015-09-22T23:59:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140432#p140432</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140432#p140432"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140432#p140432"><![CDATA[
Witam<br /><div class="quotetitle">Kocon napisał(a):</div><div class="quotecontent"><br />widać że segment G świeci z mniejszą intensywnością :<br /></div><br />...on chyba nie świeci wcale <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Jest:<br /><div class="quotetitle">Kocon napisał(a):</div><div class="quotecontent"><br />[syntax=c]DDRD |=DIG1_D | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4;<br />...<br />PORTD &amp;=~(DIG1_D | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4);[/syntax]<br /></div><br />Winno być:<br />[syntax=c]DDRD |=DIG1_G | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4;<br />...<br />PORTD &amp;=~(DIG1_G | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4);[/syntax]<br />Bez złośliwości: mści się bałagan w &quot;#define&quot; co sugerowałem wcześniej.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 22 wrz 2015, o 23:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-22T23:24:13+01:00</updated>
<published>2015-09-22T23:24:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140431#p140431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140431#p140431"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140431#p140431"><![CDATA[
SW przerwaniu sterowanie powinno składać się z kolejnych kroków:<br />1. Wyłączenie wszystkich wyświetlaczy<br />2. Ustawienie cyfry na jednym wyświetlaczu<br />3. Włączenie tego wyświetlacza dla którego cyfra została ustawiona<br />Inaczej zawsze poprzednia cyfra będzie przez chwilę nie na tym wyświetlaczu co powinna.<br /><br />[syntax=c]ISR(TIMER2_COMP_vect)<br />                {<br />                        static uint8_t counter=1;<br />                        //variable for switching anodes of display<br />                        //swiching segements<br /><br /><br />                        DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF; //krok 1<br /><br />                        switch(counter){<br />                        case 1 :<br />                        set_num(seg1); //krok 2<br />                        DIG1A_com_ON; //krok 3<br />                        break;<br />                       <br />                        case 2 :<br />                        set_num(seg2); //krok 2<br />                        DIG1B_com_ON; //krok 3<br />                        break;<br />                       <br />                        case 4 :<br />                        set_num(seg3);<br />                        DIG2_C1_ON;<br />                        break;<br />                       <br />                        case 8 :<br />                        set_num(seg4);<br />                        DIG2_C2_ON;<br />                        break;<br />                       <br />                        case 16 :<br />                        set_num(seg5);<br />                        DIG2_C3_ON;<br />                        break;<br />                       <br />                        case 32 :<br />                        set_num(seg6);<br />                        DIG2_C4_ON;<br />                        break;<br />                       <br />                        default:<br />                        break;<br />                        }<br />                       <br />                        counter &lt;&lt;=1;<br />                        if(counter&gt;32) counter=1;<br />                       <br />                }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 22 wrz 2015, o 23:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-22T22:13:05+01:00</updated>
<published>2015-09-22T22:13:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140428#p140428</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140428#p140428"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140428#p140428"><![CDATA[
I niestety dalej problem, przy próbie manipulacji zmiennymi seg w programie głównym na wyświetlaczach jest 8, do tego w sposób niekontrolowany migoczące, natomiast gdy nie ustawiam nic świeci się ładne zero.<br />Przepraszam znów za kłopot ale spędziłem już zbyt dużo czasu nad szukaniem błędu.<br />Poniżej przerobiony d_led.c<br />[syntax=c]/////////////////////////////////////<br />////////// Made for atmega8, 16Mhz oscillator<br /><br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;d_led.h&quot;<br />#include &lt;util/delay.h&gt;<br /><br />//Segments data<br />volatile uint8_t seg1;<br />volatile uint8_t seg2;<br /><br />volatile uint8_t seg3;<br />volatile uint8_t seg4;<br />volatile uint8_t seg5;<br />volatile uint8_t seg6;<br />//clock counter<br />//olatile uint8_t clk_counter=2;<br /><br /><br />//definition initialize function to work with 7seg <br />void d_led_init(void)<br />{<br />/*****************************************************************************/<br />/***** Directions of ports *******/<br />//OUTPUTS<br />DDRC |=DIG1_A | DIG1_B | DIG1_C | DIG1_D | DIG1_E | DIG1_F;<br />DDRD |=DIG1_D | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4;<br />DDRB |=DIG2_C5 | DIG1B_com | DIG2_H;<br />//Turn off all outputs<br />PORTC &amp;=~(DIG1_A | DIG1_B | DIG1_C | DIG1_D | DIG1_E | DIG1_F);<br />PORTD &amp;=~(DIG1_D | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4);<br />PORTB &amp;=~(DIG2_C5 | DIG1B_com | DIG2_H);<br />//INPUTS<br />//DDRD &amp;=~CLK;<br />//high state in output<br />//PORTD |=CLK;<br /><br /><br />/************************  Timer2 settings  **************************/<br /><br />TCCR2 |=(1&lt;&lt;WGM21); //CTC mode<br />TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //prescaler 1024<br />OCR2=50; //50Hz+ switching<br />TIMSK |=(1&lt;&lt;OCIE2); // permission for compare match interrupt<br /><br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br /><br />/************************  INTERRUPT0,1 settings  **************************/<br />/*<br />MCUCR |=(1&lt;ISC01); //falling edge causing interrupt0<br />GICR |=(1&lt;&lt;INT0); //enable int0<br />*/<br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br /><br />}<br /><br /><br /><br /><br />////////////////////////////////////<br />//// Set number function<br />void set_num(int num)<br />{<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br /><br />switch(num){<br /><br />case 1:<br />PORTC |=(DIG1_B|DIG1_C);<br />break;<br /><br />case 2:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_D|DIG1_E);<br />break;<br /><br />case 3:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_D|DIG1_C);<br />break;<br /><br />case 4:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_B|DIG1_C|DIG1_F);<br />break;<br /><br />case 5:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_C|DIG1_D|DIG1_F);<br />break;<br /><br />case 6:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />break;<br /><br />case 7:<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_F);<br />break;<br /><br />case 8:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />break;<br /><br />case 9:<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_F);<br />break;<br /><br />case 10: ////////Show F<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_E|DIG1_F);<br />break;<br /><br />case 11: ////////Show A<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_E|DIG1_F);<br />break;<br /><br />default:<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />}<br /><br />} <br /><br /><br /><br /><br /><br />///====================================PROCEDURE OF TIMER2 INTERRUPT=============================================//<br />        <br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t counter=1;<br />//variable for switching anodes of display<br />//swiching segements <br />switch(counter){<br />case 1 :<br />DIG1A_com_ON;<br />DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 2 :<br />DIG1B_com_ON;<br />DIG1A_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 4 :<br />DIG2_C1_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 8 :<br />DIG2_C2_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 16 :<br />DIG2_C3_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 32 :<br />DIG2_C4_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;<br />break;<br /><br />default:<br />break;<br />}<br /><br />//If digit is on, show number<br />if (counter==1) set_num(seg1);<br />else if (counter==2) set_num(seg2);<br />else if (counter==4) set_num(seg3);<br />else if (counter==8) set_num(seg4);<br />else if (counter==16) set_num(seg5);<br />else if (counter==32) set_num(seg6);<br /><br />counter &lt;&lt;=1;<br />if(counter&gt;32) counter=1;<br /><br />}[/syntax]<br /><br /><br />Gdy pozostawię w ten sposób :<br />[syntax=c]#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 /><br /><br /><br />int main(void)<br />{<br />sei();<br />d_led_init();<br /><br />    while(1)<br />    {<br /><br /><br />    }<br /><br /><br />}[/syntax]<br /><br /><a href="https://obrazkiforum.atnel.pl/3043/1c29366d05ed51e125f0f493b6d5723a.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3043/1c29366d05ed51e125f0f493b6d5723a.jpg" alt="Obrazek" /></a><br /><br />Niestety jeśli napiszę nawet tyle :<br />[syntax=c]int main(void)<br />{<br />sei();<br />d_led_init();<br />seg1=1;<br />seg2=2;<br />    while(1)<br />    {<br /><br /><br />    }<br /><br /><br />}[/syntax]<br />To widok mam już mniej atrakcyjny, widać że segment G świeci z mniejszą intensywnością :<br /><a href="https://obrazkiforum.atnel.pl/3043/e72b70f6001753b88e51c6bfbbd21824.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3043/e72b70f6001753b88e51c6bfbbd21824.jpg" alt="Obrazek" /></a><br /><br /><br />Nie mam pomysłu jak z tym walczyć <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=3043">Kocon</a> — 22 wrz 2015, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-20T23:01:34+01:00</updated>
<published>2015-09-20T23:01:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140286#p140286</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140286#p140286"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140286#p140286"><![CDATA[
Takiej rzeczowej pomocy nawet się nie spodziewałem. Dziękuję za rozwiązanie problemu oraz cenne sugestie <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=3043">Kocon</a> — 20 wrz 2015, o 23:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-09-20T20:32:54+01:00</updated>
<published>2015-09-20T20:32:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140263#p140263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140263#p140263"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140263#p140263"><![CDATA[
Witam<br />Znajdź różnice:<br />[syntax=c]TCCR2 |=(1&lt;&lt;WGM21); //CTC mode<br />TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //prescaler 1024<br />OCR2=50; //50Hz for 1 segment<br />TIMSK |=(1&lt;&lt;OCIE2); // permission for compare match interrupt[/syntax]<br /><div class="quotetitle">Kocon napisał(a):</div><div class="quotecontent"><br />                TCCR2 |=(1&lt;&lt;WGM21); //CTC mode<br />                TCCR2 |=(1&lt;CS22)|(1&lt;CS21)|(1&lt;CS20); //prescaler 1024<br />                OCR2=50; //50Hz for 1 segment<br />                TIMSK |=OCIE2; // permission for compare match interrupt<br /></div><br /><br />[syntax=c]}else if(num==10){ ////////Show F<br /><br />                PORTD &amp;=~DIG1_G;<br /><br />                PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br /><br />                PORTD |=DIG1_G;<br /><br />                PORTC |=(DIG1_A|DIG1_E|DIG1_F);<br /><br />        }else if(num==11){ ////////Show A<br /><br />                PORTD &amp;=~DIG1_G;<br /><br />                PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br /><br />                PORTD |=DIG1_G;<br /><br />                PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_E|DIG1_F);[/syntax]<br /><div class="quotetitle">Kocon napisał(a):</div><div class="quotecontent"><br />}else if(num==10){ ////////Show F<br />                PORTD &amp;=~DIG1_G;<br />                PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />                PORTD |=DIG1_G;<br />                PORTC |=(DIG1_A|DIG1_E|DIG1_F); <br />        }else if(num==10){ ////////Show A<br />                PORTD &amp;=~DIG1_G;<br />                PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />                PORTD |=DIG1_G;<br />                PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_E|DIG1_F);<br /></div><br />Ja jak coś okomentuję to staram się pisać tak abym przynajmniej sam wiedział o co chodzi a u Ciebie to &quot;takie se&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />N.p nie czytelniej byłoby napisać:<br />[syntax=c]#define segA (1&lt;&lt;PB1)<br />...<br />...<br />#define Kat1 ( 1&lt;&lt; coś_tam)<br />...<br />...[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 20 wrz 2015, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danny]]></name></author>
<updated>2015-09-20T11:19:26+01:00</updated>
<published>2015-09-20T11:19:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140195#p140195</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140195#p140195"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140195#p140195"><![CDATA[
A dlaczego kolega nie wstawił kodu prawidłowo w znaczniki syntax c, tak jak jest w tej instrukcji: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --> ?<br />Wszystkim by się znacznie wygodniej to czytało i szybciej otrzymałbyś pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1505">danny</a> — 20 wrz 2015, o 11:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2015-09-20T12:45:21+01:00</updated>
<published>2015-09-20T11:04:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140193#p140193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140193#p140193"/>
<title type="html"><![CDATA[Multipleksowanie LED]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12987&amp;p=140193#p140193"><![CDATA[
Witam i pozdrawiam<br />Po pewnej przerwie wróciłem do programowania AVRów, potrzebowałem zmultipleksować kilka wyświetlaczy siedmiosegmentowych, opierając się na książce napisałem poniższy kod :<br /><br />d_led.c:<br />[syntax=c]/////////////////////////////////////<br />////////// Maked for atmega8, 16Mhz oscillator<br /><br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;d_led.h&quot;<br /><br />//Segments data<br />volatile uint8_t seg1;<br />volatile uint8_t seg2;<br /><br />volatile uint8_t seg3;<br />volatile uint8_t seg4;<br />volatile uint8_t seg5;<br />volatile uint8_t seg6;<br /><br /><br />//definition initialize function to work with 7seg <br />void d_led_init(void)<br />{<br />/*****************************************************************************/<br />/***** Directions of ports *******/<br />//OUTPUTS<br />DDRC |=DIG1_A | DIG1_B | DIG1_C | DIG1_D | DIG1_E | DIG1_F;<br />DDRD |=DIG1_D | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4;<br />DDRB |=DIG2_C5 | DIG1B_com | DIG2_H;<br />//Turn off all outputs<br />PORTC &amp;=~(DIG1_A | DIG1_B | DIG1_C | DIG1_D | DIG1_E | DIG1_F);<br />PORTD &amp;=~(DIG1_D | DIG1A_com | DIG2_C1 | DIG2_C2 | DIG2_C3 | DIG2_C4);<br />PORTB &amp;=~(DIG2_C5 | DIG1B_com | DIG2_H);<br /><br /><br />/************************  Timer2 settings  **************************/<br /><br />TCCR2 |=(1&lt;&lt;WGM21); //CTC mode<br />TCCR2 |=(1&lt;CS22)|(1&lt;CS21)|(1&lt;CS20); //prescaler 1024<br />OCR2=50; //50Hz for 1 segment<br />TIMSK |=OCIE2; // permission for compare match interrupt<br /><br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br /><br />}<br /><br /><br /><br /><br />////////////////////////////////////<br />//// Set number function<br />void set_num(int num)<br />{<br />if(num==1){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />}else if(num==2){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTC |=(DIG1_B|DIG1_C);<br />}else if(num==3){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_D|DIG1_E);<br />}else if(num==4){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_B|DIG1_C|DIG1_F);<br />}else if(num==5){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_C|DIG1_D|DIG1_F);<br />}else if(num==6){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />}else if(num==7){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_F);<br />}else if(num==8){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />}else if(num==9){<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_F);<br />}else if(num==10){ ////////Show F<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_E|DIG1_F);<br />}else if(num==10){ ////////Show A<br />PORTD &amp;=~DIG1_G;<br />PORTC &amp;=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);<br />PORTD |=DIG1_G;<br />PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_E|DIG1_F);<br />}<br />} <br /><br /><br /><br /><br /><br />///====================================PROCEDURE OF TIMER2 INTERRUPT=============================================//<br />ISR(TIMER2_COMP_vect)<br />{<br />//variable for switching anodes of display<br />static uint8_t counter=1;<br />//swiching segements<br />switch(counter){<br />case 1 :<br />DIG1A_com_ON;<br />DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 2 :<br />DIG1B_com_ON;<br />DIG1A_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 4 :<br />DIG2_C1_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C2_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 8 :<br />DIG2_C2_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C3_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 16 :<br />DIG2_C3_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C4_OFF;<br />break;<br /><br />case 32 :<br />DIG2_C4_ON;<br />DIG1A_com_OFF;DIG1B_com_OFF;DIG2_C1_OFF;DIG2_C2_OFF;DIG2_C3_OFF;<br />break;<br /><br />default:<br />break;<br />}<br /><br />//If digit is on, show number<br />if (counter==1) set_num(seg1);<br />else if (counter==2) set_num(seg2);<br />else if (counter==4) set_num(seg3);<br />else if (counter==8) set_num(seg4);<br />else if (counter==16) set_num(seg5);<br />else if (counter==32) set_num(seg6);<br /><br />counter &lt;&lt;=1;<br />if(counter&gt;32) counter=1;<br /><br />}[/syntax]<br /><br />d_led.h :<br /> <br />[syntax=c]#ifndef _d_led_h<br />#define _d_led_h<br /><br />////////////////////////////////////////////////////////////////////////////////////////<br />///////////////////////////////////D E F I N I T I O N S////////////////////////////////<br />#define DIG1_A (1&lt;&lt;PC0)<br />#define DIG1_A_OFF PORTC &amp;= ~DIG1_A //DIG1_A OFF<br />#define DIG1_A_ON PORTC |= DIG1_A  //DIG1_A ON<br /><br />#define DIG1_B (1&lt;&lt;PC1)<br />#define DIG1_B_OFF PORTC &amp;= ~DIG1_B //DIG1_B OFF<br />#define DIG1_B_ON PORTC |= DIG1_B  //DIG1_B ON<br /><br />#define DIG1_C (1&lt;&lt;PC2)<br />#define DIG1_C_OFF PORTC &amp;= ~DIG1_C //DIG1_C OFF<br />#define DIG1_C_ON PORTC |= DIG1_C  //DIG1_C ON<br /><br />#define DIG1_D (1&lt;&lt;PC3)<br />#define DIG1_D_OFF PORTC &amp;= ~DIG1_D //DIG1_D OFF<br />#define DIG1_D_ON PORTC |= DIG1_D  //DIG1_D ON<br /><br />#define DIG1_E (1&lt;&lt;PC4)<br />#define DIG1_E_OFF PORTC &amp;= ~DIG1_E //DIG1_E OFF<br />#define DIG1_E_ON PORTC |= DIG1_E  //DIG1_E ON<br /><br />#define DIG1_F (1&lt;&lt;PC5)<br />#define DIG1_F_OFF PORTC &amp;= ~DIG1_F //DIG1_F OFF<br />#define DIG1_F_ON PORTC |= DIG1_F  //DIG1_F ON<br /><br />#define DIG1_G (1&lt;&lt;PD0)<br />#define DIG1_G_OFF PORTD &amp;= ~DIG1_G //DIG1_G OFF<br />#define DIG1_G_ON PORTD |= DIG1_G  //DIG1_G ONN<br /><br />#define DIG1A_com (1&lt;&lt;PD1)<br />#define DIG1A_com_OFF PORTD &amp;= ~DIG1A_com //DIG1A_com OFF<br />#define DIG1A_com_ON PORTD |= DIG1A_com  //DIG1A_com ON<br /><br />#define DIG1B_com (1&lt;&lt;PB1)<br />#define DIG1B_com_OFF PORTB &amp;= ~DIG1B_com //DIG1A_com OFF<br />#define DIG1B_com_ON PORTB |= DIG1B_com  //DIG1A_com ON<br /><br />#define DIG2_C1 (1&lt;&lt;PD4)<br />#define DIG2_C1_OFF PORTD &amp;= ~DIG2_C1 //DIG2_C1 OFF<br />#define DIG2_C1_ON PORTD |= DIG2_C1  //DIG2_C1 ON<br /><br />#define DIG2_C2 (1&lt;&lt;PD5)<br />#define DIG2_C2_OFF PORTD &amp;= ~DIG2_C2 //DIG2_C2 OFF<br />#define DIG2_C2_ON PORTD |= DIG2_C2  //DIG2_C2 ON<br /><br />#define DIG2_C3 (1&lt;&lt;PD6)<br />#define DIG2_C3_OFF PORTD &amp;= ~DIG2_C3 //DIG2_C3 OFF<br />#define DIG2_C3_ON PORTD |= DIG2_C3  //DIG2_C3 ON<br /><br />#define DIG2_C4 (1&lt;&lt;PD7)<br />#define DIG2_C4_OFF PORTD &amp;= ~DIG2_C4 //DIG2_C4 OFF<br />#define DIG2_C4_ON PORTD |= DIG2_C4  //DIG2_C4 ON<br /><br />#define DIG2_C5 (1&lt;&lt;PB0)<br />#define DIG2_C5_OFF PORTB &amp;= ~DIG2_C5 //DIG2_C5 OFF<br />#define DIG2_C5_ON PORTB |= DIG2_C5  //DIG2_C5 ON<br /><br />#define DIG2_H (1&lt;&lt;PB2)<br />#define DIG2_H_OFF PORTB &amp;= ~DIG2_H //DIG2_C5 OFF<br />#define DIG2_H_ON PORTB |= DIG2_H  //DIG2_C5 ON<br /><br />extern volatile uint8_t seg1;<br />extern volatile uint8_t seg2;<br />extern volatile uint8_t seg3;<br />extern volatile uint8_t seg4;<br />extern volatile uint8_t seg5;<br />extern volatile uint8_t seg6;<br /><br /><br />void  d_led_init(void);<br />#endif[/syntax]<br /><br />oraz krótki 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 /><br /><br /><br />int main(void)<br />{<br />d_led_init();<br />seg1=8;<br />seg2=8;<br />seg3=8;<br />seg4=8;<br />seg5=8;<br />seg6=8;<br /><br />sei();<br />    while(1)<br />    {<br />        //TODO:: Please write your application code <br />    }<br /><br /><br />}[/syntax]<br /><br />Dodaję też oczywiście schemat w załączniku, wybaczcie format pdf.<br />DIG1A-F to katody diod<br />Natomiast DIG2-C1-4 oraz DIG1A/B-com to sterowowanie przełączaniem wspólnych anod.<br />Czyli wyświetlaczy mam ogólnie 6, oscylator 16MHz.<br />Jednak po wgraniu programu nic się nie wyświetla, sugeruje mi to dwie opcje; złą inicjalizację timera bądź źle skonfigurowane porty. Fizyczny błąd połączeń wykluczam.<br /><br />Widzi ktoś może błąd ? Będę wdzięczny za wszystkie wskazówki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 20 wrz 2015, o 11:04</p><hr />
]]></content>
</entry>
</feed>