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
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
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)
);
}
}
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?
Code://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 } }
Lesezeichen