Die Servosteuerung ins in der t_on zeit(impulsrate) versteckt
Ja der AD Wandler zeigt was auf demLCD An aber der Servo beginnt nicht sich zur Startposition zu bewegen und loszufahren
Die Servosteuerung ins in der t_on zeit(impulsrate) versteckt
Ja der AD Wandler zeigt was auf demLCD An aber der Servo beginnt nicht sich zur Startposition zu bewegen und loszufahren
Dann kann dir aber auch keiner helfen. Verstecken ist ganz schlecht wenn man Hilfe benötigt.Die Servosteuerung ins in der t_on zeit(impulsrate) versteckt
Hast du denn eine Servoansteuerung schon einmal am Laufen gehabt? Wenn nicht, dann versuch das mal als erstes. Im RN Wissen gibts zu den Servos zB das hier
http://www.rn-wissen.de/index.php/Servos
Da hast du dann auch gleich ein C Beispiel dabei.
sast
雅思特史特芬
开发及研究
Also
#define smin 300 //Impulsdauer min 0,6ms (Endstellung links)
#define smax 1350 //Impulsdauer max 2,5ms (Endstellung rechts)
und dann wird t_on = smin
und solange smax nicht erreicht wird zählt er zu t_on 1 dazu
Der servo soll also erst zu smin fahren und von dort immer 1 dazu in richtung Endstellung
Was man hier besonders gerne sieht sind Doppelpost...und noch besser sind DreifachpostsBitte nächstes Mal nur einmal posten.
Bin zwar kein Admin, aber ich sag das jetzt mal so.
Frage bitte einen Admin ob er Deinen Post hier in den C-Bereich verschiebt. Und Deine anderen beiden ggf löscht - bevor jemand darauf schreibt.
Poste Doch bitte den Code direkt hier rein. Ich z.B lade ungern einfach solche Daten runter.
Ok, ja ich wusste nicht ob mein post übernommen wurde![]()
Lösche die anderen gleich also hier kommt der Code:
#include <avr/io.h> // Headerdatei des Controllers
#include <zeit.h> // Headerdatei für Zeitverzögerungen
#include <adc.h> // Headerdatei des Analog-Digital-Wandlers
#include <myLcd.h> // Headerdatei des LC-Displays
unsigned int t_on; // Variablen für die Dauer des t_on - Anteils
unsigned int t_off = 15; // Variable für die Dauer des t_off - Anteils
unsigned int aktuell;
unsigned int alterwert ;
unsigned int postion_hell;
unsigned int maximum;
unsigned int adcwert; // Variable für den gewandelten Analogwert
#define smin 300 //Impulsdauer min 0,6ms (Endstellung links)
#define smax 1350 //Impulsdauer max 2,5ms (Endstellung rechts)
int main(void)
{
DDRB |= 0b00000010; // Port B Pin 1 als Ausgang festlegen
adc_initialisieren (); // AD-Wandler vorbereiten
lcd_initialisieren ();
t_on = smin; // t_on wird zu smin
while(1)
{
if (t_on < smax) // wenn Maximalwert noch nicht überschritten
{
t_on++; // Timer-Vergleichwert vergrößern
aktuell = adc_lesen(5); // aktuell ist der aktuelle AdcWert
lcd_zahl(1,0,aktuell,5);
alterwert = aktuell;
PORTB |= (1<<PB1);
zeit(t_on);
PORTB &= ~(1<<PB1);
zeit(t_off);
if (aktuell > alterwert) //aktueller Wert größer als Alterwert
{
maximum = aktuell; // Das Maximum ist dann der Aktuelle Wert
postion_hell = t_on; // Hellste Postion ist dann t_on
}
}
if (t_on >= smax) // Wenn T_on größer/gleich smax ist starte
{
while(1)
{
PORTB |= (1<<PB1);
zeit(postion_hell);
PORTB &= ~(1<<PB1);
zeit(t_off);
}
}
}
}
Hallo,
möchte im Forum gerne helfen. Habe mich aber schon oft ein „Ei“ gelegt, da ich nicht weis, welche Hartware verwendet wird. Hast du ein „Arduino“ und schriebst dein Projekt vielleicht noch mit „Scratch“ kann ich nur empfehlen wende dich an diese Experten.
Findest diese im Forum.
Mit freundlichen Grüßen
fredred
Nein ich habe ein Atmega168 und Atmel 6.1
Wenn es geht solle man das Servosignal per Timer Erzeugen. Für 2 Kanäle kann man bei den meisten µCs einfach Hardware PWM von timer 1 nutzen. So ist da Servosignal vom Rest des Programms unabhängig.
Da ich nur Grundlagen beherrsche und ich überhaupt noch nicht mit Timern gearbeitet habe und am Montag Abgabe ist wird das schwierig![]()
Lesezeichen