napisałem sterownik i chcę wpleść strobo, ale jak?

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

napisałem sterownik i chcę wpleść strobo, ale jak?

Post autor: matrix » 16 lis 2009, 22:16

napisałem sterownik śwaiteł do modelu który działa tak:

-> LINK DO FILMU <-

chciałbym dodać do tego strobo czyli włączanie i wyłączanie dwóch portów na przemian, ale jak to zrobić żeby nie zakłócało pracy stop - wstecz?

możecie mi pomóc, bo nie mam pomysłu.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 17 lis 2009, 10:13

To ma być na tych samych LED-ach czy chcesz dodatkowa dodać?

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 11:25

c4r0 pisze:To ma być na tych samych LED-ach czy chcesz dodatkowa dodać?
na innych. powiedzmy to maja byc wyjścia PORTD.6 i PORTB.0. światła stop i wstecz maja działać swoją drogą a miganie wyżej wymienionymi portami swoją drogą. jedno drugiego nie może zakłócać. a najlepiej jakby doszło do tego sterowanie PWM na dedykowanych do tego portach i nic niczego nie zakłócało.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 17 lis 2009, 11:34

Musisz wykorzystać timer któryś, w przerwaniu od timera zrobić zmianę stanu tych dwóch pinów. Gdy będziesz chciał włączyć to miganie to odblokowujesz przerwanie a gdy wyłączyć to zablokować przerwanie od tego timera.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 11:36

snow pisze:Musisz wykorzystać timer któryś
no tak, ale przerwanie od timera musi przerzucić wykonywanie programu do jakiejś etykiety, więc co wtedy z aktualnym wykonywaniem się programu? co z obsługą śwaiteł stop - wstecz?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 17 lis 2009, 11:43

Timery są niezależne od programu zatem nie będą ci blokować pracy głównego programu. W głównym musisz tylko napisać kiedy ma włączyć przerwanie a kiedy wyłączyć (można też zrobić w przerwaniu od timera aby po odliczeniu iluś błysków wyłączył się do póki program główny nie załączy go ponownie).

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 11:45

snow pisze:Timery są niezależne od programu
ale ja tego nie kumam. znaczy że procek może wykonywać dwie operacje na raz? tu mi będzie reagował na to co wysyłam z nadajnika czyli wyświetlał stop tudzież wstecz, a obok będzi migał dwoma portami? nie mieści mi sie to w głowie. przecież procek czyta linie programu jedna po drugiej.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 17 lis 2009, 11:50

Aby odmierzyć jakiś czas opóźnienia procesor też musi odliczyć ileś taktów zegara zatem nie zatyka się na stałe, po prostu czeka aż jakaś "zmienna" osiągnie daną wartość. W tym czasie może inne rzeczy obsługiwać jak na przykład timer. Z twojego punktu widzenia procesor się "zatyka" i nic nie robi, natomiast z punktu widzenia procesora to nie do końca tak jest.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 11:53

no bo w tej chwili miganie stroboskopami mam zrobione tak mało elegancko i to mi zatyka pracę procka na czas wyznaczony łączną długością opóźnień WAIT, a wygląda to tak:

Kod: Zaznacz cały

    reset strobol
    waitms 20
    set strobol
    waitms 100
    reset strobol
    waitms 20
    set strobol

    waitms 200

    reset strobop
    waitms 20
    set strobop
    waitms 100
    reset strobop
    waitms 20
    set strobop

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 17 lis 2009, 12:00

Możesz ustawić aby timer dawał przerwanie co 1ms, w przerwaniu zwiększać jakaś zmienną i gdy ona osiągnie jakaś wartość to wykonać dane polecenie. Następnie skasować jej wartość i odczekać aż znów doliczy to jakiejś wartości to wykonać inne. Będzie to odpowiadać twojemu waitms lecz nie będzie wpływać na główną część programu. Pamiętaj aby w przerwaniach nie dawać opóźnień programowych waitms.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 12:03

bardzo dobre rozwiązanie, tylko jak to zrobić? jakis mały przykładzik? znaczy nie trzeba wtedy po przepełnieniu się timera wywoływać etykiety tylko zwiększać wartość zmiennej i jeśli zmienna przyjmuje określoną wartość to wtedy to i to, tak?
jakis przykładzik? a co z regulacją PWM ?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 17 lis 2009, 12:07

W przypadku stroboskopu PWM będzie bezużyteczne, jedynie mógłbyś sterować jasnością świecenia. Co do przykładu to albo help albo poczekaj na kogoś kto zna Bascoma :)

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 12:09

snow pisze:W przypadku stroboskopu PWM będzie bezużyteczne, jedynie mógłbyś sterować jasnością świecenia.
i o to mi chodzi z PWM. chcę dodatkowo wykonać neony pod model i żeby diody się rozjaśniały i przyciemniały.
snow pisze:Co do przykładu to albo help albo poczekaj na kogoś kto zna Bascoma
nie bardzo wiem czego mam szukać w helpie.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 17 lis 2009, 12:12

Do przerwań ENABLE, CONFIG (na dole jest przykładowe ustawienie dla PWM) do PWMa ale do końca to pewien nie jestem.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 17 lis 2009, 12:15

snow pisze:Do przerwań ENABLE, CONFIG do PWMa ale do końca to pewien nie jestem.
to to wiem kolego snow, takie podstawy znam. potrafię uruchomic i PWM i timery, tylko nie bardzo wiem jak się za to zabrać. co po kolei? może będę kombinował, coś w końcu wyjdzie. tylko chciałbym żeby to ładnie i funkcjonalnie działało, a nie jak to z tymi WAIT.

ODPOWIEDZ