Impulsator obrotowy
Impulsator obrotowy
Jak napisać program (W Bascomie) (i/lub) jak podłonczyć impulsator obrotowy do procesora AVRtak żeby przy szybkich obrotach ośką nie gubiło impulsów ani nie zliczało w przeciwna strone. Jak kręce powoli to wszystko jest ok, ale szybkie obroty to albo gubienie impulsów albo zlicznie w przeciwną strone. Mam impulastor ten z 3 wyjściami-2 syg. a trzeci to do masy lub plusa. Wie ktoś co z tym zrobić i jak temu zaradzić?
proszę poczytać:
http://forum.mikrokontrolery.net/viewto ... =1104#1104 ( na dole jest link do artykułu z EdW
)
tasza
tasza
Dzięki za link ale... są drobne problemy. Aby mikroprosesor widział każdą zmiane stanu na pinie impulsatora wyzwalanie przerwania musi być ustawione ne zmiane zbocza (w Bascomie "Config INTx = Change") Ale niewiem jak to jest z tą konfiguracją tych przerwań? W Helpie do Bascoma pisze:
"Uwaga! W układach AVR Mega wyzwalanie przerwania na liniach INT0-INT3 odbywa sie na skutek niskiego poziomu (LOW LEWEL) i nie jest on konfigurowany."
Jednak jak kompiluje program to zmieniajac konfiguracje INT0-INT3 na inną niż "LOW LEVEL" dla nikekórych procesorów program sie skompiluje a dla niektórych nie. Od czego to zalezy? Czy to luka w Bascomie czy pomyłka w Helpie do Bascoma?
A wracając do impulsatora to nie ma jakiegoś innego sposobu niż te przerwania? Bo przerwania które możńa ustawić na "Change" teoretycznie to tylko INT4-INT7 a to jest np. AtMega128...ale bez przesady żeby stosować takiego giganta (w dodatku ciężkiego w montażu i wymagającego precyzyjniej zrobionej płytki) do zwykłego regulatora temperatury z impulsatorem obrotowym. Chyba że takie drobne udogodnienie bedzie okupione takim wielkim kosztem?:(
"Uwaga! W układach AVR Mega wyzwalanie przerwania na liniach INT0-INT3 odbywa sie na skutek niskiego poziomu (LOW LEWEL) i nie jest on konfigurowany."
Jednak jak kompiluje program to zmieniajac konfiguracje INT0-INT3 na inną niż "LOW LEVEL" dla nikekórych procesorów program sie skompiluje a dla niektórych nie. Od czego to zalezy? Czy to luka w Bascomie czy pomyłka w Helpie do Bascoma?
A wracając do impulsatora to nie ma jakiegoś innego sposobu niż te przerwania? Bo przerwania które możńa ustawić na "Change" teoretycznie to tylko INT4-INT7 a to jest np. AtMega128...ale bez przesady żeby stosować takiego giganta (w dodatku ciężkiego w montażu i wymagającego precyzyjniej zrobionej płytki) do zwykłego regulatora temperatury z impulsatorem obrotowym. Chyba że takie drobne udogodnienie bedzie okupione takim wielkim kosztem?:(
przecież napisałam tam także o drugiej metodzie...wystarczy poczytać i się zastanowić.Daymian pisze:A wracając do impulsatora to nie ma jakiegoś innego sposobu niż te przerwania?
podsumowując: uruchamiasz jakikolwiek timer, tak aby dość często zgłaszał przerwanie,
w obsłudze przerwania obserwujesz stan jednej z linii impulsatora, po wykryciu zmiany
badasz stan drugiej linii - w zależności czy to 1 czy 0 rozpoznajesz kierunek obrotu.
Daymian pisze:"Uwaga! W układach AVR Mega wyzwalanie przerwania na liniach INT0-INT3 odbywa sie na skutek niskiego poziomu (LOW LEWEL) i nie jest on konfigurowany.
strona 66, "External Interrupts"
odpowiednią konfigurację rejestru MCUCR możesz ustawić wstawką assemblerowąatmel pisze: The external interrupts can be triggered by a falling or rising edge or a low level.
This is set up as indicated in the specification for the MCU Control Register – MCUCR.
tasza
mogłabym...Daymian pisze:A mógłbyś mi takową napisać?
tyle że ja omijam Bascom z daleka, napisałam w ciemno, z helpa...
Kod: Zaznacz cały
$asm
ldi R27, $05 ' int0, int1 uczulone na dowolną zmianę stanu
!out MCUCR, R27
$end asm
lub raczej - czy bascom nie poustawia tego rejestru potem tak jak będzie sam chciał...
po prostu poeksperymentuj
Daymian pisze:a może być skonfigurowane na ZMIANE stanu?

tasza