-         

Ergebnis 1 bis 5 von 5

Thema: Counter Programmieren

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.06.2005
    Beiträge
    15

    Counter Programmieren

    Anzeige

    Muss mich wegen einem Projekt mit dem Counter und Interrupt beschäftigen.

    Habe aber eigentlich wenig Ahnung wie man einen Counter programmiert.
    Könnte mir jem. bitte ein leicht zu Verstehendes Programm online stellen, mit dem ich mich beschäftigen kann. Möchte sollch ein Programm verstehen und daraus andere Programme entwickeln.

    Weiß aber nur wie ich die Register setzen muss, also die betriebsart.

    Bin für jede Hilfe Dankbar

    PS: Muss mit dem Counter innerhalb einer Zeitperiode von 100µs die impulse eines Sensors Zählen der sich kapazitiv verändert. Diese Werte sollen dann eine Datenreihe ergeben.(Verlauf)

    Ich weiß was ich will, aber ich hab wenig Ahnung wie.

    Hoffe es kann mir wer helfen

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Da stellt sich erst mal die Frage, welchen ATMega Du benutzt und welche Taktfrequenz Du verwendest.
    Dann könnten wir uns auch über die entsprechenden Register unterhalten

    Grundsätzlich ist es so, dass Du Dein Vorhaben mit der Output-Compare Funktion des Counters bewältigen kannst. Du schreibst einen Wert in das OC-Register, der den verlangten 100µs entspricht (kann man über die Taktfrequenz ausrechnen). Dann muss der OC-Interrupt aktiviert werden. Alle 100µs wird dann dieser Interrupt ausgelöst.

    askazo

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.06.2005
    Beiträge
    15
    Iche verwende den Atmega 32,
    mit einer Taktfrequenz von 3,6864MHz.

    Danke schon mal für die Antwort.
    Hoffe es kann mir wer anhand eines source codes witerhelfen.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Ok, ich versuchs mal. Ohne Garantie, der Code ist nicht getestet.
    Als Compiler benutze ich avr-gcc.

    Zunächst mal kurz die Berechnung für's OC-Register:
    f=3,6864 MHz -> Ein Takt dauert 1/f = 271,27ns
    100µs/271ns = 368,64 -> Anzahl der Taktzyklen in 100µs
    368 = 0x170

    Code:
    //Register setzen
    
    //Mode = CTC (Clear Timer on Compare)
    TCCR1B = 0x04;
     
    //Output-Compare Register einstellen.
    OCCR1AH = 0x01;
    OCCR1AL = 0x70;
    
    //Output Compare Match - Interrupt einschalten
    TIMSK = 0x10;
    
    //Timer starten mir clock-Devider = 1
    TCCR1B |= 0x01;
    
    //Interrupts global freigeben
    sei();
    
    while (1)
    { //do nothing
    }
    
    
    //Interrupt-Routine
    //Wird alle 100µs aufgerufen
    signal (SIG_OUTPUT_COMPARE1A)
    {
    //Hier kommt rein, was auch immer Du alle 100µs machen willst
    }
    askazo

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    09.06.2005
    Beiträge
    15
    Dankeschön!!!!

    Hat mir sehr geholfen!

Berechtigungen

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