-
-
Neuer Benutzer
Öfters hier
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
-
Erfahrener Benutzer
Roboter Genie
Was man hier besonders gerne sieht sind Doppelpost...und noch besser sind Dreifachposts
Bitte 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.
-
Neuer Benutzer
Öfters hier
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);
}
}
}
}
-
Erfahrener Benutzer
Begeisterter Techniker
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
-
Neuer Benutzer
Öfters hier
Nein ich habe ein Atmega168 und Atmel 6.1
-
Erfahrener Benutzer
Robotik Visionär
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.
-
Neuer Benutzer
Öfters hier
Da ich nur Grundlagen beherrsche und ich überhaupt noch nicht mit Timern gearbeitet habe und am Montag Abgabe ist wird das schwierig
-
Erfahrener Benutzer
Roboter-Spezialist
Dafür, dass du Montag Abgabe hast, hast du noch nicht einmal meinen Tipp von oben im Code berücksichtigt.
Und der Link zum RN Wissen liefert dir doch schon ein fertiges Beispiel für die Verwendung des Timers.
sast
-
Erfahrener Benutzer
Roboter Genie
Interessant das Du den Weg hierher doch schon so früh gefunden hast. Das erklärt auch die Doppelposts.
Heute ist ja immerhin erst Mittwoch... dann mal los
-
Neuer Benutzer
Öfters hier
Ja ich habe das Programmieren echt unterschätzt
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen