Witam!
Napisałem program który moim zdaniem powinien działać tak samo, a nie działa. Byłbym wdzięczny gdyby ktoś mógł rzucić na to okiem...
Program służy do obsługi serw bez użycia timerów. Dla ATMega16.
1 przypadek, działający:
Serwo ładnie ustawia 90 st.
W tym przypadku jednak już nie działa:
tym razem serwo wychyla się maksymalnie w jedną stronę ;/
Dodam tylko, że do testów podłączyłem diodę do PD7. W pierwszym przypadku blado się świeciła. Natomiast w drugim mruga tak, że jest to widoczne dla oka.
Ponadto w pierwszym przypadku program wgrywa się na ATMegę kilka sekund... w drugim kilkadziesiąt.
pozdrawiam
Regulamin, punkty 8.3 i 11.2. Temat poprawiłem.
Przeniosłem z "Programowanie ogólne"
Pozdrawiam,
Dr.Vee
Napisałem program który moim zdaniem powinien działać tak samo, a nie działa. Byłbym wdzięczny gdyby ktoś mógł rzucić na to okiem...
Program służy do obsługi serw bez użycia timerów. Dla ATMega16.
1 przypadek, działający:
#define F_CPU 1000000ul
#define SBI(port,bit) (port)|= (1 << (bit))
#define CBI(port,bit) (port) &= ~(1 << (bit))
#include <util/delay.h>
#include <avr/io.h>
void powtarzaj_15(int ile){
volatile long unsigned int i;
for(i=0;(i<ile);i++){
SBI(PORTD,PD7);
_delay_us(1500);
CBI(PORTD,PD7);
_delay_us(18500);
}
}
int main(void){
SBI(DDRD,PD7);
while(1){
powtarzaj_15(25);
}
return 0;
}Serwo ładnie ustawia 90 st.
W tym przypadku jednak już nie działa:
#define F_CPU 1000000ul
#define SBI(port,bit) (port)|= (1 << (bit))
#define CBI(port,bit) (port) &= ~(1 << (bit))
#include <util/delay.h>
#include <avr/io.h>
void powtarzaj(int ile,int wyp,int res){
volatile long unsigned int i;
for(i=0;(i<ile);i++){
SBI(PORTD,PD7);
_delay_us(wyp);
CBI(PORTD,PD7);
_delay_us(res);
}
}
int main(void){
SBI(DDRD,PD7);
while(1){
powtarzaj(25,1500,18500);
}
return 0;
}
tym razem serwo wychyla się maksymalnie w jedną stronę ;/
Dodam tylko, że do testów podłączyłem diodę do PD7. W pierwszym przypadku blado się świeciła. Natomiast w drugim mruga tak, że jest to widoczne dla oka.
Ponadto w pierwszym przypadku program wgrywa się na ATMegę kilka sekund... w drugim kilkadziesiąt.
pozdrawiam
Regulamin, punkty 8.3 i 11.2. Temat poprawiłem.
Przeniosłem z "Programowanie ogólne"
Pozdrawiam,
Dr.Vee