- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Welche Bibliotheken sind verfügbar?

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    01.02.2008
    Beiträge
    15
    Anzeige

    E-Bike
    Ich habe jetzt seit kurzem auch einen Asuro und ich bin total begeistert.

    Ich habe aber bis jetzt nur mit Visual Basic und C++ programmiert und habe noch kaum Ehrfahrung mit C.
    Ich interressiere mich für den Timer von radbruch, denn ich würde gerne von der Anfangsschleife while(1) wegkommen. Damit ich nicht immer dem Asuro hinterlaufen muss, um ihn auszumachen.

    Ansonstens funktioniert alles prima und ich konnte schon viele Probleme mithilfe des Wikis lösen. (leider gerade down)

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Lange Verzögerungen ohne Sleep() mit direktem Zugriff auf timebase:
    Code:
    #include "asuro.h"
    
    extern unsigned long timebase;
    
    int main (void)
    {
    	Init();
    	StatusLED(RED);
    	cli();
    	timebase=0;
    	sei();
    	while(timebase < 1406) // 10 Sekunden, weil 36000/256=140,6...
    	{
    	   BackLED(timebase & 16, timebase & 8);
    	}
    	BackLED(0,0);
    	StatusLED(GREEN);
    	while(1);
    	return(0);
    }
    Einfacher gehts natürlich mit Gettime():

    while (sekunden*1000 < Gettime())
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    01.02.2008
    Beiträge
    15
    vielen dank für die schnelle Antwort,
    Ich bekomme aber folgende Fehlermeldung, wenn ich dein Code ausführe.
    undefined reference to `timebase'
    Ich habe eigentlich auch nichts anderes erwartet, denn ich wüsste nicht das ich die Variable timebase irgendwo anders initialisiert hätte.

    Kannst du mir vielleicht erklären was cli(); und sei(); heißt.
    Ich würde für den Anfang einfach eine LED 10sek leuchten lassen.

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Hallo U-xer,

    die beiden cli und sei sind eigentich Machinenbefehle für Interrupt dis- und enable (sei - set enable interrupt). Schau mal ins doc vom ATMega8, ab S 283 ist die ganze Instruction Set Summary, dort findest Du auch die beiden Befehle. In der Schreibweise von Dir sind sie für C modifiziert - In-line-Assembler. Aktuell bekommst Du das Datenblatt (über 300 Seiten) bei Atmel.

    Viel Erfolg.
    Ciao sagt der JoeamBerg

  5. #15
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Da ist mir ein kleiner "Fehler" unterlaufen, timebase und gettime() gibt es nicht in der orginalen Library:

    volatile unsigned char count72kHz;

    /* uses timer2 (36kHz for IR communication */
    /* counts falling and rising edge => 36kHz*2 = 72kHz */
    SIGNAL (SIG_OUTPUT_COMPARE2)
    {
    count72kHz ++;
    }
    aus asoro.c v2.1

    Spätere Versionen mit dem 36kHz-Timer verwenden timebase so:

    volatile unsigned char count36kHz;
    volatile unsigned long timebase;
    volatile int autoencode=FALSE;

    /* uses timer2 (36kHz for IR communication */
    SIGNAL (SIG_OVERFLOW2)
    {
    TCNT2 += 0x25;
    count36kHz ++;
    if (!count36kHz) timebase ++;
    }
    cli() und sei() verwende ich vorsichtshalber, denn einen long-Wert auf null zu setzen benötigt mehr als einen Befehl und könnte deshalb vom Timerinterrupt unterbrochen werden.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    01.02.2008
    Beiträge
    15
    @oberallgeier
    Ich bin noch ziemlicher Anfänger und habe ehrlich gesagt überhaut nichts aus deinem Link verstanden.
    @radbruch
    Ich habe es nun doch anders gelöst.
    hier ein Beispiel von mir Status LED wechselt alle paar Sekunden die Farbe.
    Code:
    #include "asuro.h"
    
    
    int main(void)
    
    { 
    
    int i;
    
    int j;
    
    	Init();
    
       while(1)
    
       {
    
       for (j=0; j<500 ; j++)
    
       {
    
        StatusLED(GREEN);
    
    	Sleep(255);
    
        }
    
        for(i=0; i<500; i++ ) 
    
    	{
    
    	 StatusLED(RED);
    
    	 Sleep(255);
    
        }
    
    	}
    
       return 0; 
    
       }
    trotzdem vielen dank

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress