- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Freuqenz erzeugen

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2009
    Alter
    33
    Beiträge
    104

    Freuqenz erzeugen

    Hallo,

    möchte mit einem PIC (16F628A bzw 12F675) eine Frequenz an einem PIN erzeugen. Sie soll von ca. 20 Hz bis 1,6 kHz in 10 Hz Schritten mittels zweier Taster einstellbar sein. Eine Frequenz zu erzeugen war auch nicht das Problem, nur ist es so das es keine Lineare Funktion ist. Es lassen sich die niedrigen Werte sehr genau, die hohen Werte sehr ungenau einstellen.

    Um das zu verdeutlichen hab ich eine Wertetabelle im Anhang. Die Werte passen zwar nicht mehr zu dem Programm, verdeutlichen das Problem aber.

    Hier noch das Programm:

    Code:
    #pragma config |= 0b.0011.0101.0000.0010    //Prozessor Konfiguration
    void pause1(uns16 ms)
    {
        while(ms)
        {
            OPTION = 2;
            TMR0 = 131;
            while (TMR0);
            ms--;
        }
    }
    void pause(void)
    {
        OPTION = 2;
        TMR0 = 131;
        while (TMR0);
    }
    void main(void)                             // Hier beginnt das Hauptprogramm
    {
        TRISA = 0b.0000.0000;
        TRISB = 0b.1111.1111;
        bit Plus @ PORTB.1 ;                    // Pin RB1 erhält Name "Plus"
        bit Minus @ PORTB.2 ;                   // Pin RB2 erhält Name "Minus"
        char w;                                 // W für Tasterentprellung
        unsigned int Zahler;                    // Zähler für Taster
        Zahler=100;                             // Zähler-Startwert = 100
        Sprungmarke:
        if (Plus)                               // Wenn "Plus"-Taster gedrückt ist, dann
        {
            Zahler = Zahler + 10;               // Zähler + 10
    
        }
        for (w=0;w<50;w++)
        {
            pause();                            // Hier wird zum Entprellen gewartet
        }
        if (Minus)                              // Wenn "Minus"-Taster gedrückt ist, dann
        {
            Zahler = Zahler - 10;               // Zähler - 10
    
        }
        for (w=0;w<50;w++)
        {
            pause();                            // Hier wird zum Entprellen gewartet
        }
        PORTA.0 = 1;                            // PIN wird high
        pause1(Zahler);                         // Warte durch Zähler definierte Zeit
        PORTA.0 = 0;                            // PIN wird low
        pause1(Zahler);                         // Warte durch Zähler definierte Zeit
        goto Sprungmarke;
    }
    Ich hatte auch schon versucht das ganze mittels Switch und case umzusetzen, also jedem Wert eine Frequenz zuzuordnen. Das hat auch funktioniert allerdings wird das Programm dadurch natürlich viel zu groß. Deshalb hab es es dann nach 10 Werten gelassen, abgesehen davon wird es bei den hohen Frequenzen auch wieder unmöglich die 10er Schritte beizubehalten. Wenn jemand noch eine andere Idee hat, wie man es hinbekomm eine Frequenz zu erzeugen die man in 10er Schritten hoch bzw. runter stellen kann wäre ihm sehr dankbar.

    Gruß
    Kevin
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken wertetabelle.jpg  

Berechtigungen

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

Solar Speicher und Akkus Tests