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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-01-30T01:12:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=12&amp;t=20106&amp;mode</id>
<entry>
<author><name><![CDATA[sertyl_8009]]></name></author>
<updated>2018-01-30T00:58:38+01:00</updated>
<published>2018-01-30T00:58:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202934#p202934</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202934#p202934"/>
<title type="html"><![CDATA[Re: Modyfikacja avt 2829]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202934#p202934"><![CDATA[
Tak napewno ale coś musi być na rzeczy bo oryginalny działający wsad zczytany z procka od avt ma o 1kb mniej niż ten który ja kompilowałem. Po wgraniu tej mojej kompilacji układ reaguje na przycisk power podczas programowania pilota dioda mruga tak jak powinna i na tym koniec po zaprogramowaniu nic nie reaguje na pilota po wgraniu wsadu zczytanego z oryginalnego procka wszystko smiga bez żadnych problemów<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18920">sertyl_8009</a> — 30 sty 2018, o 00:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zorro]]></name></author>
<updated>2018-01-29T22:40:26+01:00</updated>
<published>2018-01-29T22:40:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202914#p202914</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202914#p202914"/>
<title type="html"><![CDATA[Re: Modyfikacja avt 2829]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202914#p202914"><![CDATA[
Czy na pewno mikrokontroler to Attiny2313?<br />podczas kompilacji występuje ERROR, brak pamięci SRAM.<br /><br />Pod Atmega8 kompiluje się bez błędów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14587">zorro</a> — 29 sty 2018, o 22:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sertyl_8009]]></name></author>
<updated>2018-01-30T01:12:59+01:00</updated>
<published>2018-01-29T20:40:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202905#p202905</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202905#p202905"/>
<title type="html"><![CDATA[Modyfikacja avt 2829]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20106&amp;p=202905#p202905"><![CDATA[
Witam. czy któryś z kolegów mógłby mi pomóc z modyfikacją kodu do avt 2829 oraz jego poprawną kompilacją.<br />Chodzi mi oto aby podczas programowania przycisków zdalnego sterowania dodać jeszcze jeden który po zaprogramowaniu będzie podawał stan wysoki na jednym z wolnych pinów np 14. Dodam że moja wersja bascom nie potrafi poprawnie skompilować tego oryginalnego kodu. Niestety nie potrafię pisać programów na mikrokontrolery i nie mam czasu się tego uczyć ale poradzę sobie z wgraniem pliku do procka. Dlatego proszę o pomoc.<br />[syntax=basic4gl]$regfile = &quot;attiny2313.dat&quot;<br />$crystal = 10000000<br /><br />'-----------------------------------------------------------<br />' konfiguracje odpowiednich portow wraz z aliasami<br /><br />'wejscie ir<br />Ddrd.0 = 0<br />Portd.0 = 1<br />Ir Alias Pind.0<br /><br />'Wejscie Programujace (int1)<br />Ddrd.3 = 0<br />Portd.3 = 1<br />In_prog Alias Pind.3<br /><br />'Wejscie Power On / Off (int0)<br />Ddrd.2 = 0<br />Portd.2 = 1<br />In_pow_switch Alias Pind.2<br /><br />'silnik<br />Ddrb.5 = 1<br />Silnik_lewy Alias Portb.5<br />Ddrb.4 = 1<br />Silnik_prawy Alias Portb.4<br /><br />'kontrolka zasilania zielona<br />Ddrb.3 = 1<br />Zielona Alias Portb.3<br />Zielona = 1<br /><br />'Kontrolka Zasilania Czerwona<br />Ddrb.6 = 1<br />Czerwona Alias Portb.6<br />Czerwona = 0<br /><br />'zasilanie<br />Ddrb.7 = 1<br />Zasilanie Alias Portb.7<br />Zasilanie = 0<br /><br />'-----------------------------------------------------------<br />' konfiguracja i odblokowanie przerwań<br /><br />Config Timer0 = Timer , Prescale = 8<br />Config Timer1 = Timer , Prescale = 64<br />Config Int0 = Low Level<br />Config Int1 = Low Level<br />On Timer0 Ftimera<br />On Timer1 Zatrzymaj Nosave<br />On Int0 Pow_switch Nosave<br />On Int1 Prog Nosave<br />Enable Interrupts<br />Enable Timer0<br />Enable Timer1<br />Enable Int0<br />Enable Int1<br /><br />Config Watchdog = 2048<br /><br />'-----------------------------------------------------------<br />' zmienne pamieci EEPROM<br /><br />Dim V_eram(37) As Eram Byte<br />Dim V2_eram(37) As Eram Byte<br />Dim V3_eram(37) As Eram Byte<br /><br />Dim V_i_eram(5) As Eram Byte                                '0 - bajt pojedynczy, 1 - bajt podwójny<br />Dim V2_i_eram(5) As Eram Byte<br />Dim V3_i_eram(5) As Eram Byte<br /><br />'----------------------------------------------------------<br />' zmienne pamieci RAM<br /><br />Dim A(37) As Byte                                           'bufor dla kodu w pamięci RAM<br />                                                             ' (bezpośredni zapis w EEPROM jest nie możliwy ze<br />                                                             'wzgledu na powolność zapisu w tej pamiędci)<br />Dim V_i(5) As Byte                                          'bufor dla bitow informujacych o podwojnosci bajtu<br />                                                             '0 - bajt pojedynczy, 1 - bajt podwójny<br /><br />Dim Licznik_pom As Byte                                     'licznik zliczacy ilosc probek czasu na czas trwana 0 lub 1<br /><br />Dim I As Byte                                               'zmienne &quot;i&quot; i &quot;j&quot; okreslaja pozycje w pamieci RAM i EEPROM<br />Dim J As Byte                                               'gdzie zostanie wpisana informacja czy bajt danych<br />                                                            'bedzie zawieral informacje podwojna czy pojedyńcza<br />Dim Index As Byte                                           'zmienna indeksuje zmienna A<br />Dim Zero As Byte                                            'zawiera informacje czy poprzednio byl impuls czy przerwa<br />Dim Zapis As Byte                                           'zmienna zawiera liczby od 0 - 3 i przy zapisie okresla<br />                                                            'jakiej instrukcja jest aktualnie odbierana<br />Dim Verified As Bit                                         'zawiera 1 jesli rozpoznano jaka kolwiek instrukcje<br />Dim Command As Byte                                         'zawiera numer odebranej komendy 1, 2 lub 3<br /><br />Dim Bufor As Byte                                           'zawiera dlugosc impulsu lub przerwy wczytanej z EEPROM<br />Dim Bufor2 As Byte                                          'zawiera zakodowana informacje z pamieci EEPROM<br />                                                            'o podwojnosci bajtow rozkazow<br /><br />'-----------------------------------------------------------<br />' zerowanie zmiennych uruchomienie timera 0 i przejscie do<br />' nieskonczonej petli<br /><br /><br />Zero = 0<br />Zapis = 0<br />Verified = 0<br /><br /><br />Start Timer0<br /><br />Do<br />   Idle<br />Loop<br /><br />'-----------------------------------------------------------<br />'f-cja &quot;zeruje&quot; indeksy tablic<br /><br />Clear_indexes:<br />   I = 1<br />   J = 255<br />   Index = 0<br />Return<br /><br />'-----------------------------------------------------------<br />' f-cja przesuwa indeksy o &quot;jeden&quot; w gore,<br />' znaczenia indeksow zostaly opisane przy okazji<br />' omawiania f-cji Zapis<br /><br />Shift_indexs:<br />         Incr J<br />         If J = 8 Then<br />            J = 0<br />            Incr I<br />         End If<br />         Incr Index<br />Return<br /><br />'-----------------------------------------------------------<br />' f-cja &quot;zeruje&quot; bajt danych umozliwiajac wpisanie poprawne<br />' nowej informacji<br /><br />Clear_bajt:<br />         A(index) = 0                                       'wyczysc caly bajt<br />         V_i(i).j = 1                                       'udostepnij mozliwosc zapisyu dwoch malych liczb<br />Return<br /><br />'-----------------------------------------------------------<br />' f-cja koduje odebrana dlugosc impulsu (lub przerwe pomiedzy<br />' impulsami) i zapisuje tymczasowo do pamieci RAM. Zapis i<br />' weryfikacja z pamiecia EEPROM trwa za dlugo i bedzie<br />' wykonana po odczytaniu calego rozkazu.<br />'  - zmienna Licznik_pom zawiera dlugosc impulsu<br />'    (lub przerwy pomiedzy impulsami)<br />'  - tablica A(index) reprezentuje przestrzen w pamieci RAM<br />'    do ktorej nastepuje tymczasowy zapis rozkazu<br />'  - tablica V_i(i).j zawiera informacje czy<br />'    bierzacy bajt z tablicy A(index) zawiera 2 krotkie<br />'    liczby, czy jedna dluga (kazdy bit tejtablicodpwiada<br />'    odpowiedniemu bajtowi tablicy A(index))<br /><br />Zapisz:<br /><br />   'jesli dlugosc impulsu (lub przerwy) przekracza 16 jednostek czasu to musi on zajac caly bajt<br />   If Licznik_pom &gt;= 16 Then<br /><br />      If A(index) = 0 Then                                  'jesli biezacy bajt w pamieci RAM jest pusty<br /><br />         A(index) = Licznik_pom                             'wpisz bajt<br />         V_i(i).j = 0                                       'oznaczenie ze caly bajt zawiera pojedyncza liczbe<br />         Gosub Shift_indexs                                 'przejdz do kolejnego bajtu<br />         Gosub Clear_bajt                                   'wyczysc ten bajt<br /><br />      Else                                                  'jesli biezacy bajt choc czesciowo jest zapelniony<br /><br />         Gosub Shift_indexs                                 'przejdz do nastepnego bajtu<br />         A(index) = Licznik_pom                             'zapisz zawartosc zmiennej pomocniczej do tablicy<br />         V_i(i).j = 0                                       'oznacz ze cały bajt zawiera pojedyncza liczbe<br />         Gosub Shift_indexs                                 'przejdz do kolejnego bajtu<br />         Gosub Clear_bajt                                   'wyczysc ten bajt<br /><br />      End If<br /><br />   'jesli dlugosc impulsu (lub przerwy) NIE przekracza 16 jednostek czasu to moze on zajac tylko polowe bajtu<br />   Else<br /><br />         'poniewaz jesli bajt zostaje calkowicie zapelniony to zawsze nastapuje przejscie do natepnego bajtu<br />         'dlatego nie ma potrzeby sprawdzena bajtu na wypadek w ktorym caly bajt bylby pelny<br /><br />         If A(index) &lt; 16 And A(index) &gt; 0 Then             'jesli biezacy bajt jest czesciowo zapelniony<br /><br />            Shift A(index) , Left , 4                       'przesuń stara czesc do gory (przesuniecie<br />                                                            'bierzacej zawartosci bajt o 4 pozycje w lewo)<br />            A(index) = A(index) + Licznik_pom               'dodaj do biezacego bajtu nowa liczbe<br />            Gosub Shift_indexs                              'przejdz do kolejnego pustego bajtu<br />            Gosub Clear_bajt<br /><br />         Else                                               'jesli caly bajt pusty<br /><br />           A(index) = Licznik_pom                           'wpisz liczbe do bajtu<br />           '!!! brak przejscia do kolejnego bajtu bo bajt moze pomiescic jescze jedna krotka liczbe<br /><br />         End If<br /><br />   End If<br /><br />   Licznik_pom = 0                                          'zacznij zliczanie czasu od nowa<br />Return<br /><br />'-----------------------------------------------------------<br />' GLOSARIUSZ<br />'<br />' f-cja - funkcja lub procedura jezyka BASIC<br />' bajt - bajt tablicy A o indeksie Index (ten do ktorego<br />'        nastepuje aktualnie zapis czasu trwania przerwy lub<br />'        impulsu)<br />' pusty bajt - bajt zawierajacy wartosc 0<br />' bajt czesciowo zapelniony - bajt zawierajacy wartosc<br />'                             mniejsza od 16<br />' pelny bajt - bajt zawierajacy wartosc wieksza lub rowna 16<br />' krotka/mala liczba - liczba mniejsza od 16<br />' dluga/pojedyncza liczba - liczba wieksza lub rowna 16<br /><br /><br />Pod_porownaj:<br />   If Bufor = A(index) Then<br />      Verified = 1<br />   End If<br />Return<br /><br />Porownaj:<br />   Gosub Pod_porownaj<br />   Incr Bufor<br />   Gosub Pod_porownaj<br />   Decr Bufor<br />   Decr Bufor<br />   Gosub Pod_porownaj<br />   Incr Bufor<br />Return<br /><br />Ftimera:<br /><br />   Reset Watchdog<br /><br />   'odczyt zera<br />   If Ir = 0 Then<br /><br />      If Zero = 1 Then                                      'zmiana stanu z 1 na 0<br /><br />         Gosub Zapisz                                       ' zapis czasu trwania poprzedniej &quot;1&quot; do pamieci<br />         Zero = 0                                           'odteraz liczy czas trwania impulsu &quot;0&quot;<br /><br />         Reset Watchdog<br /><br />      End If<br /><br />   End If<br /><br />   'odczyt jedynki<br />   If Ir = 1 Then<br /><br />      If Zero = 0 Then                                      'zmiana stanu z 0 na 1<br /><br />         Gosub Zapisz                                       ' zapis czasu trwania poprzedniego &quot;0&quot; do pamieci<br />         Zero = 1                                           'odteraz liczy czas trwania impulsu &quot;1&quot;<br />         Timer1 = 0                                         'zresetuj timer1<br /><br />      End If<br /><br />   End If<br /><br />   Incr Licznik_pom<br /><br />                                          'jesli odczytano choc jeden impuls to<br />   If Licznik_pom &gt;= 50 Or Index = 37 Then<br /><br />      If Index &gt; 5 Then<br /><br />         If Zapis &gt; 0 Then<br /><br />            For I = 1 To 37<br />               Select Case Zapis<br />                  Case 1 : V3_eram(i) = A(i)<br />                           Stop Watchdog<br />                  Case 2 : V2_eram(i) = A(i)<br />                  Case Else : V_eram(i) = A(i)<br />               End Select<br />               Waitms 10<br />            Next I<br /><br />            For I = 1 To 5<br />               Select Case Zapis<br />                  Case 1 : V3_i_eram(i) = V_i(i)<br />                  Case 2 : V2_i_eram(i) = V_i(i)<br />                  Case Else : V_i_eram(i) = V_i(i)<br />               End Select<br /><br />               Waitms 100<br />               Zielona = Not Zielona<br /><br />            Next I<br />            Zielona = 1<br /><br />            Decr Zapis<br /><br />         Else<br /><br />            Licznik_pom = Index                             'ilosc odebranych sygnalow bedzie jeszcze potrzebna<br /><br />            For Command = 1 To 3<br /><br />               'I = 1<br />               'J = 255<br />               'Index = 0                                    'ustaw na poczatku<br />               Gosub Clear_indexes<br /><br />               Do                                           'dopuki to jest dobry sprawdzaj dalej<br /><br />                  Gosub Shift_indexs                        'kolejny bajt do porownania<br />                  Verified = 0                              'zakladam wstepnie ze odczytany kod jest błedny<br /><br />                  Select Case Command<br />                     Case 3 : Bufor = V_eram(index)         'odczyt wzorca z pamieci eeprom do bufora<br />                              Bufor2 = V_i_eram(i)<br />                     Case 2 : Bufor = V2_eram(index)        'odczyt wzorca z pamieci eeprom do bufora<br />                              Bufor2 = V2_i_eram(i)<br />                     Case Else : Bufor = V3_eram(index)     'odczyt wzorca z pamieci eeprom do bufora<br />                              Bufor2 = V3_i_eram(i)<br />                  End Select<br /><br />                  If Bufor2.j = 0 Then                      'jesli to liczba pojedyncza poprostu przeprowadz porownanie<br /><br />                     Gosub Porownaj<br /><br />                  Else                                      'innaczej uwzglednij takze &quot;podwojność&quot; bajtu<br /><br />                     Gosub Porownaj<br />                     Bufor = Bufor + &amp;B00010000<br />                     Gosub Porownaj<br />                     Bufor = Bufor - &amp;B00100000<br />                     Gosub Porownaj<br /><br />                  End If<br /><br />               Loop Until Verified = 0 Or Index = Licznik_pom       'jesli jednak bajt był błedny lub sprawdzono wszystko<br />                                                                'to zakoncz<br />               If Verified = 1 Then<br /><br />                  Select Case Command<br />                     Case 1 : If Zielona = 0 Then<br />                              Silnik_prawy = 1              'pb5<br />                              End If<br />                              Silnik_lewy = 0<br />                              Start Timer1<br />                     Case 2 : If Zielona = 0 Then<br />                              Silnik_lewy = 1<br />                              End If<br />                              Silnik_prawy = 0              'pb5<br />                              Start Timer1<br />                     Case Else : Gosub Pow_switch<br />                  End Select<br /><br />                  Exit For<br /><br />               End If<br /><br />            Next Command<br /><br />         End If<br /><br />      End If<br /><br />      Licznik_pom = 0<br />      'I = 1<br />      'J = 255<br />      'Index = 0<br />      Gosub Clear_indexes<br /><br /><br /><br />    End If<br /><br />Return<br /><br />Pow_switch:<br />   Waitms 10<br />   If In_pow_switch = 0 Then<br /><br />      Zielona = Not Zielona<br />      Czerwona = Not Czerwona<br />      Zasilanie = Not Zasilanie<br />      Wait 1<br /><br />   End If<br />Return<br /><br />Prog:<br />   Waitms 10<br />   If In_prog = 0 Then<br /><br />      Zielona = 1<br />      Czerwona = 0<br />      Zasilanie = 0<br /><br />      Licznik_pom = 0<br />      'I = 1<br />      'J = 255<br />      'Index = 0<br />      Gosub Clear_indexes<br />      V_i(i).j = 0<br />      Zero = 0<br />      Zapis = 3<br /><br />   End If<br />Return<br /><br />Zatrzymaj:<br />   Stop Timer1<br /><br />   Silnik_lewy = 0<br />   Silnik_prawy = 0                                         'pb5<br />Return[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18920">sertyl_8009</a> — 29 sty 2018, o 20:40</p><hr />
]]></content>
</entry>
</feed>