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



Teraz jest 13 cze 2026, o 15:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 5 sty 2015, o 02:07 
Offline
Nowy

Dołączył(a): 05 sty 2015
Posty: 5
Pomógł: 0

Jako że jestem tutaj nowy, chciałbym Wszystkich serdecznie pozdrowić i się przywitać.
Czekam aktualnie na zamówioną książkę i programator ale nie mogłem się już doczekać odpowiednich informacji więc zadaję pytanie od razu tu na forum:

Załóżmy że mam taki kod:

W związku ze zignorowaniem prośby źle umieszczony kod został usunięty - Zielono-Różowy J.

Pytania:
1. Czy instrukcja : OCR2=(133*wypełnienie)/100; wymusza dzielenie bez reszty ?
2. Czy AVR łyknie to : OCR2=133-OCR2; czytałem że OCR2 jest R/W więc moim zdaniem powinien
3. Czy taki algorytm z przełączaniem w obsłudze przerwania nie będzie się rozjeżdżać ?
4. Teoretycznie pomiędzy bitami ramki nie mam żadnej przerwy, czy tak też jest w RC5 ?
5. Jak podejść do tego tematu jeśli kod zawarty w procedurze obsługi przerwania będzie zbyt długi, na tyle długi że okaże się że zanim obsługa tego przerwania się zakończy przyjdzie to samo następne ? Rozumiem że musiałbym program pisać w nieco innej koncepcji niż sobie założyłem. Za bardzo jednak nie mogę wymyśleć tej koncepcji.
Założenie jest także takie że absolutnie nie chcę (i nie lubię) korzystać z żadnych delay'ów a jedynie z przerwań.

Stosuję Atmega8 i chciałbym zrobić barierę podczerwieni do alarmu samochodowego. Nadajnik + odbiornik obsługuje ten sam procek, dodatkowo obsługuje on po I2C (tj. TWI) cyfrowy moduł przyspieszenia ADXL345, tak że każda zmiana przyspieszenia w dowolnej z trzech osi o krytyczną wartość wyzwoli mi alarm.

On tam ma trzy liczniki, ale nie wiem czy w obsłudze TWI nie jest któryś z nich wykorzystywany, to przede mną dopiero :)
Jeśli jest, mamy do dyspozycji pozostałe dwa. Podejrzewam bowiem, że aby zrobić nadawanie całej ramki, i to nie tylko takiej jak ja chcę (czternaście jedynek) to trzeba angażować nie jednego a dwa liczniki.

Teoretycznie możnaby wykorzystać tylko ten jeden licznik, ale ograniczeniem wydaje się być ilość instrukcji w tym przerwaniu które musiałby obsłużyć uC i to nie później niż do momentu w którym przychodzi kolejne przerwanie.
Natomiast jak to zrobić profesjonalnie to ja niewiem i stąd ten cały wywód :) help please.

Ja rozumiem również że do takiego czegoś jak alarm może nie jest potrzebne wysyłanie "danych" ale ja już chcę to wiedzieć na przyszłość bo pewnie kiedyś człowiek będzie chciał zrobić coś na zdalne sterowanie.

W środę będę miał książkę, eclipsa, toolchainy (może dwa jak dobrze pójdzie) i inne zabawki :) Ale z ciekawości nie wytrzymałem już dziś stąd pytania.

Pzdr,
Adam Zadęcki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2015, o 02:18 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2015, o 02:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

1. Tak
2. Tak
3. Nie wiem co masz na myśli pisząc o "rozjeżdżaniu". Jeżeli chodzi o czasy to wszystko zależy od koncepcji algorytmu, a jeśli o stabilność programu to będzie ok.
4. http://en.wikipedia.org/wiki/RC-5#Syste ... mand_Codes
5. Kolejne przerwanie zostanie obsłużone praktycznie zaraz po zakończeniu poprzedniego (dokładnie z przesunięciem jednej instrukcji asemblera). W efekcie można będzie odnieść wrażenie, że uC się "dziwnie" zawiesił.

Procedury przerwaniowe powinny wykonywać się jak najkrócej, a jeśli nie ma innej możliwości to trzeba zmienić koncepcję albo uC na mocniejszą jednostkę, która jest w stanie wykonać większą część programu w tym samym czasie.
Piszę oczywiście bardzo ogólnikowo, bo bardzo wiele rzeczy (tym bardziej podstawowych) da się zrealizować przy użyciu nawet niewielkich częstotliwości taktowania.

Jasna sprawa, że np. jeśli przerwanie od przepełnienia licznika generowane by było co 1ms, a w nim chcielibyśmy wysłać jakąś komendę przez dowolny interfejs, i oczekiwać w tym przerwaniu na odpowiedź, wiedząc że przyjdzie ona za 1,5ms, to zawsze będziemy "w plecy" o te 0,5ms i taki program jest z założenia nietrafiony.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2015, o 14:16 
Offline
Nowy

Dołączył(a): 05 sty 2015
Posty: 5
Pomógł: 0

Dzięki za odp.
Czy kolega lub ktokolwiek inny mógłby mi wyliczyć jeszcze ile cykli zegara zajmie wykonanie poniższego podprogramu :

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


Zmienna wsk jest typu int. Obiecuję że to już ostatnie pytanie tego typu, w środę będę miał Eclipsa to będę oglądał sobie kod w asemblerze wygenerowany przez kompilator i sam takie rzeczy będę liczył.



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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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