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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-02-17T20:45:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=23353&amp;mode</id>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2021-02-17T20:45:07+01:00</updated>
<published>2021-02-17T20:45:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=231129#p231129</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=231129#p231129"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=231129#p231129"><![CDATA[
Pomoże ktoś ogarnąć ten projekt do końca, utknęło w martwym puncie.  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 17 lut 2021, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2021-01-18T01:25:36+01:00</updated>
<published>2021-01-18T01:25:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=230639#p230639</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=230639#p230639"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=230639#p230639"><![CDATA[
Witam ponownie.<br />Przez dłuższy czas byłem nie obecny ponieważ przygotowywałem się do tego projektu od strony technicznej, mianowicie zbudowałem <br />sobie wiertarkę do PCB oraz uczyłem się wytrawiać płytki. No i pierwszy sukces, udało mi się zaprojektować oraz wykonać płytkę <br />potrzebną do tego projektu. <br /><br />Po drugie to chciałem przeprosić kolegę Alef2 za ten cytat który pisałem wcześniej<br /><div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />Alef2 mam problem z Twoim ostatnim kodem , za cholerę mi nie działa<br /></div><br /><br />Twój kod działa, problem leżał po mojej stronie popełniłem kilka błędów przy budowie płytki prototypowej lecz postanowiłem zacząć<br />od miejsca którego powinienem zacząć od samego początku, kupiłem książkę Pana Mirka (BB) - Panie Mirku WIELKIE DZIĘKI. Dzięki temu krok po kroku zbudowałem płytkę od nowa według porad Pana Mirka i zaczęło działać jak należy. <br /><br />Wracając do kodu to czy mogę mieć małą prośbę do Ciebie kolego Alef2, mianowicie pierwsza sprawa to czy dało by się coś zrobić z  sygnałem na światło dzienne żeby się utrzymywało trochę dłużej po zakończonym cyklu kierunkowskazu gdyż teraz gaśnie praktycznie po zakończonym cyklu kierunku i jest znikoma jego regulacja, regulacja prędkości zapalania cyklu jest super. Druga sprawa to taka że <br />blokuje się procesor w momencie kiedy przytrzymam przycisk do momentu zakończenia cyklu . Czy jest możliwe zrobić tak że w momencie kiedy trzymam przycisk wykonuje się cykl i świecą wszystkie diody  ale gaśnie dopiero kiedy przycisk zostanie puszczony. Chodzi o to żeby procek się nie blokował kiedy przycisk jest dłużej wduszony, teraz przy krótkim naciskaniu przycisku działa dobrze, do puki nie przytrzymam go dłużej.<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 />#include &quot;main.h&quot;<br /><br />volatile uint8_t sys_tick;<br />uint8_t set_timer1, set_timer2, timer1, timer2;<br />uint8_t start, start_enable = 1, debouncing;<br />uint8_t  indx, max_indx;<br />//uint8_t start<br />//volatile uint8_t tick=250;<br /><br />int main( void ) {<br /><br />    DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br /><br />    DDRC &amp;= ~( 1 &lt;&lt; PC5 );<br />    PORTC &amp;= ~( 1 &lt;&lt; PC5 );    //jako wejście, bo bedzie wykorzystywany jako adc<br />    DDRC &amp;= ~( 1 &lt;&lt; PC4 );<br />    PORTC &amp;= ~( 1 &lt;&lt; PC4 );    //jako wejście, bo bedzie wykorzystywany jako adc<br />    //ustawienie przetwornika adc<br />    ADCSRA = ( 1 &lt;&lt; ADEN ) //ADEN: ADC Enable (uruchomienie przetwornika)<br /><br />             //ADPS2:0: ustawienie preskalera, preskaler= 128<br />             | ( 1 &lt;&lt; ADPS0 )<br />             | ( 1 &lt;&lt; ADPS1 )<br />             | ( 1 &lt;&lt; ADPS2 );<br />    ADMUX = ( 1 &lt;&lt; REFS0 ) //napiecie odniesienia Vcc<br />            | ( 1 &lt;&lt; ADLAR ) //przesuniecie wyniku do lewej<br />            | ( 1 &lt;&lt; MUX2 ) | ( 1 &lt;&lt; MUX0 ); //aktywne wejscie ADC5<br /><br />    DDRD &amp;= ~KEY;  // Pin portu PD0 jako wejście<br /><br />    TCCR0 |= ( 1 &lt;&lt; CS00 );         // źródłem CLK, no preskaler<br />    TIMSK |= ( 1 &lt;&lt; TOIE0 );       //Przerwanie overflow (przepełnienie timera)<br /><br /><br />    sei(); //Globalne uruchomienie przerwań<br /><br />    DAY_LIGHT_OFF;<br /><br /><br />    while ( 1 ) {<br /><br />        if ( !sys_tick ) {           <br /><br />            if ( KEY_PRESSED &amp;&amp; ( start_enable ) )<br />                //uruchamiane jednorazowo wczytanie nastaw<br />            {<br />                start_enable = 0;  //zapobiega ponownemu wyzwoleniu<br />                start = 1;      //start efektu<br />                set_timer1 = get_adc( PC5 );    //wartość pierwszej zwłoki - szybkość efektu<br />                set_timer2 = get_adc( PC4 );    //wartość drugiej zwłoki - załączenie świateł dziennych<br />                timer1 = set_timer1;<br />                timer2 = set_timer2;<br /><br />                debouncing = 50;              //zwłoka na drgania styków   pierwotnie wartosc 50         <br />                indx = 0;                  //nr pierwszego kroku efektu<br />                max_indx = 13;              //nr ostatniego kroku efektu<br />                DAY_LIGHT_ON;<br />            }<br /><br />            if ( start ) { //wyświetlanie efektu<br />                if ( timer1 == set_timer1 ) {  //początek zwłoki pierwszej           <br />                    led_out( a&#91;indx&#93; );  //wyświetlenie index kroku efektu<br />                    indx++;<br />                    if ( indx == max_indx )  start = 0;<br />                }<br /><br />                timer1--;<br />                if ( timer1 == 0 )timer1 = set_timer1;    //przeładowanie timer'a 1<br /><br />                //if(debouncing&gt;0)debouncing--;<br /><br />                if (( debouncing &gt; 0 ) &amp;&amp; ( !( KEY_PRESSED ) ) ) debouncing--;<br />                if ( debouncing == 0 )start_enable = 1;    //możliwość ponownego wyzwolenia<br />            }<br /><br />            if ( indx == max_indx) {<br />                if ( timer2 &gt; 0 )timer2--;      <br />                else DAY_LIGHT_OFF;<br />            }<br />            sys_tick = 1;<br />        }                         <br />                                     <br />    } //while<br />                                                              <br />} //main<br /><br />ISR( TIMER0_OVF_vect ) {<br /><br />    static uint8_t tick;<br />    tick--;<br />    if ( tick == 0 ) {<br />        tick = 4;           <br />        sys_tick = 0;<br />    }<br />}<br /><br />uint8_t get_adc( uint8_t chanel ) {<br />    chanel &amp;= 0b00000111;  //ograniczenie 0-7<br />    ADMUX &amp;= 0b11110000; //zerujemy nr kanalu<br />    ADMUX |= chanel;    //ustawiamy kanal<br /><br />    ADCSRA |= ( 1 &lt;&lt; ADSC ); //uruchomienie pojedynczej konwersji<br /><br />    while ( ADCSRA &amp; ( 1 &lt;&lt; ADSC ) ); //czeka na zakończenie konwersji<br />    return ADCH;<br />}<br /><br />void led_out( uint16_t value ) {<br />//LED1<br />    if ( value &amp; ( 1 &lt;&lt; 0 ) ) LED1_ON ;<br />    else LED1_OFF;<br /><br />//LED2<br />    if ( value &amp; ( 1 &lt;&lt; 1 ) ) LED2_ON ;<br />    else LED2_OFF;<br /><br />//LED3<br />    if ( value &amp; ( 1 &lt;&lt; 2 ) ) LED3_ON ;<br />    else LED3_OFF;<br /><br />//LED4<br />    if ( value &amp; ( 1 &lt;&lt; 3 ) ) LED4_ON ;<br />    else LED4_OFF;<br /><br />//LED5<br />    if ( value &amp; ( 1 &lt;&lt; 4 ) ) LED5_ON ;<br />    else LED5_OFF;<br /><br />//LED6<br />    if ( value &amp; ( 1 &lt;&lt; 5 ) ) LED6_ON ;<br />    else LED6_OFF;<br /><br />//LED7<br />    if ( value &amp; ( 1 &lt;&lt; 6 ) ) LED7_ON ;<br />    else LED7_OFF;<br /><br />//LED8<br />    if ( value &amp; ( 1 &lt;&lt; 7 ) ) LED8_ON ;<br />    else LED8_OFF;<br /><br />//LED9<br />    if ( value &amp; ( 1 &lt;&lt; 8 ) ) LED9_ON ;<br />    else LED9_OFF;<br /><br />//LED10<br />    if ( value &amp; ( 1 &lt;&lt; 9 ) ) LED10_ON ;<br />    else LED10_OFF;<br /><br />//LED11<br />    if ( value &amp; ( 1 &lt;&lt; 10 ) ) LED11_ON ;<br />    else LED11_OFF;<br /><br />//LED12<br />    if ( value &amp; ( 1 &lt;&lt; 11 ) ) LED12_ON ;<br />    else LED12_OFF;<br />}[/syntax]<br /><br />[syntax=c]#ifndef MAIN_H_<br />#define MAIN_H_<br /><br />//LED1<br />#define LED1 PC3<br />#define LED1_PORT PORTC<br />#define LED1_ON   LED1_PORT|=(1&lt;&lt;LED1)<br />#define LED1_OFF  LED1_PORT&amp;=~(1&lt;&lt;LED1)<br /><br />//LED2                                               <br />#define LED2 PC2<br />#define LED2_PORT PORTC<br />#define LED2_ON   LED2_PORT|=(1&lt;&lt;LED2)<br />#define LED2_OFF  LED2_PORT&amp;=~(1&lt;&lt;LED2)<br /><br />//LED3<br />#define LED3 PC1<br />#define LED3_PORT PORTC<br />#define LED3_ON   LED3_PORT|=(1&lt;&lt;LED3)<br />#define LED3_OFF  LED3_PORT&amp;=~(1&lt;&lt;LED3)<br /><br />//LED4<br />#define LED4 PC0<br />#define LED4_PORT PORTC<br />#define LED4_ON   LED4_PORT|=(1&lt;&lt;LED4)<br />#define LED4_OFF  LED4_PORT&amp;=~(1&lt;&lt;LED4)<br /><br />//LED5<br />#define LED5 PB5<br />#define LED5_PORT PORTB<br />#define LED5_ON   LED5_PORT|=(1&lt;&lt;LED5)<br />#define LED5_OFF  LED5_PORT&amp;=~(1&lt;&lt;LED5)<br /><br />//LED6<br />#define LED6 PB4<br />#define LED6_PORT PORTB<br />#define LED6_ON   LED6_PORT|=(1&lt;&lt;LED6)<br />#define LED6_OFF  LED6_PORT&amp;=~(1&lt;&lt;LED6)<br /><br />//LED7<br />#define LED7 PB3 <br />#define LED7_PORT PORTB<br />#define LED7_ON   LED7_PORT|=(1&lt;&lt;LED7)<br />#define LED7_OFF  LED7_PORT&amp;=~(1&lt;&lt;LED7)<br /><br />//LED8<br />#define LED8 PB2<br />#define LED8_PORT PORTB<br />#define LED8_ON   LED8_PORT|=(1&lt;&lt;LED8)<br />#define LED8_OFF  LED8_PORT&amp;=~(1&lt;&lt;LED8)<br /><br />//LED9<br />#define LED9 PB1<br />#define LED9_PORT PORTB<br />#define LED9_ON   LED9_PORT|=(1&lt;&lt;LED9)<br />#define LED9_OFF  LED9_PORT&amp;=~(1&lt;&lt;LED9)<br /><br />//LED10<br />#define LED10 PB0<br />#define LED10_PORT PORTB<br />#define LED10_ON   LED10_PORT|=(1&lt;&lt;LED10)<br />#define LED10_OFF  LED10_PORT&amp;=~(1&lt;&lt;LED10)<br /><br />//LED11<br />#define LED11 PD7<br />#define LED11_PORT PORTD<br />#define LED11_ON   LED11_PORT|=(1&lt;&lt;LED11)<br />#define LED11_OFF  LED11_PORT&amp;=~(1&lt;&lt;LED11)<br /><br />//LED12<br />#define LED12 PD6 <br />#define LED12_PORT PORTD<br />#define LED12_ON   LED12_PORT|=(1&lt;&lt;LED12)<br />#define LED12_OFF  LED12_PORT&amp;=~(1&lt;&lt;LED12)<br />                                                                       <br />//DAY_LIGHT<br />#define DAY_LIGHT PD5<br />#define DAY_LIGHT_PORT PORTD<br />#define DAY_LIGHT_ON   DAY_LIGHT_PORT|=(1&lt;&lt;DAY_LIGHT)<br />#define DAY_LIGHT_OFF  DAY_LIGHT_PORT&amp;=~(1&lt;&lt;DAY_LIGHT)<br /><br />#define KEY (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1    <br />#define KEY_PORT PIND<br />#define KEY_PRESSED  KEY_PORT&amp;KEY<br /><br />//deklaracje funkcji<br />uint8_t get_adc( uint8_t );<br />void led_out( uint16_t );<br /><br />uint16_t a&#91;&#93; = { //zapalanie<br />    0b0000000000000001, //krok 1<br />    0b0000000000000011,<br />    0b0000000000000111,<br />    0b0000000000001111,<br />    0b0000000000011111,<br />    0b0000000000111111,<br />    0b0000000001111111,<br />    0b0000000011111111,<br />    0b0000000111111111,<br />    0b0000001111111111,<br />    0b0000011111111111,<br />    0b0000111111111111,<br />    0<br />};<br /><br />uint16_t b&#91;&#93; = { //gaszenie<br />    //krok 1<br />    0b0000000000000001, //krok 1<br />    0b0000000000000011,<br />    0b0000000000000111,<br />    0b0000000000001111,<br />    0b0000000000011111,<br />    0b0000000000111111,<br />    0b0000000001111111,<br />    0b0000000011111111,<br />    0b0000000111111111,<br />    0b0000001111111111,<br />    0b0000011111111111,<br />    0b0000111111111111,<br /><br />    0b0000111111111110,<br />    0b0000111111111100,<br />    0b0000111111111000,<br />    0b0000111111110000,<br />    0b0000111111100000,<br />    0b0000111111000000,<br />    0b0000111110000000,<br />    0b0000111100000000,<br />    0b0000111000000000,<br />    0b0000110000000000,<br />    0b0000100000000000,<br />    0b0000000000000000<br />};<br /><br /><br />#endif  /* MAIN_H_ */[/syntax]<br />Z góry dziękuję i pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 18 sty 2021, o 01:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-11-25T21:20:28+01:00</updated>
<published>2020-11-25T21:20:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229999#p229999</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229999#p229999"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229999#p229999"><![CDATA[
<div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />bardzo chętnie zobaczyłbym działające urządzenie.<br /></div><br /><br />Witam po długiej nieobecności. <br />Oczywiście , zrobię parę fotek i wrzucę tutaj. Jestem na etapie trawienia płytek. Trochę długo mi to szło (brak czasu) ale zaprojektowałem i wytrawiam płytki sam. <br />Alef2 mam problem z Twoim ostatnim kodem , za cholerę mi nie działa  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /> (światło dzienne świeci cały czas, po podaniu kierunkowskazu nie ma żadnych zmian , nie zapalają się żadne diody tylko cały czas świeci dzienne). Zbudowałem dwie płytki prototypowe bo myślałem że zrobiłem jakiś błąd ale wychodzi na to że nie ponieważ mój prosty kod działa na obydwóch. <br /><br />[syntax=c]/*<br /> * main.c    ATmega8A    F_CPU = 8000000 Hz<br /> *<br /> * Created on: 2020-10-01<br /> *     Author: admin<br />*/<br />// dołączanie systemowych plików nagłówkowych<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />int main( void ) {<br />    DDRC = 0xff;<br />    DDRB = 0xff;<br /><br />    while ( 1 ) {                                     <br /><br />        if ( PIND &amp; ( 1 &lt;&lt; PD0 ) ) {<br /><br />            PORTC |= ( 1 &lt;&lt; PC3 );   <br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC2 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC1 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC0 );                         <br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB5 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB4 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB3 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB2 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB1 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB0 );<br />            _delay_ms( 30 );<br /><br />        } else  {<br />            PORTC &amp;= ~( 1 &lt;&lt; PC3 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC2 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC1 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC0 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB5 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB4 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB3 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB2 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB1 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB0 );<br /><br /><br /><br />        }<br />    }<br />}[/syntax]<br />Masz jakiś pomysł  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 25 lis 2020, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-11-04T21:41:23+01:00</updated>
<published>2020-11-04T21:41:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229668#p229668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229668#p229668"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229668#p229668"><![CDATA[
Niestety, z przyczyn osobistych jak i zawodowych byłem nieobecny. <br /><div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />czy Ty aby tak do końca robisz to bezinteresownie ?<br /></div><br />nie oczekuje żadnych profitów, ale bardzo chętnie zobaczyłbym działające urządzenie. Dla mnie to trochę ambicjonalna sprawa, a satysfakcja, ze uczestniczyło sie w przedsięwzięciu doprowadzonym do końca - bezcenna.<br /><br />Obecna wersja programu jest nieblokująca i rozpoczęcie efektu możliwe jest w trakcie jego trwania.<br />plik .h[syntax=c]#ifndef MAIN_H_               <br />#define MAIN_H_                <br /><br />//LED1<br />#define LED1 PC3<br />#define LED1_PORT PORTC <br />#define LED1_ON   LED1_PORT|=(1&lt;&lt;LED1)  <br />#define LED1_OFF  LED1_PORT&amp;=~(1&lt;&lt;LED1)<br />                    <br />//LED2             <br />#define LED2 PC2<br />#define LED2_PORT PORTC <br />#define LED2_ON   LED2_PORT|=(1&lt;&lt;LED2)  <br />#define LED2_OFF  LED2_PORT&amp;=~(1&lt;&lt;LED2)  <br /><br />//LED3<br />#define LED3 PC1<br />#define LED3_PORT PORTC <br />#define LED3_ON   LED3_PORT|=(1&lt;&lt;LED3)                               <br />#define LED3_OFF  LED3_PORT&amp;=~(1&lt;&lt;LED3)    <br /><br />//LED4<br />#define LED4 PC0<br />#define LED4_PORT PORTC <br />#define LED4_ON   LED4_PORT|=(1&lt;&lt;LED4)  <br />#define LED4_OFF  LED4_PORT&amp;=~(1&lt;&lt;LED4)<br /><br />//LED5<br />#define LED5 PD1          <br />#define LED5_PORT PORTD<br />#define LED5_ON   LED5_PORT|=(1&lt;&lt;LED5)  <br />#define LED5_OFF  LED5_PORT&amp;=~(1&lt;&lt;LED5)      <br /><br />//LED6<br />#define LED6 PB3<br />#define LED6_PORT PORTB <br />#define LED6_ON   LED6_PORT|=(1&lt;&lt;LED6)  <br />#define LED6_OFF  LED6_PORT&amp;=~(1&lt;&lt;LED6)    <br /><br />//LED7                                      <br />#define LED7 PB2 <br />#define LED7_PORT PORTB <br />#define LED7_ON   LED7_PORT|=(1&lt;&lt;LED7)  <br />#define LED7_OFF  LED7_PORT&amp;=~(1&lt;&lt;LED7)  <br /><br />//LED8<br />#define LED8 PB1<br />#define LED8_PORT PORTB <br />#define LED8_ON   LED8_PORT|=(1&lt;&lt;LED8)  <br />#define LED8_OFF  LED8_PORT&amp;=~(1&lt;&lt;LED8)<br /><br />//LED9<br />#define LED9 PB0<br />#define LED9_PORT PORTB <br />#define LED9_ON   LED9_PORT|=(1&lt;&lt;LED9)  <br />#define LED9_OFF  LED9_PORT&amp;=~(1&lt;&lt;LED9)<br /><br />//LED10  <br />#define LED10 PD7<br />#define LED10_PORT PORTD <br />#define LED10_ON   LED10_PORT|=(1&lt;&lt;LED10)  <br />#define LED10_OFF  LED10_PORT&amp;=~(1&lt;&lt;LED10)<br /><br />//LED11                    <br />#define LED11 PD6<br />#define LED11_PORT PORTD <br />#define LED11_ON   LED11_PORT|=(1&lt;&lt;LED11)  <br />#define LED11_OFF  LED11_PORT&amp;=~(1&lt;&lt;LED11)<br /><br />//LED12<br />#define LED12 PD5<br />#define LED12_PORT PORTD<br />#define LED12_ON   LED12_PORT|=(1&lt;&lt;LED12)  <br />#define LED12_OFF  LED12_PORT&amp;=~(1&lt;&lt;LED12) <br /><br />//DAY_LIGHT<br />#define DAY_LIGHT PD3<br />#define DAY_LIGHT_PORT PORTD<br />#define DAY_LIGHT_ON   DAY_LIGHT_PORT|=(1&lt;&lt;DAY_LIGHT)  <br />#define DAY_LIGHT_OFF  DAY_LIGHT_PORT&amp;=~(1&lt;&lt;DAY_LIGHT) <br /><br />#define KEY (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1    <br />#define KEY_PORT PIND<br />#define KEY_PRESSED  KEY_PORT&amp;KEY  <br /><br />//deklaracje funkcji<br />uint8_t get_adc(uint8_t);  <br />void led_out(uint16_t);<br /><br />uint16_t a&#91;&#93;=    //zapalanie<br />{<br />0b0000000000000001, //krok 1<br />0b0000000000000011, <br />0b0000000000000111,<br />0b0000000000001111,<br />0b0000000000011111, <br />0b0000000000111111,  <br />0b0000000001111111,<br />0b0000000011111111,<br />0b0000000111111111,<br />0b0000001111111111,  <br />0b0000011111111111, <br />0b0000111111111111, <br />0<br />};  <br /><br />uint16_t b&#91;&#93;=    //gaszenie                                                                                                                             <br />{<br />  //krok 1  <br />0b0000000000000001, //krok 1<br />0b0000000000000011, <br />0b0000000000000111,<br />0b0000000000001111,<br />0b0000000000011111, <br />0b0000000000111111,  <br />0b0000000001111111,<br />0b0000000011111111,<br />0b0000000111111111,<br />0b0000001111111111,<br />0b0000011111111111, <br />0b0000111111111111,<br />                      <br />0b0000111111111110, <br />0b0000111111111100, <br />0b0000111111111000,<br />0b0000111111110000,<br />0b0000111111100000,<br />0b0000111111000000,<br />0b0000111110000000, <br />0b0000111100000000,<br />0b0000111000000000,<br />0b0000110000000000,<br />0b0000100000000000,<br />0b0000000000000000<br />};<br /><br /><br />#endif  /* MAIN_H_ */[/syntax]<br />plik .c[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;main.h&quot;                                          <br />                                                     <br />volatile uint8_t sys_tick;          <br />uint8_t set_timer1,set_timer2, timer1, timer2;<br />uint8_t start,start_enable=1,debouncing;<br />uint8_t  indx, max_indx;          <br />//uint8_t start                    <br />//volatile uint8_t tick=250; <br />                                        <br />int main( void )                                                                                                                          <br />{                      <br />                        <br />DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br />     <br />    DDRC&amp;=~(1&lt;&lt;PC5);PORTC&amp;=~(1&lt;&lt;PC5);    //jako wejście, bo bedzie wykorzystywany jako adc    <br />    DDRC&amp;=~(1&lt;&lt;PC4);PORTC&amp;=~(1&lt;&lt;PC4);    //jako wejście, bo bedzie wykorzystywany jako adc  <br />    //ustawienie przetwornika adc<br />    ADCSRA =   (1&lt;&lt;ADEN) //ADEN: ADC Enable (uruchomienie przetwornika)  <br />    <br />   //ADPS2:0: ustawienie preskalera, preskaler= 128                                                                                                           <br />   |(1&lt;&lt;ADPS0)  <br />   |(1&lt;&lt;ADPS1)            <br />   |(1&lt;&lt;ADPS2); <br />   ADMUX = (1&lt;&lt;REFS0) //napiecie odniesienia Vcc <br />        |(1&lt;&lt;ADLAR) //przesuniecie wyniku do lewej <br />        |(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0); //aktywne wejscie ADC5 <br /><br />    DDRD &amp;= ~KEY;  // Pin portu PD0 jako wejście         <br />   <br />TCCR0 |= (1&lt;&lt;CS00);             // źródłem CLK, no preskaler                                         <br />TIMSK |= (1&lt;&lt;TOIE0);           //Przerwanie overflow (przepełnienie timera)                                                        <br />  <br />                                                                                             <br /> sei(); //Globalne uruchomienie przerwań <br />    <br /> DAY_LIGHT_ON;<br />                                                                                  <br />                                                 <br />while(1) <br />{                                                                                     <br /><br />if(!sys_tick)<br />{<br />    <br />    if(KEY_PRESSED &amp;&amp; (start_enable))<br />    //uruchamiane jednorazowo wczytanie nastaw<br />    { <br />    start_enable=0;    //zapobiega ponownemu wyzwoleniu<br />    start=1;        //start efektu<br />    set_timer1=get_adc(PC5);    //wartość poerwszej zwłoki - szybkość efektu <br />    set_timer2=get_adc(PC4);    //wartość drugiej zwłoki - załączenie świateł dziennych  <br />    timer1=set_timer1; timer2=set_timer2; <br />    <br />    debouncing=50;                //zwłoka na drgania styków<br />    indx=0;                    //nr pierwszego kroku efektu<br />    max_indx=13;                //nr ostatniego kroku efektu<br />    DAY_LIGHT_OFF;           <br />    }            <br />    <br />    if(start)    //wyświetlanie efektu<br />    {<br />    if(timer1==set_timer1)    //początek zwłoki pierwszej<br />        {                     <br />        led_out(a&#91;indx&#93;);    //wyświetlenie index kroku efektu<br />        indx++;<br />        if(indx==max_indx)start=0;           <br />        }   <br />        <br />        timer1--;<br />        if(timer1==0)timer1=set_timer1;    //przeładowanie timer'a 1<br />    <br />        //if(debouncing&gt;0)debouncing--;<br />    <br />        if((debouncing&gt;0)&amp;&amp;(!(KEY_PRESSED))) debouncing--;<br />        if(debouncing==0)start_enable=1;    //możliwość ponownego wyzwolenia        <br />    }<br />    <br />    if(indx==max_indx)<br />    {<br />    if(timer2&gt;0)timer2--;<br />        else DAY_LIGHT_ON;<br />    }<br />sys_tick=1;                                               <br />}                      <br />                                                        <br />} //while                                                                                                                                            <br />                                                                                                                                             <br />} //main                                                                                                                                           <br />                                                                                                                                               <br />ISR(TIMER0_OVF_vect)   <br />{                                                                          <br />    <br />static uint8_t tick;                                                    <br />tick--;<br />if  (tick==0) <br />    {<br />    tick=4; <br />    sys_tick=0;<br />    }                                                     <br />}                                                         <br />                                                        <br />uint8_t get_adc(uint8_t chanel)<br />{     <br />chanel&amp;=0b00000111;  //ograniczenie 0-7<br />ADMUX &amp;=0b11110000; //zerujemy nr kanalu<br />ADMUX |= chanel;    //ustawiamy kanal<br /><br />ADCSRA |= (1&lt;&lt;ADSC); //uruchomienie pojedynczej konwersji  <br />   <br />while(ADCSRA &amp; (1&lt;&lt;ADSC)); //czeka na zakończenie konwersji  <br />return ADCH; <br />}  <br />  <br />                                                                                                                                            void led_out(uint16_t value)<br />{                            <br />//LED1 <br />if (value &amp; (1&lt;&lt;0)) LED1_ON ;                                                                                                       <br />    else LED1_OFF;<br />    <br />//LED2<br />if (value &amp; (1&lt;&lt;1)) LED2_ON ;<br />    else LED2_OFF;<br />    <br />//LED3<br />if (value &amp; (1&lt;&lt;2)) LED3_ON ;<br />    else LED3_OFF;<br />    <br />//LED4<br />if (value &amp; (1&lt;&lt;3)) LED4_ON ;<br />    else LED4_OFF;   <br />    <br />//LED5<br />if (value &amp; (1&lt;&lt;4)) LED5_ON ;<br />    else LED5_OFF;   <br />    <br />//LED6<br />if (value &amp; (1&lt;&lt;5)) LED6_ON ;<br />    else LED6_OFF;   <br /><br />//LED7<br />if (value &amp; (1&lt;&lt;6)) LED7_ON ;<br />    else LED7_OFF;   <br />                   <br />//LED8<br />if (value &amp; (1&lt;&lt;7)) LED8_ON ;<br />    else LED8_OFF;   <br />                   <br />//LED9<br />if (value &amp; (1&lt;&lt;8)) LED9_ON ;<br />    else LED9_OFF;   <br />    <br />//LED10<br />if (value &amp; (1&lt;&lt;9)) LED10_ON ;<br />    else LED10_OFF;   <br />    <br />//LED11<br />if (value &amp; (1&lt;&lt;10)) LED11_ON ; <br />    else LED11_OFF;<br />    <br />//LED12<br />if (value &amp; (1&lt;&lt;11)) LED12_ON ;<br />    else LED12_OFF;   <br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 4 lis 2020, o 21:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-10-30T11:29:44+01:00</updated>
<published>2020-10-30T11:29:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229591#p229591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229591#p229591"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229591#p229591"><![CDATA[
Witaj Alef2. <br />Widzę że mocno się zaangażowałeś , z płytką myślę że sobie poradzę i tak mi dużo pompgłeś.   Wyjście  światła dziennego steruje przekaźnikiem przez tranzystor . Jak by udało się ten przycisk przerobić  to by było fajnie.  Tak się zapytam nieśmiało czy Ty aby tak do końca robisz to bezinteresownie  ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 30 paź 2020, o 11:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-10-30T08:57:11+01:00</updated>
<published>2020-10-30T08:57:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229589#p229589</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229589#p229589"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229589#p229589"><![CDATA[
No tak, miałem to napisać, ale zapomniałem. Pomyliłem sie w podłączaniu diod w mojej płytce testowej i łatwiej było mi zmienić makro niż płytkę. Oczywiście możesz w pliku .h zmienić przypisania diod. Chyba w pierwszej wersji pliku .h było przypisanie tak jak na twoim schemacie.<br />Przycisk działa na stan wysoki. To, że nie działa za każdym razem wynika z blokującego charakteru programu. Idea (pomysł) działania tego programu jest taka, że rozpoczęcie działania efektu jest inicjowane wysokim stanem na wejściu. Efekt musi się skończyć przed następnym pojawieniem się na wejściu stanu wysokiego.<br />Podłubie w programie, by nawet w czasie trwania efektu, pojawienie się stanu wysokiego (narastającego zbocza) na wejściu rozpoczynało od nowa efekt.<br />Oraz myślę, że wykorzystam niewykorzystany bit w argumencie funkcji led_out, jako znacznik początku/końca efektu, a niewykorzystane piny Atmegi wykorzystam do zmiany rodzaju efektu. W przyszłości można by się pokusić też o jakiś efekt świateł dziennych (np. zapalają się diody po kolei), ale to wymaga ingerencji w układ.<br />A wracając do mojej płytki, to nie ma co pokazywać - jest to płyka uniwesalna z pinami połączonymi kynarem.<br />Tymczasem zacząłem projektowanie PCB. Masz jakieś sugestie jak by PCB miało wyglądać? Np światła dzienne mają miećjakiś tranzystor, czy po prostuma to być wyjście?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 30 paź 2020, o 08:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-10-29T11:26:58+01:00</updated>
<published>2020-10-29T11:26:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229580#p229580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229580#p229580"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229580#p229580"><![CDATA[
Witaj Alef2.<br />Mam kolejne pytanie. <br />Kod napisany przez Ciebie trochę nie współpracuje z moim schematem (inna kolejność diód) czy mogę pozmieniać w pliku &quot;h&quot; kolejność pod mój schemat czy trzeba większej ingeręcji ? Mam wrażenie że przycisk nie działa za każdym razem,  czy w tym kodzie jest sterowany stanem wysokim czy niskim ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 29 paź 2020, o 11:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-10-27T10:02:25+01:00</updated>
<published>2020-10-27T10:02:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229566#p229566</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229566#p229566"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229566#p229566"><![CDATA[
Bardzo dobrze, że pytasz. Dla mnie pewne rzeczy są oczywiste, ale dla innych mogą nie być. Poza tym, jak każdy się mylę.<br /><div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />Jak te kody połączyć ???<br /></div><br />W katalogu głównym programu muszą być oba pliki. Można pisać cały program w jednym pliku, ale przy dłuższych programach analiza takiego długiego pliku jest trudna.<br />Dlatego lepiej duży plik rozbić na kilka mniejszych. W pliku nagłówkowym - tym z rozszerzeniem .h (od header) są umieszczone deklaracje. W pliku z nieposzerzeniem .c reszta programu. Poleceniem #include &quot;main.h&quot; wstawiamy całą zwartość pliku main.h w miejscu polecenia #include.<div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />Port D ma być jako wejście (sygnał z kierunkowskazu stan wysoki)<br /></div> Zgoda. W następnych liniach wybrane piny, tj PD0 (DDRD &amp;= ~KEY1; ) ustawiam jako wejście.<br />Ja wykorzystałem niewykorzystane piny portu D, do celów diagnostycznych i podpiąłem tam extra ledy.<div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />Czy nie powinno wyglądać to tak adc_PC5 = get_adc(PC5); ???<br /></div> Jeden i drugi zapis da dokładnie taki sam kod wynikowy. Dzięki polecdniu #include &lt;avr/io.h&gt;, możemy używać nazw symbolicznych np. PC5, a kompilator (a dokładnie preprocesor) zamieni je na odpowiednie wartości.<div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />Czyli można podłączyć 16 ledów ???<br /></div> Można użyć 16 ledów, oczywiście pod warunkiem, że wystarczy pinów procesora. A jak zabraknie można użyć rozszerzeń i jeszcze wielokrotnie powiększyć.<br />16 bitów, to 2 bajty, a procesor operuje na całych bajtach. Mamy więc 4 bity niewykorzystane. Nie jest to powodem do zmartwienia, bo wykorzystujemy tylko drobny ułamek zasobów procesora.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 27 paź 2020, o 10:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-10-25T22:45:05+01:00</updated>
<published>2020-10-25T22:45:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229550#p229550</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229550#p229550"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229550#p229550"><![CDATA[
<div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />Złożyłem sobie płytkę testową i odpaliłem kod kolegi miki53.<br /></div><br />Kolego Alef2 wrzucisz jakieś foto tej płytki. Czy zbudowałeś według mojego schematu ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 25 paź 2020, o 22:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-10-25T20:20:41+01:00</updated>
<published>2020-10-25T20:20:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229548#p229548</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229548#p229548"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229548#p229548"><![CDATA[
Wrzucam schemat trochę poprawiony (piny po kolei).<br /><br /><a href="https://obrazkiforum.atnel.pl/21589/2103aced3b90b3af9928e3302c67350d.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/21589/2103aced3b90b3af9928e3302c67350d.jpg" alt="Obrazek" /></a><br /><br /><div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />Wszystko do kupy<br /></div><br />Jak te kody połączyć ???<br /><br /><div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek  <br />PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br /></div><br /><br />Port D ma być jako wejście (sygnał z kierunkowskazu stan wysoki) <br /><br /><div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />adc_PC5 = get_adc(5);<br /></div><br /><br />Czy nie powinno wyglądać to tak  adc_PC5 = get_adc(PC5);  ???<br /><br /><div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />Z 16 bitów wykorzystamy tylko 12,<br /></div><br /><br />Czyli można podłączyć 16 ledów ???<br />Myślałem że tylko 12 jak wynika ze schematu.<br />Jeśli tak to niech zostanie 12 żeby nie komplikować.<br /><br /><div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />AndreB1 przetestuj ten kod i daj znać jak działa<br /></div><br />Przetestowałem i działa tak jak pisał Alef2 (Przycisk nie działa za każdym razem).<br /><br /><div class="quotetitle">Elwood napisał(a):</div><div class="quotecontent"><br />jesteś w stanie coś pomóc w temacie ?<br /></div><br />Kolego Elwood niestety nie pomogę Ci w tym temacie. Pracuję przy ciężarówkach .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 25 paź 2020, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-10-25T19:04:44+01:00</updated>
<published>2020-10-25T19:04:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229546#p229546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229546#p229546"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229546#p229546"><![CDATA[
Wszystko do kupy<br />main.h[syntax=c]#ifndef MAIN_H_               <br />#define MAIN_H_                <br /><br />//LED1<br />#define LED1 PC3<br />#define LED1_PORT PORTC <br />#define LED1_ON   LED1_PORT|=(1&lt;&lt;LED1)  <br />#define LED1_OFF  LED1_PORT&amp;=~(1&lt;&lt;LED1)<br />                    <br />//LED2<br />#define LED2 PC2<br />#define LED2_PORT PORTC <br />#define LED2_ON   LED2_PORT|=(1&lt;&lt;LED2)  <br />#define LED2_OFF  LED2_PORT&amp;=~(1&lt;&lt;LED2)  <br /><br />//LED3<br />#define LED3 PC1<br />#define LED3_PORT PORTC <br />#define LED3_ON   LED3_PORT|=(1&lt;&lt;LED3)                               <br />#define LED3_OFF  LED3_PORT&amp;=~(1&lt;&lt;LED3)    <br /><br />//LED4<br />#define LED4 PC0<br />#define LED4_PORT PORTC <br />#define LED4_ON   LED4_PORT|=(1&lt;&lt;LED4)  <br />#define LED4_OFF  LED4_PORT&amp;=~(1&lt;&lt;LED4)<br /><br />//LED5<br />#define LED5 PD1          <br />#define LED5_PORT PORTD<br />#define LED5_ON   LED5_PORT|=(1&lt;&lt;LED5)  <br />#define LED5_OFF  LED5_PORT&amp;=~(1&lt;&lt;LED5)      <br /><br />//LED6<br />#define LED6 PB3<br />#define LED6_PORT PORTB <br />#define LED6_ON   LED6_PORT|=(1&lt;&lt;LED6)  <br />#define LED6_OFF  LED6_PORT&amp;=~(1&lt;&lt;LED6)    <br /><br />//LED7                                      <br />#define LED7 PB2 <br />#define LED7_PORT PORTB <br />#define LED7_ON   LED7_PORT|=(1&lt;&lt;LED7)  <br />#define LED7_OFF  LED7_PORT&amp;=~(1&lt;&lt;LED7)  <br /><br />//LED8<br />#define LED8 PB1<br />#define LED8_PORT PORTB <br />#define LED8_ON   LED8_PORT|=(1&lt;&lt;LED8)  <br />#define LED8_OFF  LED8_PORT&amp;=~(1&lt;&lt;LED8)<br /><br />//LED9<br />#define LED9 PB0<br />#define LED9_PORT PORTB <br />#define LED9_ON   LED9_PORT|=(1&lt;&lt;LED9)  <br />#define LED9_OFF  LED9_PORT&amp;=~(1&lt;&lt;LED9)<br /><br />//LED10  <br />#define LED10 PD7<br />#define LED10_PORT PORTD <br />#define LED10_ON   LED10_PORT|=(1&lt;&lt;LED10)  <br />#define LED10_OFF  LED10_PORT&amp;=~(1&lt;&lt;LED10)<br /><br />//LED11                    <br />#define LED11 PD6<br />#define LED11_PORT PORTD <br />#define LED11_ON   LED11_PORT|=(1&lt;&lt;LED11)  <br />#define LED11_OFF  LED11_PORT&amp;=~(1&lt;&lt;LED11)<br /><br />//LED12<br />#define LED12 PD5<br />#define LED12_PORT PORTD<br />#define LED12_ON   LED12_PORT|=(1&lt;&lt;LED12)  <br />#define LED12_OFF  LED12_PORT&amp;=~(1&lt;&lt;LED12) <br /><br />//DAY_LIGHT<br />#define DAY_LIGHT PD3<br />#define DAY_LIGHT_PORT PORTD<br />#define DAY_LIGHT_ON   DAY_LIGHT_PORT|=(1&lt;&lt;DAY_LIGHT)  <br />#define DAY_LIGHT_OFF  DAY_LIGHT_PORT&amp;=~(1&lt;&lt;DAY_LIGHT) <br /><br />#define KEY1 (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1<br />uint16_t a&#91;&#93;=    //zapalanie<br />{<br />0b0000000000000001, //krok 1<br />0b0000000000000011, <br />0b0000000000000111,<br />0b0000000000001111,<br />0b0000000000011111, <br />0b0000000000111111,  <br />0b0000000001111111,<br />0b0000000011111111,<br />0b0000000111111111,<br />0b0000001111111111,  <br />0<br />};  <br /><br />uint16_t b&#91;&#93;=    //gaszenie                                                                                                                             <br />{<br />  //krok 1  <br />0b0000000000000001, //krok 1<br />0b0000000000000011, <br />0b0000000000000111,<br />0b0000000000001111,<br />0b0000000000011111, <br />0b0000000000111111,  <br />0b0000000001111111,<br />0b0000000011111111,<br />0b0000000111111111,<br />0b0000001111111111,<br />0b0000011111111111, <br />0b0000111111111111,<br />                      <br />0b0000111111111110, <br />0b0000111111111100, <br />0b0000111111111000,<br />0b0000111111110000,<br />0b0000111111100000,<br />0b0000111111000000,<br />0b0000111110000000, <br />0b0000111100000000,<br />0b0000111000000000,<br />0b0000110000000000,<br />0b0000100000000000,<br />0b0000000000000000<br />};<br /><br /><br />#endif  /* MAIN_H_ */[/syntax]<br />main.c[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;                                           <br />#include &quot;main.h&quot;<br />     <br />void led_out(uint16_t);<br />uint8_t get_adc(uint8_t);<br />void delay(uint8_t);<br />uint8_t adc_PC5; <br />uint8_t adc_PC4;<br />                        <br />int main( void ) <br />{   <br />DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek                                                         <br />PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy) - niekonieczne jest to ustawienie po resecie    <br />DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek  <br />PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)     <br />     <br />DDRC&amp;=~(1&lt;&lt;PC5);PORTC&amp;=~(1&lt;&lt;PC5);    //jako wejście, bo bedzie wykorzystywany jako adc    <br />DDRC&amp;=~(1&lt;&lt;PC4);PORTC&amp;=~(1&lt;&lt;PC4);    //jako wejście, bo bedzie wykorzystywany jako adc     <br />                                                  <br />DDRD &amp;= ~KEY1;  // Pin portu PD0 jako wejście                                                                          <br />DAY_LIGHT_ON;<br />//ustawienie przetwornika adc<br />ADCSRA =   (1&lt;&lt;ADEN) //ADEN: ADC Enable (uruchomienie przetwornika)  <br />  <br />//ADPS2:0: ustawienie preskalera, preskaler= 128                                                                                       <br />   |(1&lt;&lt;ADPS0)  <br />   |(1&lt;&lt;ADPS1)            <br />   |(1&lt;&lt;ADPS2);  <br /><br />ADMUX = (1&lt;&lt;REFS0) //napiecie odniesienia Vcc<br />        |(1&lt;&lt;ADLAR); //przesuniecie wyniku do lewej   <br /><br />//   sei();   //na razie nie uzywamy przerwan<br />     <br />                                                                                                                                                      <br />while ( 1 ) <br />{                                                       <br />if ( PIND &amp; ( 1 &lt;&lt; PD0 ) ) <br />{<br />DAY_LIGHT_OFF;  //gasimy swiatla dzienne<br />adc_PC5 = get_adc(5); <br />adc_PC4 = get_adc(PC4);       <br />                                                         <br />/*  pierwsza wersja efektu   <br />for(uint8_t i=0;i&lt;11;i++)                                                                                               <br />    {                                                                                                                                    <br />    led_out(a&#91;i&#93;);<br />    delay( adc_PC5 ); <br />     }  <br /> */  <br /> <br />//druga wersja<br />for(uint8_t i=0;i&lt;24;i++)                                                                                               <br />    {                                                                                                                                    <br />    led_out(b&#91;i&#93;);<br />    delay( adc_PC5 ); <br />     }  <br />}   <br />                                                                                                                                              <br />else                                                                                                                                  <br />    {                                                                                                                             <br />                                            <br />    <br />                                                                                                                                       <br />          led_out(0);<br />          _delay_ms( 50 ); <br />                  <br />                                                                                                                                                 <br />    delay( adc_PC4 ); // Czas po jakim ma się włączać światło dzienne<br />     <br />    // ------------ Obsługa świateł dziennych ---------------------------------------------<br />DAY_LIGHT_ON;<br /><br />    } <br />    <br />}<br />}                                                                                                                                      <br />    <br />void led_out(uint16_t value)<br />{                            <br />//LED1 <br />if (value &amp; (1&lt;&lt;0)) LED1_ON ;                                                                                                       <br />    else LED1_OFF;<br />    <br />//LED2<br />if (value &amp; (1&lt;&lt;1)) LED2_ON ;<br />    else LED2_OFF;<br />    <br />//LED3<br />if (value &amp; (1&lt;&lt;2)) LED3_ON ;<br />    else LED3_OFF;<br />    <br />//LED4<br />if (value &amp; (1&lt;&lt;3)) LED4_ON ;<br />    else LED4_OFF;   <br />    <br />//LED5<br />if (value &amp; (1&lt;&lt;4)) LED5_ON ;<br />    else LED5_OFF;   <br />    <br />//LED6<br />if (value &amp; (1&lt;&lt;5)) LED6_ON ;<br />    else LED6_OFF;   <br /><br />//LED7<br />if (value &amp; (1&lt;&lt;6)) LED7_ON ;<br />    else LED7_OFF;   <br />                   <br />//LED8<br />if (value &amp; (1&lt;&lt;7)) LED8_ON ;<br />    else LED8_OFF;   <br />                   <br />//LED9         <br />if (value &amp; (1&lt;&lt;8)) LED9_ON ;<br />    else LED9_OFF;   <br />    <br />//LED10<br />if (value &amp; (1&lt;&lt;9)) LED10_ON ;<br />    else LED10_OFF;   <br />    <br />//LED11<br />if (value &amp; (1&lt;&lt;10)) LED11_ON ; <br />    else LED11_OFF;<br />    <br />//LED12<br />if (value &amp; (1&lt;&lt;11)) LED12_ON ;<br />    else LED12_OFF;   <br />}<br /><br />uint8_t get_adc(uint8_t chanel)<br />{     <br />chanel&amp;=0b00000111;  //ograniczenie 0-7<br />ADMUX &amp;=0b11110000; //zerujemy nr kanalu<br />ADMUX |= chanel;    //ustawiamy kanal<br /><br />ADCSRA |= (1&lt;&lt;ADSC); //uruchomienie pojedynczej konwersji  <br />   <br />while(ADCSRA &amp; (1&lt;&lt;ADSC)); //czeka na zakończenie konwersji  <br />return ADCH; <br />}                                    <br /><br />void delay(uint8_t tick)<br />{<br />_delay_ms(1);                                                         <br />while(tick--)_delay_ms(1);                                                             <br />}                                                         <br />;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 25 paź 2020, o 19:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-10-25T17:33:32+01:00</updated>
<published>2020-10-25T17:33:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229542#p229542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229542#p229542"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229542#p229542"><![CDATA[
A i tak jestem pod wrażeniem zastosowanej sztuczki, by podzielić efekt na dwie części, jedną uruchamianą narastającym zboczem, drugą opadającym.<br />Tak więc przy maksymalnej prostocie efekt zaczyna przypominać to co ma być.<br /><br />Następny krok, to stworzymy funkcję led_out, która jako argument przyjmie liczbę 16bit i w zależności od jej wartości zapali/zgasi odpowiednie diody.<br />Z 16 bitów wykorzystamy tylko 12, bo tyle mamy diod. I tak 0 bit naszej liczby/argumentu funkcji value będzie odpowiadał diodzie nr 1, bit 1 diodzie 2 itd.<br />kod będzie wyglądał następująco:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt; <br />    #include &quot;main.h&quot;<br />     <br />    void led_out(uint16_t); <br />     <br />    int main( void ) {<br />     <br />            DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />            PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />            DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek<br />            PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy)<br />        DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek<br />        PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br />     <br />     <br />            #define KEY1 (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1<br />     <br />     <br />            DDRD &amp;= ~KEY1;  // Pin portu PD0 jako wejście                                                                          <br />          //  PORTD |= KEY1;  // Podciąganie pinu klawisza do VCC (+)<br />     <br />            //   sei();<br />     <br />           <br />        while ( 1 ) {<br />     <br />            if ( PIND &amp; ( 1 &lt;&lt; PD0 ) ) {<br />     <br />    // ------------ Obsługa świateł dziennych ---------------------------------------------<br />                    PORTD &amp;= ~( 1 &lt;&lt; PD5 );//Port na którym są podłączone światła dzienne ( ma zgasić )                              <br />          //        PORTD |= ( 1 &lt;&lt; PD5 ); // Zamień miejscami te pozycje jeśli światło nie gaśnie<br />    // ------------ Koniec obsługi wyłączania świateł dziennych ---------------------------<br />     <br />                led_out(0b0000000000000001);                                                                                                      <br />                _delay_ms( 30 );<br />                               <br />                led_out(0b0000000000000011);            <br />                _delay_ms( 30 );<br />     <br />                led_out(0b0000000000000111);<br />                _delay_ms( 30 );<br />     <br />               led_out(0b0000000000001111);<br />                _delay_ms( 30 );<br />     <br />                led_out(0b0000000000011111);<br />                _delay_ms( 30 );<br />     <br />                led_out(0b0000000000111111);<br />                _delay_ms( 30 );<br />     <br />                led_out(0b0000000001111111);<br />                _delay_ms( 30 );<br />     <br />                led_out(0b0000000011111111);<br />                _delay_ms( 30 );<br />     <br />                led_out(0b0000000111111111);<br />                _delay_ms( 30 );                                                                                                     <br />     <br />                led_out(0b0000001111111111);         <br />                _delay_ms( 30 );<br />     <br />            } else  {<br />    // Dodałem delay_ms() po to aby po puszczeniu klawisza ładnie się po kolei  gasiły<br />                LED1_OFF;<br />                _delay_ms( 30 );<br />                LED2_OFF;<br />                _delay_ms( 30 );                                                               <br />                LED3_OFF;<br />                _delay_ms( 30 );              <br />                LED4_OFF;<br />                _delay_ms( 30 );<br />                LED5_OFF;<br />                _delay_ms( 30 );<br />                LED6_OFF;<br />                _delay_ms( 30 );<br />                LED7_OFF;<br />                _delay_ms( 30 );<br />                LED8_OFF;                <br />                _delay_ms( 30 );<br />                LED9_OFF;     <br />                _delay_ms( 30 );<br />                LED10_OFF;<br />     <br />           }<br />     <br />                _delay_ms( 500 );// Czas po jakim ma się włączać światło dzienne<br />     <br />    // ------------ Obsługa świateł dziennych ---------------------------------------------<br />           //     PORTD &amp;= ~( 1 &lt;&lt; PD5 );//Port na którym są podłączone światła dzienne<br />                    PORTD |= ( 1 &lt;&lt; PD5 ); // Zamień miejscami te pozycje jeśli światło nie zapala<br />    // ------------ Koniec obsługi włączania świateł dziennych ---------------------------<br />        }<br />    }        <br />    <br />void led_out(uint16_t value)<br />{                            <br />//LED1 <br />if (value &amp; (1&lt;&lt;0)) LED1_ON ;<br />    else LED1_OFF;<br />    <br />//LED2<br />if (value &amp; (1&lt;&lt;1)) LED2_ON ;<br />    else LED2_OFF;<br />    <br />//LED3<br />if (value &amp; (1&lt;&lt;2)) LED3_ON ;<br />    else LED3_OFF;<br />    <br />//LED4<br />if (value &amp; (1&lt;&lt;3)) LED4_ON ;<br />    else LED4_OFF;   <br />    <br />//LED5<br />if (value &amp; (1&lt;&lt;4)) LED5_ON ;<br />    else LED5_OFF;   <br />    <br />//LED6<br />if (value &amp; (1&lt;&lt;5)) LED6_ON ;<br />    else LED6_OFF;   <br /><br />//LED7<br />if (value &amp; (1&lt;&lt;6)) LED7_ON ;<br />    else LED7_OFF;   <br />                   <br />//LED8<br />if (value &amp; (1&lt;&lt;7)) LED8_ON ;<br />    else LED8_OFF;   <br />                   <br />//LED9<br />if (value &amp; (1&lt;&lt;8)) LED9_ON ;<br />    else LED9_OFF;   <br />    <br />//LED10<br />if (value &amp; (1&lt;&lt;9)) LED10_ON ;<br />    else LED10_OFF;   <br />    <br />//LED11<br />if (value &amp; (1&lt;&lt;10)) LED11_ON ; <br />    else LED11_OFF;<br />    <br />//LED12<br />if (value &amp; (1&lt;&lt;11)) LED12_ON ;<br />    else LED12_OFF;   <br />}[/syntax]<br /><br />w linii 7 dołożono deklaracje nowej funkcji, zamieniono zapisy LED1_ON/LED1_OFF na wywołanie funkcji led_out z odpowiednim argumentem, a na końcu programu dodano definicje funkcji.<br />Celowo podaje wartość argumentu funkcji led_out w postaci bitowej, by było widać bezpośrednie odniesie wartości poszczególnych bitów tej liczby poszczególnym diodom.<br />Co się zmieniło - nie zapalmy kolejnej diody, ale zapalamy/gasimy wszystkie. Co więcej, zamieniamy liczbę na kombinacje zapalonych/zgaszonych diod. A jak mamy liczby, to możemy je umieścić w tablicy i po kolei odczytywać z tablicy i zapalać.gasić diody.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />Czas uruchomić przetwornik ADC. Korzystając z tego, że mamy linijkę diod możemy je wykorzystać jako wskaźnik napięcia.[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;                                           <br />#include &quot;main.h&quot;<br />     <br />void led_out(uint16_t); <br />    <br />uint8_t adc_res; <br />    <br />    int main( void ) {<br />    DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br />     <br />    DDRC&amp;=~(1&lt;&lt;PC5);PORTC&amp;=~(1&lt;&lt;PC5);    //jako wejście, bo bedzie wykorzystywany jako adc    <br />    DDRC&amp;=~(1&lt;&lt;PC4);PORTC&amp;=~(1&lt;&lt;PC4);    //jako wejście, bo bedzie wykorzystywany jako adc<br />            #define KEY1 (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1<br />     <br />                                       <br />    DDRD &amp;= ~KEY1;  // Pin portu PD0 jako wejście                                                                        <br />    //  PORTD |= KEY1;  // Podciąganie pinu klawisza do VCC (+)<br />     <br />   //   sei();<br />     <br />  <br />    //ustawienie przetwornika adc<br />    ADCSRA =   (1&lt;&lt;ADEN) //ADEN: ADC Enable (uruchomienie przetwornika)  <br />  <br />   //ADPS2:0: ustawienie preskalera, preskaler= 128                                                                                       <br />   |(1&lt;&lt;ADPS0)  <br />   |(1&lt;&lt;ADPS1)            <br />   |(1&lt;&lt;ADPS2);<br /><br /> <br />                                                                                       <br />                                                                                                                                                   <br />while ( 1 )                                                                                                                                     <br />{                                                       <br />//rozpoczęcie konwersji adc<br />ADMUX = (1&lt;&lt;REFS0) //napiecie odniesienia Vcc<br />        |(1&lt;&lt;ADLAR) //przesuniecie wyniku do lewej <br />//      |(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0); //aktywne wejscie ADC5     <br />        |(1&lt;&lt;MUX2);              //aktywne wejscie ADC4<br /><br />//należy wybrac jedna z opcji<br />_delay_ms(1);<br />ADCSRA |= (1&lt;&lt;ADSC); //uruchomienie pojedynczej konwersji         <br />while(ADCSRA &amp; (1&lt;&lt;ADSC)); //czeka na zakończenie konwersji  <br />                                                                                  <br />adc_res=ADCH;<br /><br />if(adc_res&lt;(20));                      <br />else if(adc_res&lt;((2*20))) led_out(1&lt;&lt;0);                   <br />        else if(adc_res&lt;((3*20))) led_out(1&lt;&lt;1);<br />            else if(adc_res&lt;((4*20))) led_out(1&lt;&lt;2);<br />                else if(adc_res&lt;((5*20))) led_out(1&lt;&lt;3);                              <br />                    else if(adc_res&lt;((6*20))) led_out(1&lt;&lt;4);<br />                        else if(adc_res&lt;((7*20))) led_out(1&lt;&lt;5); <br />                            else if(adc_res&lt;((8*20))) led_out(1&lt;&lt;6); <br />                                else if(adc_res&lt;((9*20))) led_out(1&lt;&lt;7); <br />                                    else if(adc_res&lt;((10*20))) led_out(1&lt;&lt;8);<br />                                        else if(adc_res&lt;((11*20))) led_out(1&lt;&lt;9);<br />                                            else if(adc_res&lt;((12*20))) led_out(1&lt;&lt;10);<br />else         <br />led_out(1&lt;&lt;11); <br /><br />//co pomiar PD3 zmienia stan    DAY_LIGHT<br />PORTD^=(1&lt;&lt;PD3);  <br />_delay_ms(250);  <br /><br />    <br />}                                       <br />}                                                                                                                                      <br />    <br />void led_out(uint16_t value)<br />{                            <br />//LED1 <br />if (value &amp; (1&lt;&lt;0)) LED1_ON ;                                                                                                       <br />    else LED1_OFF;<br />    <br />//LED2<br />if (value &amp; (1&lt;&lt;1)) LED2_ON ;<br />    else LED2_OFF;<br />    <br />//LED3<br />if (value &amp; (1&lt;&lt;2)) LED3_ON ;<br />    else LED3_OFF;<br />    <br />//LED4<br />if (value &amp; (1&lt;&lt;3)) LED4_ON ;<br />    else LED4_OFF;   <br />    <br />//LED5<br />if (value &amp; (1&lt;&lt;4)) LED5_ON ;<br />    else LED5_OFF;   <br />    <br />//LED6<br />if (value &amp; (1&lt;&lt;5)) LED6_ON ;<br />    else LED6_OFF;   <br /><br />//LED7<br />if (value &amp; (1&lt;&lt;6)) LED7_ON ;<br />    else LED7_OFF;   <br />                   <br />//LED8<br />if (value &amp; (1&lt;&lt;7)) LED8_ON ;<br />    else LED8_OFF;   <br />                   <br />//LED9<br />if (value &amp; (1&lt;&lt;8)) LED9_ON ;<br />    else LED9_OFF;   <br />    <br />//LED10<br />if (value &amp; (1&lt;&lt;9)) LED10_ON ;<br />    else LED10_OFF;   <br />    <br />//LED11<br />if (value &amp; (1&lt;&lt;10)) LED11_ON ; <br />    else LED11_OFF;<br />    <br />//LED12<br />if (value &amp; (1&lt;&lt;11)) LED12_ON ;<br />    else LED12_OFF;   <br />}[/syntax]<br />plik main.h pozostaje bez zmian<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 25 paź 2020, o 17:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2020-10-25T11:43:01+01:00</updated>
<published>2020-10-25T11:43:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229540#p229540</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229540#p229540"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229540#p229540"><![CDATA[
Ten kod pisałem, a właściwie zmieniałem  kod podany<br />przez  AndreB1 i nie chciałem wstawiać żadnych funkcji <br />Dlatego aby był dla kolegi AndreB1 jak najbardziej<br />zrozumiały <br /><br />Ten kod jak kolega sam zauważy ma wiele wad, blokuje <br />itd. <br />Następny wersja tego kodu myślę zrobić na tablicach i przerwaniach<br />będzie o wiele łatwiej  dostawić potencjometry<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 25 paź 2020, o 11:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-10-25T00:13:37+01:00</updated>
<published>2020-10-25T00:13:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229539#p229539</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229539#p229539"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229539#p229539"><![CDATA[
Trochę mnie nie było, ale tak jak u kolegi.<div class="quotetitle">AndreB1 napisał(a):</div><div class="quotecontent"><br />Ostatnio brak czasu.<br /></div><div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Z jednej strony to by było ciekawe doświadczenie takie wspólne pisanie kodu na forum<br /></div> jak najbardziej, tylko trzeba ustalic jakś porządek, bu iść w jedną stronę, a nie każdy po swojemu. Dlatego proponuje, by zmiany wprowadzać w ostatniej wersji kodu.<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Z potencjometrami będzie gorzej myślę że trzeba będzie przerobić ten cały kod i wywalić<br />delay i zamienić je ne przerwania<br /></div>W brew pozorom nie będzie to aż taki problem.<br />Złożyłem sobie płytkę testową i odpaliłem kod kolegi miki53. Kod w zasadzie działa, ale mam takie uwagi<br /> *W linii 20 jest załączenie wewnętrznego podciągania wejścia PD0 do Vcc, a na płytce (jeśli dobrze widzę) jest zrobione pociągniecie za pomocą rezystorów. Ja u siebie mam także podciągniecie za pomocą rezystorów, &quot;udające&quot; dzielnik napięcia. I przy załączonym podciągnięciu z Atmegi program mi nie działa. Działa dopiero po usunięciu tej linii.<br /> Należałoby ustalić, czy podciągniecie PD0 ma być wewnętrzne czy zewnętrzne (za pomocą rezystorów).<br /> *Jeżeli dłużej przytrzymamy przycisk, to palą się wszystkie diody, bo są od nowa zapalane, mimo iż już się palą. Można by tak na szybko dodać gaszenie diod na końcu warunku if<br /> *Przycisk nie działa za każdym razem. Jest to spowodowane delayem w części else. Po prostu delay musi odczekać swoje, by znowu było sprawdzanie wejścia. To są uroki delay'ów i ogólnie blokującego charakteru programu.<br />  <br />To co bym proponował teraz, to &quot;opakowanie&quot; w funkcje naszego efektu i umieszczenie deklaracji w pliku nagłówkowym.<br />I tak, jak na poczatku proponowałem zamiast używać zapisu np.: PORTC &amp;= ~( 1 &lt;&lt; PC1 ); użyjmy zapisu LED3_OFF. Do tego celu w pliku nagłówkowym (main.h) umieśćmy deklaracje #define LED3_OFF....  która zamieni nam w programie każde pojawienie się LED3_OFF, odpowiednia komendą PORTC&amp;=.... . I tak dla każdej diody.<br />  U mnie plik main.h wygląda następująco[syntax=c]#ifndef MAIN_H_               <br />#define MAIN_H_                <br /><br />//LED1<br />#define LED1 PC3<br />#define LED1_PORT PORTC <br />#define LED1_ON   LED1_PORT|=(1&lt;&lt;LED1)  <br />#define LED1_OFF  LED1_PORT&amp;=~(1&lt;&lt;LED1)<br /><br />//LED2<br />#define LED2 PC2<br />#define LED2_PORT PORTC <br />#define LED2_ON   LED2_PORT|=(1&lt;&lt;LED2)  <br />#define LED2_OFF  LED2_PORT&amp;=~(1&lt;&lt;LED2)  <br /><br />//LED3<br />#define LED3 PC1<br />#define LED3_PORT PORTC <br />#define LED3_ON   LED3_PORT|=(1&lt;&lt;LED3)  <br />#define LED3_OFF  LED3_PORT&amp;=~(1&lt;&lt;LED3)    <br /><br />//LED4<br />#define LED4 PC0<br />#define LED4_PORT PORTC <br />#define LED4_ON   LED4_PORT|=(1&lt;&lt;LED4)  <br />#define LED4_OFF  LED4_PORT&amp;=~(1&lt;&lt;LED4)<br /><br />//LED5<br />#define LED5 PB4<br />#define LED5_PORT PORTB <br />#define LED5_ON   LED5_PORT|=(1&lt;&lt;LED5)  <br />#define LED5_OFF  LED5_PORT&amp;=~(1&lt;&lt;LED5)      <br /><br />//LED6<br />#define LED6 PB3<br />#define LED6_PORT PORTB <br />#define LED6_ON   LED6_PORT|=(1&lt;&lt;LED6)  <br />#define LED6_OFF  LED6_PORT&amp;=~(1&lt;&lt;LED6)    <br /><br />//LED7                                      <br />#define LED7 PB2 <br />#define LED7_PORT PORTB <br />#define LED7_ON   LED7_PORT|=(1&lt;&lt;LED7)  <br />#define LED7_OFF  LED7_PORT&amp;=~(1&lt;&lt;LED7)  <br /><br />//LED8<br />#define LED8 PB1<br />#define LED8_PORT PORTB <br />#define LED8_ON   LED8_PORT|=(1&lt;&lt;LED8)  <br />#define LED8_OFF  LED8_PORT&amp;=~(1&lt;&lt;LED8)<br /><br />//LED9<br />#define LED9 PB0<br />#define LED9_PORT PORTB <br />#define LED9_ON   LED9_PORT|=(1&lt;&lt;LED9)  <br />#define LED9_OFF  LED9_PORT&amp;=~(1&lt;&lt;LED9)<br /><br />//LED10  <br />#define LED10 PD7<br />#define LED10_PORT PORTD <br />#define LED10_ON   LED10_PORT|=(1&lt;&lt;LED10)  <br />#define LED10_OFF  LED10_PORT&amp;=~(1&lt;&lt;LED10)<br /><br />//LED11<br />#define LED11 PD6<br />#define LED11_PORT PORTD <br />#define LED11_ON   LED11_PORT|=(1&lt;&lt;LED11)  <br />#define LED11_OFF  LED11_PORT&amp;=~(1&lt;&lt;LED11)<br /><br />//LED12<br />#define LED12 PD5<br />#define LED12_PORT PORTD<br />#define LED12_ON   LED12_PORT|=(1&lt;&lt;LED12)  <br />#define LED12_OFF  LED12_PORT&amp;=~(1&lt;&lt;LED12)  <br /><br />#define PORTC_COFIG (1&lt;&lt;LED1)<br /><br /><br /><br /><br />#endif  /* MAIN_H_ */[/syntax]<br />  W programie trzeba dodać #include &quot;main.h&quot;, by korzystac z pliku main.h. Teraz, jak ktoś będzie miał inny układ diod, to zmienia tylko w pliku main.h, a nie musi szukać po całym programie.<br />  Po tej zmianie plik main.c będzie wyglądał następująco:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt; <br />    #include &quot;main.h&quot;<br />     <br />     <br />     <br />    int main( void ) {<br />     <br />            DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />            PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />            DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek<br />            PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy)<br />        DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek<br />        PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br />     <br />     <br />            #define KEY1 (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1<br />     <br />     <br />            DDRD &amp;= ~KEY1;  // Pin portu PD0 jako wejście                                                                          <br />          //  PORTD |= KEY1;  // Podciąganie pinu klawisza do VCC (+)<br />     <br />            //   sei();<br />     <br />     <br />        while ( 1 ) {<br />     <br />            if ( PIND &amp; ( 1 &lt;&lt; PD0 ) ) {<br />     <br />    // ------------ Obsługa świateł dziennych ---------------------------------------------<br />                    PORTD &amp;= ~( 1 &lt;&lt; PD5 );//Port na którym są podłączone światła dzienne ( ma zgasić )<br />          //        PORTD |= ( 1 &lt;&lt; PD5 ); // Zamień miejscami te pozycje jeśli światło nie gaśnie<br />    // ------------ Koniec obsługi wyłączania świateł dziennych ---------------------------<br />     <br />                LED1_ON;<br />                _delay_ms( 30 );<br />     <br />                LED2_ON;<br />                _delay_ms( 30 );<br />     <br />                LED3_ON; <br />                _delay_ms( 30 );<br />     <br />               LED4_ON;<br />                _delay_ms( 30 );<br />     <br />                LED5_ON;<br />                _delay_ms( 30 );<br />     <br />                LED6_ON;<br />                _delay_ms( 30 );<br />     <br />                LED7_ON;<br />                _delay_ms( 30 );<br />     <br />                LED8_ON;<br />                _delay_ms( 30 );<br />     <br />                LED9_ON;<br />                _delay_ms( 30 );<br />     <br />                LED10_ON;         <br />                _delay_ms( 30 );<br />     <br />            } else  {<br />    // Dodałem delay_ms() po to aby po puszczeniu klawisza ładnie się po kolei  gasiły<br />                LED1_OFF;<br />                _delay_ms( 30 );<br />                LED2_OFF;<br />                _delay_ms( 30 );                                                               <br />                LED3_OFF;<br />                _delay_ms( 30 );              <br />                LED4_OFF;<br />                _delay_ms( 30 );<br />                LED5_OFF;<br />                _delay_ms( 30 );<br />                LED6_OFF;<br />                _delay_ms( 30 );<br />                LED7_OFF;<br />                _delay_ms( 30 );<br />                LED8_OFF;<br />                _delay_ms( 30 );<br />                LED9_OFF;     <br />                _delay_ms( 30 );<br />                LED10_OFF;<br />     <br />           }<br />     <br />                _delay_ms( 500 );// Czas po jakim ma się włączać światło dzienne<br />     <br />    // ------------ Obsługa świateł dziennych ---------------------------------------------<br />           //     PORTD &amp;= ~( 1 &lt;&lt; PD5 );//Port na którym są podłączone światła dzienne<br />                    PORTD |= ( 1 &lt;&lt; PD5 ); // Zamień miejscami te pozycje jeśli światło nie zapala<br />    // ------------ Koniec obsługi włączania świateł dziennych ---------------------------<br />        }<br />    }[/syntax]<br />U mnie to działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 25 paź 2020, o 00:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michal1210]]></name></author>
<updated>2020-10-24T18:49:40+01:00</updated>
<published>2020-10-24T18:49:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229528#p229528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229528#p229528"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229528#p229528"><![CDATA[
<div class="quotetitle">Szofer napisał(a):</div><div class="quotecontent"><br />Kolego AndreB1<br />Masz linka do stronki z podstawami w 5 częściach, poczytaj, nie jest tego dużo<br /><br /><a href="http://hobby.abxyz.bplaced.net/index.php?pid=4&amp;aid=1"  class="postlink">http://hobby.abxyz.bplaced.net/index.php?pid=4&amp;aid=1</a><br /></div><br /><br />Oj ale mi na wspomnienia się zebrało <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Też od tego zaczynałem, przeleciałem te 5 stron i tak się nakręciłem, że mi było mało. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Szukając dalej wiedzy, trafiłem na filmiki Mirka i blueboka no i tak tu zostałem już z 10 lat będzie  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Polecam tę drogę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=998">michal1210</a> — 24 paź 2020, o 18:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2020-10-24T15:26:55+01:00</updated>
<published>2020-10-24T15:26:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229520#p229520</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229520#p229520"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229520#p229520"><![CDATA[
AndreB1 przetestuj ten kod i daj znać jak działa<br /><br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br />int main( void ) {<br /><br />DDRC = 0xff;  // ustawienie całego portu C jako wyj. przez wpisanie do rejestru portu jedynek<br />PORTC = 0x00; // ustawiamy wyjścia  całego portu C w stan zero ( bo masz diody katodami do GND (masy)<br />DDRB = 0xff;  // ustawienie całego portu B jako wyj. przez wpisanie do rejestru portu jedynek<br />PORTB = 0x00; // ustawiamy wyjścia  całego portu B w stan zero ( bo masz diody katodami do GND (masy)<br />    DDRD = 0xff;  // ustawienie całego portu D jako wyj. przez wpisanie do rejestru portu jedynek<br />    PORTD = 0x00; // ustawiamy wyjścia  całego portu D w stan zero ( bo masz diody katodami do GND (masy)<br /><br /><br />#define KEY1 (1&lt;&lt;PD0)        // Tu wybieramy port dla klawisza nr 1<br /><br /><br />DDRD &amp;= ~KEY1;  // Pin portu PD0 jako wejście<br />PORTD |= KEY1;  // Podciąganie pinu klawisza do VCC (+)<br /><br />//   sei();<br /><br /><br />    while ( 1 ) {<br /><br />        if ( PIND &amp; ( 1 &lt;&lt; PD0 ) ) {<br /><br />// ------------ Obsługa świateł dziennych ---------------------------------------------<br />        PORTD &amp;= ~( 1 &lt;&lt; PD5 );//Port na którym są podłączone światła dzienne ( ma zgasić )<br />      //  PORTD |= ( 1 &lt;&lt; PD5 ); // Zamień miejscami te pozycje jeśli światło nie gaśnie<br />// ------------ Koniec obsługi wyłączania świateł dziennych ---------------------------<br /><br />            PORTC |= ( 1 &lt;&lt; PC3 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC2 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC1 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC0 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB5 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB4 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB3 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB2 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB1 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB0 );<br />            _delay_ms( 30 );<br /><br />        } else  {<br />// Dodałem delay_ms() po to aby po puszczeniu klawisza ładnie się po kolei  gasiły<br />            PORTC &amp;= ~( 1 &lt;&lt; PC3 );<br />            _delay_ms( 30 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC2 );<br />            _delay_ms( 30 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC1 );<br />            _delay_ms( 30 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC0 );<br />            _delay_ms( 30 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB5 );<br />            _delay_ms( 30 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB4 );<br />            _delay_ms( 30 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB3 );<br />            _delay_ms( 30 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB2 );<br />            _delay_ms( 30 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB1 );<br />            _delay_ms( 30 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB0 );<br /><br />       }<br /><br />            _delay_ms( 500 );// Czas po jakim ma się włączać światło dzienne<br /><br />// ------------ Obsługa świateł dziennych ---------------------------------------------<br />       //     PORTD &amp;= ~( 1 &lt;&lt; PD5 );//Port na którym są podłączone światła dzienne<br />         PORTD |= ( 1 &lt;&lt; PD5 ); // Zamień miejscami te pozycje jeśli światło nie zapala<br />// ------------ Koniec obsługi włączania świateł dziennych ---------------------------<br />    }<br />}[/syntax]<br /><br />Ps. Z potencjometrami będzie gorzej myślę że trzeba będzie przerobić ten cały kod i wywalić<br />delay i zamienić je ne przerwania <br />Ale spoko damy radę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 24 paź 2020, o 15:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Szofer]]></name></author>
<updated>2020-10-24T12:28:04+01:00</updated>
<published>2020-10-24T12:28:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229519#p229519</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229519#p229519"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229519#p229519"><![CDATA[
Kolego AndreB1<br />Masz linka do stronki z podstawami w 5 częściach, poczytaj, nie jest tego dużo<br /><br /><a href="http://hobby.abxyz.bplaced.net/index.php?pid=4&amp;aid=1"  class="postlink">http://hobby.abxyz.bplaced.net/index.php?pid=4&amp;aid=1</a><br /><br />Może coś pchniesz z wiedzą do przodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7664">Szofer</a> — 24 paź 2020, o 12:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2020-10-24T11:57:14+01:00</updated>
<published>2020-10-24T11:57:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229518#p229518</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229518#p229518"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229518#p229518"><![CDATA[
Po pierwsze nie podciągnąłeś pinu PD0 pod VCC i na tym wejściu panuje tzw. stan nieokreślony i jeśli sterujesz tym wejściem za pomocą przycisku,<br />to nie za każdym razem musi zadziałać. Sterowanie portami w pętli głównej to masz dokładnie tak jak ci napisałem wyżej w pierwszym moim poście więc nie wiem <br />dlaczego wcześniej pisałeś, że ten kod ci nie działa a teraz działa.<br />Zaś ten fragment kodu<br />[syntax=c]else  {<br />            PORTC &amp;= ~( 1 &lt;&lt; PC3 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC2 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC1 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC0 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB5 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB4 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB3 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB2 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB1 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB0 );<br /> <br /> <br /> <br />        }[/syntax]<br />zmie sobie na taki<br />[syntax=c]else  {<br />            PORTC &amp;= ~ 0xff;<br />            PORTB &amp;= ~ 0xff;<br /> <br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 24 paź 2020, o 11:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-10-24T00:17:33+01:00</updated>
<published>2020-10-24T00:17:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229514#p229514</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229514#p229514"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229514#p229514"><![CDATA[
<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />A tu kicha, ani słowa z Twojej strony<br /></div><br />Ostatnio brak czasu.<br /><div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />wstawiłem Ci próbkę kodu do przetestowania jak on działa u Ciebie<br /></div><br />Wszystkie kody podane przez kolegów nie działają u mnie poprawnie.<br />Cofnąłem się do początku i zrobiłem coś takiego <br /><br />[syntax=c]/*<br /> * main.c    ATmega8A    F_CPU = 8000000 Hz<br /> *<br /> * Created on: 2020-10-01<br /> *     Author: admin<br />*/<br />// dołączanie systemowych plików nagłówkowych<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />int main( void ) {<br />    DDRC = 0xff;<br />    DDRB = 0xff;<br /><br />    while ( 1 ) {<br /><br />        if ( PIND &amp; ( 1 &lt;&lt; PD0 ) ) {<br /><br />            PORTC |= ( 1 &lt;&lt; PC3 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC2 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC1 );<br />            _delay_ms( 30 );<br /><br />            PORTC |= ( 1 &lt;&lt; PC0 );                         <br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB5 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB4 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB3 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB2 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB1 );<br />            _delay_ms( 30 );<br /><br />            PORTB |= ( 1 &lt;&lt; PB0 );<br />            _delay_ms( 30 );<br /><br />        } else  {<br />            PORTC &amp;= ~( 1 &lt;&lt; PC3 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC2 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC1 );<br />            PORTC &amp;= ~( 1 &lt;&lt; PC0 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB5 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB4 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB3 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB2 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB1 );<br />            PORTB &amp;= ~( 1 &lt;&lt; PB0 );<br /><br /><br /><br />        }<br />    }<br />}[/syntax]<br />Teraz działa. <br />Brakuje światło dzienne na PD5 i potencjometry na PC4 i PC5.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 24 paź 2020, o 00:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2020-10-23T11:48:10+01:00</updated>
<published>2020-10-23T11:48:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229488#p229488</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229488#p229488"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229488#p229488"><![CDATA[
Kolego AndreB1 <br /><br />Chciałbym Ci pomóc w napisaniu tego twojego kodu<br />ale jak mam to zrobić kiedy wstawiłem Ci próbkę kodu <br />do przetestowania jak on działa u Ciebie <br />A tu kicha, ani słowa z Twojej strony<br /><br />Nie mam wolnego stanowiska do testów bo pracuję nad innym projektem <br />ale chętnie bym Ci pomógł tylko z twojej strony zechciej go chociaż przetestować<br />i powiedzieć co jest ok a co nie, wtedy będziemy poprawiać i polecimy dalej<br /><br />Z jednej strony to by było ciekawe doświadczenie takie wspólne pisanie kodu na forum<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 23 paź 2020, o 11:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elwood]]></name></author>
<updated>2020-10-23T01:38:54+01:00</updated>
<published>2020-10-23T01:38:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229487#p229487</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229487#p229487"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229487#p229487"><![CDATA[
Tu nie chodzi o biadolenie tylko o faktów stwierdzenie :] Jak robisz coś pod  pod swoje KONKRETNE potrzeby to zazwyczaj jest niestety tak ze jesteś pionierem w tym temacie i rzadko można się na czymś podeprzeć - a to nigdy nie jest ani łatwe ani proste ani tanie ani tym bardziej przyjemne -to nie TV gdzie blond piękności w szpilkach 10cm ogarniają temat w 15 min i ubrudzą się na nosku smarem tylko twarde życie- ja np wkładam do BMW E36 silnik V8  318 small block od Jeep Grand Cherokee - jesteś w stanie coś pomóc w temacie ?  W europie jest to z tego co wiem pierwszy projekt i nie stękam tylko powoli jadę do przodu i robię to sam małymi krokami :<br /><!-- l --><a class="postlink-local" href="https://forum.atnel.pl/topic22382.html" >topic22382.html</a><!-- l --><br />Jak czekasz na gotowca to możesz się rozczarować niestety..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2545">Elwood</a> — 23 paź 2020, o 01:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreB1]]></name></author>
<updated>2020-10-22T22:07:52+01:00</updated>
<published>2020-10-22T22:07:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229485#p229485</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229485#p229485"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229485#p229485"><![CDATA[
<div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />Weźmy sobie taki prosty programik do sprawdzania stanu przycisku (odłóżmy na razie wyświetlanie efektu)<br /></div><br />Działa.<br /><div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />Jeśli zechce kontynuować to pomogę, na ile potrafię.<br /></div><br />Dzięki. Jestem otwarty na każdą pomoc. <br /><br /><div class="quotetitle">Elwood napisał(a):</div><div class="quotecontent"><br />Ale jeżeli pracujesz w innej branży<br /></div><br />No właśnie. Jestem w podobnej sytuacji. Nie zawsze mam czas  posiedzieć przy moim projekcie.<br />Dobra, nie będę cytował większości tekstu ani BIADOLIŁ. <br />Jeśli ktoś ma ochotę i czas uczestniczyć w tym projekcie to zapraszam i z góry dziękuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21589">AndreB1</a> — 22 paź 2020, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2020-10-22T17:07:29+01:00</updated>
<published>2020-10-22T17:07:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229484#p229484</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229484#p229484"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229484#p229484"><![CDATA[
Nie mam ochoty się spierać.<br />Należałoby zapytać autora wątku o jego zdanie. Jeśli zechce kontynuować to pomogę, na ile potrafię.<br />Jeśli nie, nie ma sprawy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 22 paź 2020, o 17:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elwood]]></name></author>
<updated>2020-10-21T22:26:49+01:00</updated>
<published>2020-10-21T22:26:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229482#p229482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229482#p229482"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229482#p229482"><![CDATA[
Prawda jest taka ze da się nauczyć podstaw programowania i sklecić działający prosty program - w necie są kursy po polsku jak zacząć programować  i wyjaśnione podstawy- wiem bo sam tak zaczynałem. A z angielskim u mnie dość słabo niestety :/ Jest tylko jedna kwestia - ile masz wolnego czasu i chęci ? Możesz uczyć się za darmo z neta przez dwa czy trzy lata, albo np używanego BB idzie wyrwać za 100zł i w ciągu roku idzie to opanować oglądając poradniki, można mieć tez pomysł, odpalić komuś kilka stów i program mieć za dwa dni bez zagłębiania się w inne kwestie. Wszystko sprowadza się do tego czy sami chcemy się czegoś nauczyć i mamy na to czas czy wolimy robić to na czym się znamy i odpalić komuś parę złotych aby ogarnął to za nas...<br />Ja sam nad swoim projektem siedzę z 1,5 roku kupiłem sprzęt i książki oraz biblioteki CAN za tysiaka i z 3 książek  przeczytałem dopiero jedna a reszta sprzętu czeka  aż będę miał urlop - bo po 12h pracy w dziale utrzymania ruchu mam dość myślenia o czymkolwiek związanym z elektryka czy mechaniką...  Są ludzie co opracowali ten temat wcześniej ale po pierwsze ich rozwiązania są drogie i mi nie odpowiadają a temat jest dość niszowy więc pracuje nad swoją wersją rozwiązania problemu  którą mam zamiar później sprzedawać.<br />Ale jeżeli pracujesz w innej branży jak np medycyna/reklama/budowlanka/ubezpieczenia to poszukaj kogoś  po rodzinie i znajomych kto choć trochę ogarnia tematy techniczne i wytłumaczy i pokaże podstawy - naprawdę będzie łatwiej na początek. Wszytko da się zrobić tanio/szybko/dobrze - wybierz tylko 2 możliwości  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2545">Elwood</a> — 21 paź 2020, o 22:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-10-21T19:44:43+01:00</updated>
<published>2020-10-21T19:44:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229479#p229479</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229479#p229479"/>
<title type="html"><![CDATA[Re: Kierunkowskaz dynamiczny. Prośba o pomoc w dokończeniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23353&amp;p=229479#p229479"><![CDATA[
<div class="quotetitle">Alef2 napisał(a):</div><div class="quotecontent"><br />Zgadzam się, ze jest to marne programowanie bo zawiera delaye, jest blokujące i liniowe. Ale działa. A jak działa, to w następnych krokach można poprawić.<br /></div><br />Panie kochany - sam sobie przeczysz ... szczególnie w dalszej części wypowiedzi. Bo jeśli &quot;ALE DZIAŁA&quot; jak piszesz to dlaczego nie działa i dlaczego za każdym razem masz tak samo jak autor coraz większe problemy? <br /><br />I uwierz mi tego nie da rady w następnych krokach poprawić - idąc tą drogą pseudo programowania liniowego. Powiem więcej - wcale nie trzeba być jakimś mocno doświadczonym, żeby zacząć jednak pisać programy normalnie i nieblokująco - a próba nauki kogoś programowania takim krokami - to mniej więcej tak jak prowadzenie kogoś z zawiązanymi oczami czarną opaską na brzeg przepaści.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 paź 2020, o 19:44</p><hr />
]]></content>
</entry>
</feed>