- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 12

Thema: Servosignal von Timer1 KanalA und ~B zeigt Ausfälle

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo zusammen.

    Hier nur eine Haarspalterei am Rande, die auch nichts mit der grundsätzlichen Funktionalität zu tun hat. (oberallgeier bitte verzeih mir!)

    In deiner Test-Funktion benutzt du folgenden Code:
    Code:
        for (ilng = PWMmin; ilng <= PWMmax; ilng++)
         {                           //
           cli();                    // ###
           OCR1B       = ilng;       //
           sei();                    // ###
           waitms (  srvwt);         //
         }           // ### Ende for (ilng = ...
    Hier beim Schreiben in das OCRnx-Register kannst du getrost auf das cli() und sei() verzichten. Diese Register sind gepuffert und vertragen eine Unterbrechung durch Interrupts. (Mit der Ausnahme, wenn du in einer beliebigen INT-FNC auf das Register schreibst! Was du in deinen Code-Ausschnitten aber nicht machst.)
    Klar, es bleibt, dass beim Lesen leider doch mit INT-sei(n)-oder-nicht-sei(n) gewerkelt werden muss.

    Im dicken PDF zu den AVRs (angefangen beim atmega8 bis zum atmega644) ist das so beschrieben:
    When the High byte I/O location is written by the CPU, the TEMP Register will be updated by the value written. Then when the Low byte (OCR1xL) is written to the lower eight bits, the High byte will be copied into the upper 8-bits of either the OCR1x buffer or OCR1x Compare Register in the same system clock cycle.


    Aber wie gesagt: Hat nichts mit der eigentlichen Funktion zu tun. (Soll nur Bytes sparen)

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.704
    Zitat Zitat von Sternthaler Beitrag anzeigen
    ... Haarspalterei ... (Soll nur Bytes sparen) ...
    Ich liebe Haarspaltereien - ich meine Codezeileneinsparungen.

    Zuerst hatte ich diese cli();/sei();-Geschichte nicht verwendet. Hatte mich dabei schon gewundert, dass es sozusagen trotzdem funktionierte . . . und die Zeilen nachgetragen. Nun weiß ich, warum es funktionierte, denn ich habs im Datenblatt gesucht und gefunden. Habe aber noch nicht in der *.lls nachgesehen, ob der Compiler das richtig macht(e) *ggg*. In der aktuellen Version wird nämlich OCR1B sowieso erst in der ISR (TIMER1_COMPA_vect) mit Daten aus dem Feld für die maximal möglichen zehn Servos beschrieben/geladen. Und da ich keine nested Interrupts verwende . . habe ich aktuell auch die cli();/sei();-Geschichte eingespart. Trotzdem

    Danke.
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Pulsgenerator für servosignal
    Von Horstel im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 10.06.2007, 12:58
  2. Servosignal erzeugen
    Von Sukilin im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 30.05.2007, 16:04
  3. Servosignal schaltet nicht ab
    Von Andree-HB im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 28.01.2005, 21:38
  4. PCM-Servosignal-Erkennung
    Von odlanir im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 27.04.2004, 18:47

Berechtigungen

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

12V Akku bauen