Schönen Nachmittag,
Ich habe mir eine Erweiterungsplatine für 3 Servos gebastelt und diese auf meine ATMEGA32 Erweiterungsplatine gesteckt. Für die Servos belegt habe ich die PINS PB5(MOSI), PB6(MISO) und PB7(SCK) der ISP-Schnittstelle.
In der Asuro.c habe ich folgendes eingetragen:
Code:
/* function for Servos */
/* example code right Servo On, middle Servo On, left LED Off */
/* Servo(OFF,ON,ON); */
void Servo(unsigned char left, unsigned char middle, unsigned char right)
{
if (left || middle || right) {
DDRB |= (1 << PB5) | (1 << PB6) | (1 << PB7);
PORTB |= (1 << PB5) | (1 << PB6) | (1 << PB7);
}
if (!left) PORTB &= ~(1 << PB7);
if (!middle) PORTB &= ~(1 << PB6);
if (!right) PORTB &= ~(1 << PA5);
}
In die Asuro.h
Code:
/* function for Servos */
/* example code right Servo On, middle Servo ON, left LED Off */
/* BackLED(OFF,ON,ON); */
void Servo(unsigned char left, unsigned char middle, unsigned char right);
Und das Programm ist so
Code:
#include "asuro.h"
unsigned char i, servo_stellzeit;
void servo(unsigned char winkel){
unsigned int count=0;
do{
count++;
Servo(ON,ON,ON);
FrontLED(ON);
Sleep(winkel);
Servo (OFF,OFF,OFF);
FrontLED(OFF);
Sleep(255); Sleep(255); Sleep(255);
}while (count<servo_stellzeit);
}
int main(void) {
Init();
StatusLED(OFF);
do{
servo_stellzeit=35;
servo(51);
servo(90);
servo(51);
servo(15);
servo_stellzeit=2;
for (i=15; i<88; i+=2) servo(i);
for (i=90; i>17; i-=2) servo(i);
}while (1);
return 0;
}
Aber es bewegt sich nichts...
Könntet ihr mir bitte etwas unter die Arme greifen?
Lesezeichen