INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Timerbenutzung
14.12.2013, 20:34
Beitrag #1
Timerbenutzung
Hallo, Leute,
bastle grade an einer Motorsteuerung mittels PWM mit Drehzahlregelung. Habe einen Motortreibermodul. Zu Überwachung des Motors setze ich eine Gabellichtschranke ein. Ich will alle 2 Sekunden die Drehzahl kontrollieren und gegebenfalls regeln. Habe zwei Probleme: zum einen würde ich gerne statt delay ein Timer einbauen, weil Motor 2 Sekunden stehen bleibt, weiß aber nicht, wie ich den richtig einsetzen soll, zum anderen würde außerdem noch einen fortlaufenden Zähler einbauen um die gesamte Anzahl von Umdrehungen zu sehen ( Ein Display habe ich auch).

Freue mich über euere Tipps.
Danke [/php][/code][/quote]

int MotorPin=3; // Richtungspin
int MotorPin2=4; // PWM Pin
int Value; // Tastgrad
int Lichtschranke=2; //
static volatile int int0var; //

void int0(void) { // Zählerfunktion
int0var++;
}


void setup()
{
pinMode (MotorPin, OUTPUT);
pinMode (MotorPin2,OUTPUT);
pinMode (Lichtschranke, INPUT);
pinMode(MotorPin2, LOW);
Tastgrad =80;

attachInterrupt(0, int0, FALLING);
}
void loop()
{
analogWrite (MotorPin,Value);
int0var=0; // Zähler wird auf 0 gesetzt

delay (2000); // Wartezeit
if ( int0var ==0) // Zähler zeigt 0 wird....
{
Value=0; // ...der Tastgrad auf 0 gesetzt=MotorStop



}

if ( int0var <2) // Zählt der Zähler weniger als 2 Umdrehungen...
{
Value=Value+1; //...wird der Tastgrad erhöht
}
if (int0var > 4) // Zählt der Zähler mehr als 4 Umdrehungen
{
Value=Value-1; // Tastgrad wird heruntergestuft
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.12.2013, 12:22
Beitrag #2
RE: Timerbenutzung
(14.12.2013 20:34)Coleby schrieb:  Hallo, Leute,
bastle grade an einer Motorsteuerung mittels PWM mit Drehzahlregelung. Habe einen Motortreibermodul. Zu Überwachung des Motors setze ich eine Gabellichtschranke ein. Ich will alle 2 Sekunden die Drehzahl kontrollieren und gegebenfalls regeln. Habe zwei Probleme: zum einen würde ich gerne statt delay ein Timer einbauen, weil Motor 2 Sekunden stehen bleibt, weiß aber nicht, wie ich den richtig einsetzen soll, zum anderen würde außerdem noch einen fortlaufenden Zähler einbauen um die gesamte Anzahl von Umdrehungen zu sehen ( Ein Display habe ich auch).

Freue mich über euere Tipps.
Danke [/php][/code]

int MotorPin=3; // Richtungspin
int MotorPin2=4; // PWM Pin
int Value; // Tastgrad
int Lichtschranke=2; //
static volatile int int0var; //

void int0(void) { // Zählerfunktion
int0var++;
}


void setup()
{
pinMode (MotorPin, OUTPUT);
pinMode (MotorPin2,OUTPUT);
pinMode (Lichtschranke, INPUT);
pinMode(MotorPin2, LOW);
Tastgrad =80;

attachInterrupt(0, int0, FALLING);
}
void loop()
{
analogWrite (MotorPin,Value);
int0var=0; // Zähler wird auf 0 gesetzt

delay (2000); // Wartezeit
if ( int0var ==0) // Zähler zeigt 0 wird....
{
Value=0; // ...der Tastgrad auf 0 gesetzt=MotorStop



}

if ( int0var <2) // Zählt der Zähler weniger als 2 Umdrehungen...
{
Value=Value+1; //...wird der Tastgrad erhöht
}
if (int0var > 4) // Zählt der Zähler mehr als 4 Umdrehungen
{
Value=Value-1; // Tastgrad wird heruntergestuft
}


Habe jetzt einen Timerinterrupt erstellt. Kann mir jemand bitte sagen wie ich den richtig einbinde? Also wie gesagt die Drehzahl soll alle 2 Sekunden übereprüft werden.

//set timer1 interrupt at 0,5 Hz Also Interrupt soll alle 2 Sekunden kommen
TCCR1A = 0;// set entire TCCR1A register to 0
TCCR1B = 0;// same for TCCR1B
TCNT1 = 0;//initialize counter value to 0
// set compare match register for 0,5 hz increments
OCR1A = 31250;// = (16*10^6) / (0,5*1024) - 1 (must be <65536)
// turn on CTC mode
TCCR1B |= (1 << WGM12);
// Set CS12 and CS10 bits for 1024 prescaler
TCCR1B |= (1 << CS12) | (1 << CS10);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste