Archiv verlassen und diese Seite im Standarddesign anzeigen : 60 Sekunden berechnen in C+ RN-Control 1.4
tomschmied
22.03.2010, 09:57
Hallo,
kann mir jemand ein Programm in C+ geben,
wie ich 60 Sec. abfragen kann?
Ein Schrittmotor soll sich exakt jede Minute einmal bewegen.
Die Motoransteuerung funktioniert bereits.
Gruß
Tom
Hi
Du erstellst einfach einen Timer der eine Variable hochzählt, hat die Variable einen bestimmten Wert erzeugt sind 60Sekunden rum.
Beispiele findest du hier: https://www.roboternetz.de/wissen
tomschmied
22.03.2010, 10:17
Das aus WIKI hab ich eingebaut. Aber wie schon da steht stimmt die Zeit nicht. Was mus da geändert werden?
/*Die Funktion lässt circa so viele Millisekunden verstreichen, wie angegeben werden.
Angepasst auf das RN-Control 1.4 mit 16 MHz-Quarz!
Vorsicht, Wert ist nur experimentell angenähert, nicht exakt berechnet!*/
void waitms(uint16_t ms)
{
for(; ms>0; ms--)
{
uint16_t __c = 4000;
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__c)
: "0" (__c)
);
}
}
021aet04
22.03.2010, 10:39
Du arbeitest mit wait. Besser und genauer ist es, wenn man einen Timer konfiguriert und diesen Timer eine Variable hochzählt. Wenn die Zeit verstrichen ist Variable auf 0 setzen und den Motor drehen lassen. (Stichwort Timerinterrupt). Welchen µC verwendest du?
//Deine Headerdateien einfügen
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char sreg_save;
volatile unsigned char i=0;
//Timerinterrupt
ISR(TIMER0_OVF_vect)
{
sreg_save=SREG; //Register sichern
i++; //Variable erhöhen
SREG=sreg_save; //Gesichertes Register wieder zurückschreiben
}
//Hauptschleife
int main(void)
{
//Ausgang konfigurieren (musst du anpassen)
DDRB = 0xff;
PORTB = 0x00;
//Timer konfigurieren (musst du noch anpassen => Datenblatt lesen)
TCCR0B |= (1<<CS00) | (1<<CS02);
TIMSK |= (1<<TOIE0);
//Interruptfreigabe
sei();
while(1)
{
// Hier kommt dein Programm her
}
}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.