- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: 60 Sekunden berechnen in C+ RN-Control 1.4

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.03.2010
    Beiträge
    33

    60 Sekunden berechnen in C+ RN-Control 1.4

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.03.2010
    Beiträge
    33
    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)
    );
    }
    }

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    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
                 }
    
    }

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests