Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 gru 2024, o 10:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 7 lis 2013, o 12:57 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

Przesiadam się z poczciwej '51 na AVR i boli jak ...... Od dłuższego czasu gapię się na listę rozkazów asemblera dla AVR-ków i nie mogę znaleźć rozkazu negującego bit(dla '51 był to CPL), a nie chce mi się wierzyć że takiego rozkazu nie ma. Gdyby ktoś zechciał mnie naprowadzic, było by miło :)

Poprawiłem tytuł :) - Sonix



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Help
PostNapisane: 7 lis 2013, o 13:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

EOR Rd,Rs Suma Exclusive OR zawartości rejestrów

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Help
PostNapisane: 7 lis 2013, o 13:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sie 2013
Posty: 137
Lokalizacja: śląskie
Pomógł: 13

Witam.

No nie,to się spóźniłem. :evil: a tak chciałem być #1 i podpowiedzieć, że Mirek na pewno pomoże.

Cóż mi pozostało... hm... tylko krzyczeć :roll: ,że TEMAT ZA KRÓTKI ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Help
PostNapisane: 7 lis 2013, o 13:21 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

No tak ten rozkaz rozumiem...ale np. do tej pory w przerwaniu np. co 1 sekundę wykonywałem CPL P0.0 i już ...czyli co sekundę zmieniał mi się stan na wyjściu P0.0... a w AVR widzę że trzeba trochę pokombinować ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Help
PostNapisane: 8 lis 2013, o 01:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sie 2013
Posty: 44
Lokalizacja: RFN
Zbananowany użytkownik

Pomógł: 2

woycek napisał(a):
Przesiadam się z poczciwej '51 na AVR i boli jak ...... Od dłuższego czasu gapię się na listę rozkazów asemblera dla AVR-ków i nie mogę znaleźć rozkazu negującego bit(dla '51 był to CPL), a nie chce mi się wierzyć że takiego rozkazu nie ma. Gdyby ktoś zechciał mnie naprowadzic, było by miło :)

Ja taką przesiadkę mam za sobą - generalnie nie narzekam, choć z początku mi formalnie przy tym flaki przewracało, szczególnie mnie denerwowało to, że z powodu braku miejsca w 16-bitowym rozkazie już w trakcie „produkcji” zaczęli panowie się pocić, oszczędzać i finalnie obcinać co niektóre fajne - bo wygodne - rozkazy asemblera; i tym sposobem nie znajdziesz na przykład rozkazu dodania liczby do rejestru w trybie bezpośrednim, czyli analogicznego odpowiednika rozkazu SUBI rd,K. Choć to też nie problem bo dodawanie to odjęcie odwrotności w obrębie np. jednego bajta, czyli odpowiednim knifem możesz dodać bezpośrednio liczbę do rejestru za pomocą odejmowania bezpośredniego. Również dostęp do pamięci SRAM i FLASH jest trochę pogmatwany, bo początek SRAM'u to rejestry systemowe a przy FLASH'u musisz wskaźnik zawsze pomnożyć przez dwa. No ale cóż... coś za coś, jest jednak wiele zalet tych procesorów, przede wszystkim ich szybkość jest nieporównywalna z C51 (tym standardowym, bo są też wersje przyśpieszone i o większej pamięci) oraz pojemność pamięci programu i przede wszystkim SRAM'u. W C51 masz tylko 128 lub 256 bajtów i nie dość, że kłopotliwy dostęp do tej drugiej połówki, to jeszcze w tym minimalnym RAMie musisz sobie gdzieś stos zagnieździć, i to nie mały, jeśli chcesz komfortowo pisać i wykonywać sobie podprogramy. Jest jeszcze parę innych niedogodności lub jak kto woli - kwiatków - w AVR (nazywając to tak na pierwszy rzut oka przy przesiadaniu się z innego procesora), no ale elaboratów nie mam zamiaru tutaj z wiadomych przyczyn robić.



woycek napisał(a):
No tak ten rozkaz rozumiem...ale np. do tej pory w przerwaniu np. co 1 sekundę wykonywałem CPL P0.0 i już ...czyli co sekundę zmieniał mi się stan na wyjściu P0.0... a w AVR widzę że trzeba trochę pokombinować ;)

Niekoniecznie trzeba kombinować, ani też xorować, akurat w przypadku portów wyjściowych jest do tego odpowiednio - bo nietypowo - zinterpretowany rozkaz. Załóżmy, że Twój P0.0 w C51 to PORTA0 w AVR, wtenczas, żeby zmienić jego stan (na odwrotny), wpisujesz jedynkę (i za każdym razem tylko jedynkę) do bitu tego portu poprzez SBI PINA,0. Oczywiście port musi być ustawiony jako wyjście, żeby otrzymać Twój pożądany efekt. Wtenczas tak samo jednym rozkazem możesz sobie zmieniać w przerwaniach co sekundę stan końcówki dowolnego portu. Dodam może jeszcze tylko, że normalnie rejestr PINx służy do odczytywania stanu pinu, gdy dany pin rejestru jest skonfigurowany jako wejście. W dokumentacji ATMega128 jest to togglowanie opisane tak:


Cytuj:
14.2.2 Toggling the pin

Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2013, o 12:02 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

Dziękuję pięknie "Grzesiu"....jak to ktoś już na tym forum opisał "wielki słoń przede mną...ale zjem go po kawałku" :) . A tak apropo zamigałem sobie diodką przy pomocy AVR i się cieszę jak dziecko.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2013, o 12:27 
Offline
Nowy

Dołączył(a): 25 sie 2013
Posty: 12
Pomógł: 2

Grzegorz napisał(a):
Cytuj:
14.2.2 Toggling the pin

Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.

Niestety trzeba pamiętać, że w nie wszystkich AVR jest to dostepne :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2013, o 15:29 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

2rs232 napisał(a):
Grzegorz napisał(a):
Cytuj:
14.2.2 Toggling the pin

Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.

Niestety trzeba pamiętać, że w nie wszystkich AVR jest to dostepne :(

ATtiny2313 sobie z tym radzi ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2013, o 04:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sie 2013
Posty: 44
Lokalizacja: RFN
Zbananowany użytkownik

Pomógł: 2

2rs232 napisał(a):
Grzegorz napisał(a):
Cytuj:
14.2.2 Toggling the pin

Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.

Niestety trzeba pamiętać, że w nie wszystkich AVR jest to dostepne :(


No to chyba wtenczas też nie problem, prawda? Xorujesz sobie co trzeba i pasikonik. Czterolinijkowy - czyli czterorozkazowy - przykład dla zainteresowanych podaję poniżej i myślę, że nie ma w tym wielkiej filozofii. Przy okazji wychodzi na jaw znowu to, o czym powyżej pisałem: jest rozkaz ANDI, jest rozkaz ORI, ale nie ma rozkazu EOI - chłopcy go wycięli, bo musieli łostro łoszczędać. Gdyby był, można by to załatwić trzema rozkazami. No ale wróćmy do meritum, z tego programiku można sobie też zrobić macro albo podprogram, jeżeli sytuacja pisania tego się notorycznie powtarza i/albo komuś tak wygodniej - należy jednak wziąć pod uwagę, że skok do i powrót z podprogramu zabiera też kilka ładnych cykli procesora - w czasowo krytycznych projektach może to być niewskazane, bo w nich liczyć się może każdy cykl. Oczywiście jeżeli robimy to w przerwaniach, to trzeba sobie przed wykonaniem czegokolwiek uratować rejestr stanu i rejestry, z których korzystamy, a po wykonaniu zadania ich stan przywrócić - w tym celu najwygodniej będzie korzystać ze stosu. Żeby pasowało z wcześniejszym przykładem, wybrałem tak samo bit 0 portu A. Może jeszcze jedna uwaga - jeżeli w ten sposób (programowo) modyfikujemy bity portu z dwóch różnych miejsc w programie (np. w przerwaniach i programie głównym), należy zadbać o to, żeby te programy ze sobą nie kolidowały, np. zablokować przerwania na ten czas. Może się bowiem tak zdarzyć, że ten wykonywany w programie głównym program zostanie przerwany po drugiej albo trzeciej linijce przerwaniem, które też będzie dokonywało modyfikacji bitów na porcie A, a my po powrocie z przerwania wpiszemy do portu z powrotem to, co było wcześniej zapisane i zmodyfikowane przez nas w r17, i będzie ciężki burak. Ciężki w tym sensie, bo taki błąd jest bardzo trudny do znalezienia - objawy tego feleru występują przeważnie bardzo rzadko, bo prawdopodobieństwo trafienia się przerwania w tym momencie jest bardzo małe - mowa oczywiście o programie głównym, który jest znacznie dłuższy niż tylko cztery linijki. Dlatego lepiej używać jednorozkazowej modyfikacji bitu poprzez SBI PINA,0 albo modyfikacji kilku bitów naraz za pomocą wysłania bajtu do rejestru PINA rozkazem OUT (przykład na końcu postu).

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2013, o 13:05 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

No OK.
To ja poproszę powyższy przykład, ale z użyciem nazw symbolicznych.
Czyli na początku programu deklarujemy np pin pierwszy portu A jako "Wy1". i jak teraz będzie wyglądała zmiana jego stanu :oops: :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2013, o 16:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sie 2013
Posty: 44
Lokalizacja: RFN
Zbananowany użytkownik

Pomógł: 2

woycek napisał(a):
No OK.To ja poproszę powyższy przykład, ale z użyciem nazw symbolicznych.

Który dokładnie powyższy?


woycek napisał(a):
No OK.Czyli na początku programu deklarujemy np pin pierwszy portu A jako "Wy1". i jak teraz będzie wyglądała zmiana jego stanu :oops: :?:

Analogicznie do takiego z nazwami oryginalnymi. Powiesz mi dokładnie o który fragment kodu Ci chodzi, to Ci wkleję, łącznie z liniami definicji, które powinny się najlepiej na początku programu znajdować. I napisz może też od razu z jakiego asemblera/środowiska korzystasz, bo asembler to nie asembler - w AVRach ja korzystam z Atmel Studio 6 (najnowsze wydanie).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2013, o 09:27 
Offline
Nowy

Dołączył(a): 25 sie 2013
Posty: 12
Pomógł: 2

woycek, o te przykłady chodziło?

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2013, o 10:32 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

"Grzesiu" na pokładzie AVR Studio 4.19...bo jak Ci już pisałem na priva od 2 lat podchodzę do AVR-ków jak jeż do jabłka :lol: .
"2rs232" dokładnie o to mi chodziło dzięki...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2013, o 11:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sie 2013
Posty: 44
Lokalizacja: RFN
Zbananowany użytkownik

Pomógł: 2

woycek napisał(a):
"Grzesiu" na pokładzie AVR Studio 4.19

No to generalnie chyba nie powinno być problemu co do kompatybilności. Nie wiem czy w 4.19 można sobie w zapisie bitowym oddzielać bity kreskami (0b0000_0000), no ale to już chyba sam wybadać będziesz umiał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2013, o 12:46 
Offline
Użytkownik

Dołączył(a): 24 kwi 2012
Posty: 76
Lokalizacja: Ostrów Wielkopolski
Pomógł: 6

NO sprawdzenie formy zapisu nie będzie problemem :D . Teraz morduję timery i przerwania ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2013, o 12:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sie 2013
Posty: 44
Lokalizacja: RFN
Zbananowany użytkownik

Pomógł: 2

woycek napisał(a):
bo jak Ci już pisałem na priva od 2 lat podchodzę do AVR-ków jak jeż do jabłka :lol: .

Przeca się nikomu nie pali. Ja jak robiłem swój własny programator do C51/S51, to zajęło mi to chyba pół roku - programu obsługującego to na PC jeszcze nie sfinalizowałem, choć tak ogólnie to te podstawowe funkcje ma i programowanie działa. Na dodatek wbudowałem sobie na wstępie w hardwerze taki fajny feler, nad którym tydzień siedziałem i mi ręce, nogi a nawet i kapcie opadały - przy odczytywaniu flashu zamiast poprawnego kodu miałem zawsze jakiś dziwny zbiór liczb, które szły sobie jakimś tam wzorkiem po kolei.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO