Znalazłem na forum kod dostosowałem do swoich potrzeb:
no i oczywiście nie działa. Tzn serwo ustawia się na środku ale nie reaguje na przyciski. Jak przed pętlą wstawiłem p=1200 to obróciło się max w jedną stronę jak wstawię dwie wartości p przedzielone delajem 3 sek to serwo i tak widzi pierwszą i ostatnią wartość. Sprawdziłem też częstotliwość na pinie D wynosi 50 Hz czyli ok ale wypełnienie jest 50% !!! I następny problem: podstawiałem różne wartości p. Przy 1200 wychylenie jest max w lewo. Natomiast w prawo udaje się skręcić o jakieś 30 stopni co odpowiada p=500 dalsze zmiejszanie p nic nie daje.
Proszę o pomoc, wskazówki i rady.
Dodam, że testowałem większość programów do sterowania serwami i w większości nie działają. Także nie działa config servos w Bascomie. Albo ja nie wiem jak dobrać reload i wartości wychylenia serwa.
![[Atmega 8][C] Niedziałające serwo again [Atmega 8][C] Niedziałające serwo again](https://obrazki.elektroda.pl/61_1257445293_thumb.jpg)
/* Test serwo*/
/* Programik przykladowy */
/* typ uC: ATmega8 1MHz */
/* licznik/timer1 w trybie PWM */
/* Sygnal impulsowy (50Hz) na wyprowadzeniu PB1(OC1A) */
/* Przyciski sterujace szerokoscia impulsu przylaczone miedzy PD2 i mase oraz PD3 i mase */
#define F_CPU 1000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <avr/signal.h>
int main(void)
{
int p = 750;
DDRD = 0x00;
PORTD = 0x0c;
DDRB = 0x02;
PORTB = 0x02;
ICR1 = 10000;
OCR1A = p;
TCCR1A = 0x80;
TCCR1B = 0x11;
for (;;)
{
if(bit_is_clear(PIND, 2))
{
p+=50;
if(p > 1200) p=1200;
OCR1A=p;
loop_until_bit_is_set(PIND, 2);
}
if(bit_is_clear(PIND, 3))
{
p-=50;
if(p < 500) p=500;
OCR1A=p;
loop_until_bit_is_set(PIND, 3);
}
}
}no i oczywiście nie działa. Tzn serwo ustawia się na środku ale nie reaguje na przyciski. Jak przed pętlą wstawiłem p=1200 to obróciło się max w jedną stronę jak wstawię dwie wartości p przedzielone delajem 3 sek to serwo i tak widzi pierwszą i ostatnią wartość. Sprawdziłem też częstotliwość na pinie D wynosi 50 Hz czyli ok ale wypełnienie jest 50% !!! I następny problem: podstawiałem różne wartości p. Przy 1200 wychylenie jest max w lewo. Natomiast w prawo udaje się skręcić o jakieś 30 stopni co odpowiada p=500 dalsze zmiejszanie p nic nie daje.
Proszę o pomoc, wskazówki i rady.
Dodam, że testowałem większość programów do sterowania serwami i w większości nie działają. Także nie działa config servos w Bascomie. Albo ja nie wiem jak dobrać reload i wartości wychylenia serwa.