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: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.)Code:for (ilng = PWMmin; ilng <= PWMmax; ilng++) { // cli(); // ### OCR1B = ilng; // sei(); // ### waitms ( srvwt); // } // ### Ende for (ilng = ...
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.
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
Lesezeichen