Kann mir jemand sagen, welchen Zweck die COM1A0S und COM1A1S Bits beim ATtiny261/461/861 haben ? Das Datenblatt sagt dazu nur folgendes aus: "These bits are the shadow bits of the COM1A1 and COM1A0 bits" Was heißt das jetzt ? - Die Bits sind identisch (beschreibt man also eines, ändert sich das andere) - COM1AxS ist eine Kopie von COM1Ax - COM1Ax ist eine Kopie von COM1AxS
Hi Ich hab das gerade bei meinem getestet. Es sieht so aus, als ob die bits identisch sind. D.h. es ändern sich immer beide.
Hi, shadow register sind dazu da um einen zukünftigen Registerzustand vorzuladen um bei Eintreten eines Ereignisses den neuen Wert nur noch zu übernehmen (spart Zeit). z.B. bei der Kommutierung von BLDC Motoren. Das Drehfeld wird hier in 6 Schritten erzeugt. Man lädt den nächsten Schritt (Schaltmuster der 6 Transisoren) vor und überträgt die Daten, wenn der Anker an der richtigen Stelle ist... Musst jetzt nur noch selber rausfinden, was passieren muss, um den Inhalt der Shadowregister in das Zielregister (COM1A0S->COM1A0) zu übertragen. Wusste garnicht, dass die AVRs sowas auch haben...interessant ;) Grüße, Michael
umgedreht müsste es sein. Das Shadow Register wird zu einem bestimmten Zeitpunkt aus den Programmierregister übertragen. D.h. wir setzten als Programmierer das COM1Axx Register und später wird dieser Wert zum korrekten Zeitpunkt übernommen. Damit ist das Shadow Register das Register das tatsächlich die Hardware beeinflusst. Ich schätze das dieses Verfahren nur dann eine Wirkung zeigt wenn man den PWM6 Modus der MCU aktiviert hat, da diese Bits die PWM Waveform beeinflussen sollte, also Kommutierung im BLDC. Zumindestens so habe ich's mir an Hand der Datenblätter zusammengereimt. Gruß Hagen
Benedikt K. wrote: > - COM1AxS ist eine Kopie von COM1Ax > - COM1Ax ist eine Kopie von COM1AxS Beides. Es sind 2 verschiedene Adressen für das selbe Bit. Welches Sinn das hier beim ATtiny261 haben soll, steht allerdings nirgends. Peter
Jo, hier ists wohl andersrum. Ich kenns von Infineon und ST, da kann man nur auf die Shadowregister zugreifen. Wann allerdings der Übertrag erfolgt find ich nicht. Ich tipp mal bei einem Compare-event...
attinyx61 wrote: > Hi > Ich hab das gerade bei meinem getestet. > Es sieht so aus, als ob die bits identisch sind. > D.h. es ändern sich immer beide. Bei meinem Versuch habe ich sowas ähnliches wie hier verwendet und das if war true egal ob ich zuerst TCCR1A oder TCCR1C beschrieben habe.
1 | TCCR1A = ( 1 << COM1A1 ) | ( 1 << COM1A0 ); |
2 | TCCR1C = ( 1 << COM1A1S ) | ( 0 << COM1A0S ); |
3 | |
4 | if ( ( TCCR1A & 0xc0 ) == ( TCCR1C & 0xc0 ) ) |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.