Poprzedni temat «» Następny temat
Programowanie mikrokontrolerów AVR w języku Bascom
Autor Wiadomość
keruseykaryu
[Usunięty]

Wysłany: 2010-07-31, 17:12   

Może $eepromhex Ci pomoże. A morze jest przepastne jak ściągawka do Bascom, i by wypłynąć na szerokie wody trzeba morze poznać.
 
     
c4v2 



Dołączył: 22 Lis 2005
Posty: 407
Skąd: z przed monitora
Wysłany: 2010-08-25, 22:30   

Dzień dobry lub dobry wieczór.

W trakcie programowania mikrokontrolerów AVR często zachodzi potrzeba odmierzania odcinków czasu.
Zwykle do tego celu wykorzystywany jest jeden z zawartych w strukturze
sprzętowych TIMER'ów pracujący w trybie TMER, czyli generujący przerwanie od jego przepełnienia.
Aby uprościć sobie obliczenie wartości którą należy podstawić do Timer'a aby ten
przepełnianiał co zadany interwał czasu napisałem prosty "kalkulator" a może "arkusz".
Program został napisany w Delphi7PE.
Do obliczenia wartości jaką podstawianej do Timer należy podać dwie wartości:
    1) częstotliwość zegara systemowego (Hz);
    2) czas co jaki TIMER ma generować przerwanie (s).
Po wprowadzeniu danych program obliczy możliwe wartości zarówno dla
timer'ów ośmio jak i szesnasto bitowych we wszystkich możliwych konfiguracjach preskalera.
Wartości niemieszczące się w "zakresie liczenia timera w danej konfiguracji preskalera" nie zostaną wyświetlone w komórkach.
Wyniki prezentowane kolorem zielonym (pierwsza kolumna dla ośmio i szesnasto bitowego timer'a)
są przeznaczone do użycia jako parametr procedury "Load TimerX" w języku Bascom.
Do bezpośredniego podstawienia zawartości Timer'a przeznaczone są wartości z kolumn w których wyniki prezentowane kolorem białym.
Funkcję kropki dziesiętnej w zadawanej wartości interwału pełni przecinek.
Podziały preskalera przez dwa oraz sto dwadzieścia osiem występują tylko w niektórych mikrokontrolerach AVR, dlatego wiersze dla tych ustawień zostały wyróżnione kolorem granatowym.
Jeżeli są Osoby którym ta prosta aplikacja może okazać się pomocna to udostępniam ją w załączniku.

Z poważaniem c4v2.

AvrTimer.zip
Pobierz Plik ściągnięto 923 raz(y) 200,44 KB

 
     
Wojtek 



Dołączył: 04 Sie 2002
Posty: 2511
Skąd: --
Wysłany: 2010-08-26, 05:30   

Dla 8 bitów nie pokazuje kalkulatorek zadnych wyników.
 
     
Wojtek 



Dołączył: 04 Sie 2002
Posty: 2511
Skąd: --
Wysłany: 2010-08-26, 05:30   

Dla 8 bitów nie pokazuje kalkiulatorek zadnych wyników.
 
     
c4v2 



Dołączył: 22 Lis 2005
Posty: 407
Skąd: z przed monitora
Wysłany: 2010-08-26, 10:55   

Na moim komputerze wyświetla oto zrzuty okna aplikacji:

[ Dodano: 2010-08-26, 12:10 ]
Jeżeli dla wartości oscylatora i interwału takich jak na zrzutach okna aplikacji dla timaer'a ośmio bitowego nie wyświetla żadnych wartości to znaczy że na Pana platformie sprzętowej program nie działa poprawnie.
Jest to prawdopodobnie wina użycia zmiennych typu Extended w parametrze funkcji. Program w pierwotnej wersji rzeczywiście wyświetlał wyniki "jak chciał". Po "rozbiciu" funkcji wielokrotnie wywoływanej na kod bardziej strukturalny problem znikł, przynajmniej na moim PC. Proszę o sprawdzenie czy dla podanych
wartości oscylatora i interwału takich jak na zrzutach okna aplikacji dla timaer'a ośmio bitowego aplikacja
wyświetla wyniki. Program nie wyświetla wyniku jeżeli interwał podany przez urzytkownika jest dłuższy niż czas zliczenia przez licznik swojej pojemności przy określonym preskalerze i częstotliwości taktowania.

AvrTimer_scr02.jpg
Plik ściągnięto 14283 raz(y) 18,15 KB

AvrTimer_scr01.jpg
Plik ściągnięto 14283 raz(y) 19,74 KB

 
     
Wojtek 



Dołączył: 04 Sie 2002
Posty: 2511
Skąd: --
Wysłany: 2010-08-26, 12:23   

Dzieki - jest ok, po prostu za duzy interwał dałem dla zegara 8MHz dałem 0,0005, zamiast pomysleć. Czy da sie jakoś powiększyć wyświetlane okienko bo dla moich oczu jest troche za małe :) (rozdzielczość ekranu mam 1680x1050 prz 14" w moim laptopie), a okienka nie da sie rozciągnąć.
 
     
c4v2 



Dołączył: 22 Lis 2005
Posty: 407
Skąd: z przed monitora
Wysłany: 2010-08-26, 17:50   

Podana przez Pana wartość interwału nie jest za duża.
Q=800000 Hz
Prescale=64
T=0,0005 s
(8000000/64)*0,0005=62,5 wynik jest liczbą niecałkowitą więc odjęcie wyniku od
maksymalnej zawartości licznika również wynik rzeczywisty 256-62,5=193,5.
Wynik jako niepoprawny nie zostanie on wyświetlony.
Zwykle zależy na precyzyjnym odmierzaniu odcinka czasu, więc zaokrąglenie
rzeczywistego wyniku czy to poprzez zwykłe zaokrąglenie lub obcięcie części
ułamkowej nie wchodzi w grę. Rozwiązaniem tego problemu jest wpisanie takiej
wartości interwału aby spełniała warunki:
    1) Czas_do_odmierzania jest całkowitą wielokrotnością wpisanego interwału;
    2) Wynik działania "(Oscylator/Prescaler)*wartość" jest całkowity i mniejszy od pojemności licznika.
Mniejszy od pojemności licznika ponieważ:
Q=800000 Hz
Prescale=1
T=0,0005 s
(8000000/1)*0,0005=4000 Wynik większy od pojemności licznika.
Wynik nieprzydatny ponieważ:
256-4000=(-3744)

Wartość 0,0005 nie jest możliwa do bezpośredniego odmierzania ośmio bitowym timerem z oscylatorem 8Mhz.
Natomiast wartość 0,0001 przy preskalerze ustawionym na osiem przy tej samej częstotliwości taktowania da wynik poprawny
dla preskalera z podziałem przez osiem.
Wystarczy teraz inkrementować jakąś zmienną "do pięciu" (0.0005/0.0001=5) w przerwaniu timer'a i zadany czas zostanie odmierzony.

Co do możliwości skalowania okna to pewnie się tym zajmę, lecz będzie to trochę karkołomne gdyż komórki są klasy TLabel i trochę nieefektywne może okazać się ich skalowanie. Zmiana wielkości okna o jakiś zadany procent jest do rozważenia. Może prościej jednak będzie napisać komponent na bazie klasy TGraphic (TGraphicControl?) do prezentacji wyników. Fajna była by możliwość zaznaczania i kopiowania do schowka zawartości komórki. A jeszcze lepszym pomysłem byłoby użycie takiego kompilatora abym mógł kalkulator dodać sobie do zakładki Tools w Bascomie.
 
     
Wojtek 



Dołączył: 04 Sie 2002
Posty: 2511
Skąd: --
Wysłany: 2010-08-26, 18:32   

Dziękuję za wyczerpujące wyjasnienie :)
 
     
c4v2 



Dołączył: 22 Lis 2005
Posty: 407
Skąd: z przed monitora
Wysłany: 2010-08-29, 02:09   

Dzień dobry lub dobry wieczór.

Dodałem możliwość zmiany wymiarów okna aplikacji.
Wydaje mi się że problem za małej czcionki został rozwiązany.
Na mojej platformie sprzętowej działa...
Kopiowanie do schowka systemowego wyniku nie zostało zaimplementowane...
Kalkulator w XP też nie ma tej funkcji... :smile:

Z poważaniem c4v2.

AvrTimer.zip
Pobierz Plik ściągnięto 805 raz(y) 231,26 KB

 
     
Wojtek 



Dołączył: 04 Sie 2002
Posty: 2511
Skąd: --
Wysłany: 2010-08-29, 07:12   

Dziekuję, u mnie na Win7 Pro (32) też działa.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,06 sekundy. Zapytań do SQL: 14