Skocz do zawartości

Manipulator sterowany potencjometrami


Pomocna odpowiedź

Nie polecam bascoma do fusów.

Nie ma to jak w pełni uzasadniona odpowiedź. Ja zablokowałem przez bascoma raz przez własną głupotę. Kolega Dotli tez teraz zablokował, bo nie podłączył kwarcu podczas zmiany, właśnie się staramy to naprawić. Bascom wg mnie jest dość dobry do zmiany, bo opisowy, tylko jak z wieloma rzeczami, trzeba być uważnym.

Ja ustawiałem fusy przez pony proga. Wszystko pracuje ok i jest na 100% dobrze. Mam kwarc. A w bascomie podaje ,że mam rezonator ceramiczny.

Pewnie jako crystal/ceramic osillator. Podłącza się go identycznie jak kwarc, jest tańszy, ale mniej dokładny. Bywa też, że ceramiczny ma 3 nóżki, z czego środkową podłącza się do gnd (i nie potrzeba tych kondensatorków 18pF, bez których i tak kwarc zwykle działa 😋 ). Czyli pokazuje dobrze. Gorzej, gdyby pokazywał external RC oscillator.

Ja ostatnio wielokrotnie zmieniałem fusy przez bascoma i nie miałem z tym żadnego problemu, tylko trzeba tam czytać co się robi i się skupić, tam wszystko pisze, grunt, żeby sobie nie ustawić jakiegoś zewnętrznego generatora, bo w tedy albo go podłączysz, albo koniec z układem.

Jeśli chodzi o fusy to na windowsie bardzo polecam burn-o-mat, ma tylko jedną wadę, jest napisany w jawie. Ale tak to jest wszystko super, jest bardzo intuicyjny.

Skoro już wspomniałeś o burnomacie Paweł, to ja (podobnie Nawyk i kilku innych userów) polecam Sinaprog - swego czasu używałem burnomata, ale strasznie długo się włącza i trzeba doinstalować osobno Avrdude, a Sinaprog jest lekki, podobnie wyposażony i instaluje się już z Avrdude - co prawda na jednym komputerze miałem z nim problem, wywalał jakiś error przy uruchomieniu albo instalacji, ale na innych jest ok.

mam rpoblem nie wiem dokladnie jak ustawic miejsce zerowe kominowałem juz z ustawieniami 60 , 90 i 120 a serwo ciagle sie wychyla w takie samo polozenie przy starcie programu. i gdy krece potencjometrem mam tylko zakres po dodatnie stronie czyli przy odczytywanej wartosci z ADC 512-1024 gdy przekrecam na odczyt wartosci ponizej 512 to serwo praktycznie nie reaguje delikatnie sie rusza tylko

[ Dodano: 24-02-2011, 13:23 ]

tutaj program :

$regfile = "m8def.dat"
$crystal = 10000000
$baud = 4800

Config Portb.1 = Output
Config Portb.2 = Output

Dim A As Integer
Dim B As Integer

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Servos = 2 , Servo1 = Portb.1 , Servo2 = Portb.2 , Reload = 8

Start Adc
Enable Interrupts


Servo(1) = 120   'wartość zerowa serwa, należy ustawić samemu
Servo(2) = 120


Do

A = Getadc(5)
B = Getadc(4)
A = A / 8.5
B = B / 8.5
A = A + 60
B = B + 60

Servo(1) = A
Servo(2) = B

Print "A:" ; A ; "  B" ; B

Loop
End
Myślę że opis jest zbędny.

Kod:

$regfile = "m8def.dat"

$crystal = 10000000

$baud = 4800

Config Portb.1 = Output

Config Portb.2 = Output

Dim A As Integer

Dim B As Integer

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Servos = 2 , Servo1 = Portb.1 , Servo2 = Portb.2 , Reload = 8

Start Adc

Enable Interrupts

Servo(1) = 120 'wartość zerowa serwa, należy ustawić samemu

Servo(2) = 120

Do

A = Getadc(5)

B = Getadc(4)

A = A / 8.5

B = B / 8.5

A = A + 60

B = B + 60

Servo(1) = A

Servo(2) = B

Print "A:" ; A ; " B" ; B

Loop

End

Odczyt z ADC jest 0-1023. Dzieląc przez 8,5 uzyskałem zakresy wychyleń mojego serwa. Serwo nie wychyla się od parametru równego 0, dlatego dodałem 60 jako minimalną wartość wychylenia dla mojego serwa - maksymalna jest wtedy 180 (wychylenie + 60). Teraz kombinuj sam.

Przeczytaj to jeszcze raz i zmień w swoim programie. To są najbanalniejsze działania matematyczne, jak nie potrafisz tego zmienić samemu to niestety nie wróżę ci świetlanej przyszłości w robotyce. Przede wszystkim CZYTAJ i MYŚL. Powodzenia.

[ Dodano: 24-02-2011, 16:58 ]

Skądinąd wiem że masz przecież megę 32 z taktowaniem 8MHz wewnętrznym, więc zamieść swój prawdziwy niedziałający kod, bo to że zamieszczasz mój działający nic ci nie da.

$regfile = "m32def.dat"
$crystal = 8000000


Config Portb.0 = Output


Dim A As Integer


Config Adc = Single , Prescaler = Auto , Reference = Avcc

Config Servos = 1 , Servo1 = Portb.0, Reload = 8

Start Adc
Enable Interrupts


Servo(1) = 120   'wartość zerowa serwa, należy ustawić samemu



Do

A = Getadc(0)

A = A / 8.5

A = A + 60


Servo(1) = A



Loop
End

Tak wygląda mój kod

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...