-         

Ergebnis 1 bis 9 von 9

Thema: Wait in C

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.04.2005
    Beiträge
    10

    Wait in C

    Anzeige

    hallo leute!

    ich steh irgendwie auf dem schlauch, ich versuche meinen controller zu bremsen, doch das haut nicht ganz hin. ich möchte einfach nur das ein led blickt.
    es kommt mir so vor als ob der controller aus meinem wait nicht herraus kommt?

    ich benutze die RN-Control und hier ist mein quellcode:

    #include <avr/io.h>
    #define F_CPU 16000000 // 16MHz Taktfrequenz
    #define SBIT(ADRESSE,BIT)(ADRESSE |=(1<<BIT)) //Makro zum setzen von einem Bit
    #define CBIT(ADRESSE,BIT)((ADRESSE) &= ~(1<<BIT)) //Makro zum löschen von einem Bit

    void wait(unsigned int ms);

    void wait(unsigned int ms)
    {
    unsigned int zaehler;

    while (ms)
    {
    zaehler = F_CPU / 5000;
    while (zaehler)
    {
    asm volatile ("nop");
    zaehler--;
    }
    ms--;
    }
    }


    int main (void)
    {

    DDRC = 0Xff;

    for(;;){

    SBIT(PORTC,PC0);
    wait(750);
    CBIT(PORTC,PC0);
    }

    return 0;
    }

    besten dank im vorraus

    servusssss

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    SBI erfolgt unmittelbar nach CBI, das Tastverhältnis ist also praktisch gleich 1
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.141
    Dein wait funktioniert, daran liegt's nicht.
    Dein Fehler ist, dass Du nach dem CBIT kein wait mehr eingefügt hast. So wird CBIT aufgerufen und als nächster Befehl gleich wieder SBIT...

    [edit]Da war Sprinter schneller. Man sollte nicht soviel mit Kollegen quasseln, bevor man 'Absenden' klickt....[/edit]

    Gruß,
    askazo

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.11.2005
    Beiträge
    321
    ganz einfach, so muss der kreislauf sein: warten-einschalten-warten- ausschalten und jetzt gehst du wieder gaaaaanz langsam nach vorne.

    oder aber: einschalten-warten-ausschalten-warten und jetzt gehst du wieder gaaaaanz langsam nach vorne..he..he..

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    09.04.2005
    Beiträge
    10
    Danke Leute,

    für euere hilfe, funktioniert tadellos und ist ja auch logisch

    gruß servusssss

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.12.2004
    Alter
    32
    Beiträge
    287
    Hallo,

    welchen Compiler verwendest du?
    Also bei mit (GCC, WinAVR) läuft der Befehl:

    SBIT(PORTC,PC0);

    nicht. Oder muss man da eine Spezielle include Datei einbinden?

    mfg
    The future is closer then you think!

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ist wohl deprecated (veraltet) das.

    Kannst du aber selber schnitzen, wenn's haben willst:

    Code:
    #define SBIT(sfr,bit) sfr |= 1<<(bit)
    #define CBIT(sfr,bit) sfr &= ~(1<<(bit))
    Disclaimer: none. Sue me.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,

    Code:
    zaehler = F_CPU / 5000;
    wie kommst du aus dieses? Ausprobiert oder berechnet? Wenn berechnet dann wie? Wie bist du insgesamt auf diese Wait Funktion gekommen bzw. wie lange du warten musst?

    Gruß Michi

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.12.2004
    Alter
    32
    Beiträge
    287
    Hallo,

    dass finde ich echt super! Wuste garnicht, dass man Definierte Funktionen auch Werte übergeben kann. Beziehungsweise Platzhalter verwenden kann.

    Danke.

    mfg
    The future is closer then you think!

Berechtigungen

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