Hochfrequentes PWM-Signal auf D3 ausgeben

Ich möchte 8 MHz auf D3 haben. Folgenden Code habe ich im Netz gefunden:

pinMode(9, OUTPUT);
TCCR1A = ((1 << COM1A0));
TCCR1B = ((1 << WGM12) | (1 << CS10));
TIMSK1 = 0;
OCR1A = 0;

Das funktioniert auch, jedoch auf Pin D9. Wie muss ich das umschreiben um diesen auf D3 zu erhalten?
Ich blick da leider überhaupt nicht durch…
Dankeschön für die Hilfe!

Timer1 steuert Pins 9 und 10. Timer2 (der allerdings nicht genauso wie Timer1 funktioniert) 3 und 11

Ok, das heisst jeweils zwei Pins beziehen dasselbe PWM Signal?! Was macht das für einen Sinn? Ist das nur um eine Option zu haben?
Wo gebe ich oben in „meinem“ Code an welchen Pin ich nun damit belegen will?
Und wie muss ich das schreiben um den Timer2, ebenfalls mit 8 MHz zu nutzen?

Gähn…

mikrotron:
Ok, das heisst jeweils zwei Pins beziehen dasselbe PWM Signal?!

Wie kommst du darauf?
Jeder Timer kann 2 Pins zappeln lassen. Aber doch nicht zwangsläufig mit demselben PWM Signal, sondern nur mit der selben Frequenz.

mikrotron:
Wo gebe ich oben in „meinem" Code an welchen Pin ich nun damit belegen will?

Warum schaust du nicht mal ins Datenblatt zu deinem Prozessor?
Da drin steht alles was es zu jedem der Timer zu wissen gibt!
Ausnahme: Die Arduino Besonderheiten mit Timer0, das steht nicht im Datenblatt, sondern im Arduino Core

mikrotron:
Und wie muss ich das schreiben um den Timer2, ebenfalls mit 8 MHz zu nutzen?

Warum schaust du nicht ins Datenblatt zu deinem Prozessor?
Da drin steht alles was es zu jedem der Timer zu wissen gibt!
Ausnahme: Die Arduino Besonderheiten mit Timer0, das steht nicht im Datenblatt, sondern im Arduino Core

ICH lese es dir nicht vor.

Ich hab Deinen Standpunkt verstanden, combie, dennoch sind Deine Ausführungen, ebenso wie Deine Unterstellungen völlig sinnfrei und Du hättest Dir den Oberlehrer sparen können.

Natürlich habe ich versucht aus den Datenblatt schlau zu werden, aber ich blicks einfach nicht und bat daher um Hilfe. Wenn mir jemand die richtigen Setups hätte nennen können, dann wär ich rückwärts vielleicht schlau draus geworden. Aber dazu bist wenigstens Du ja nicht gewillt.

Schade das man in einem Forum, wo man nach hilfe fragt und es dazu ja auch gemacht ist, nur noch mehr Problene vorgesetzt bekommt :frowning:

Du verwechselst die Hilfe in einem Forum mit kostenlosen Support.
Wo hast Du Fragen zum Inhalt des Datenblatts gestellt? Nirgends, also muss man davon ausgehen, dass Du es nicht gelesen hast.

Gruß Tommy

Möchtest du einen Pin der mit 8 MHz toggelt, oder wirklich PWM? Mit PWM hat dein Code oben nämlich rein gar nichts zu tun.
PWM mit 8MHz geht sowieso nicht. Der Prozessor hat nur 16MHz. 62kHz im Fast PWM Modus sind da glaube ich das Maximum

Ansonsten schau dir die Beschreibungen der Register an die du angefasst hast. Da wird erklärt was jedes Bit macht. CS (Clock Select) gibt die Frequenz an. Über die COMxxx Bits stellt man an was die Pins des Timers in bestimmten Situationen machen.
Es gibt auch im Internet Anleitungen wie man mit den Timern arbeitet. z.B. hier

Wie man das ohne Interrupt macht wird da nicht explizit erklärt, aber es dem Datenblatt ist es wie gesagt leicht ersichtlich, wenn man sich die Registerbeschreibung durchliest. Normal nimmt man da den CTC Modus. Und die COMxxx stellt man so ein dass sie beim Compare Match toggeln.
Das wird auch sein was dein Code macht, aber halt auf Timer1. Das kann man leicht auf Timer2 ändern

Kuck mal hier, ein feines Beispiel von Doc_Arduino zu Timern. Mir hat's sehr geholfen da endlich mal durchzublicken.

Klick

Und ich kann bestätigen: nur das Lesen des Datenblatts bringt's oftmal nicht wenn man nicht die nötigen Grundlagen hat.

hehe, Link vergessen > nachgeholt

Hallo,

ich würde auch nicht soweit gehen und behaupten er hätte es nicht gelesen. Lesen und verstehen sind aus meiner Sicht immer 2 Paar Schuhe. Sonst wäre immer alles klar. Buch lesen fertig. :slight_smile: Der Einstieg in die Timer Geschichte ist schon nicht ganz ohne. Hat man die Einstiegshürde genommen, ergibt sich alles weitere fast von selbst. Ein Oszi ist dabei sehr hilfreich.

Ich gehe davon aus du hast einen UNO.
Vom gesetzten WGM12 Bit gehe ich davon aus du möchtest den CTC Modus erkunden.
Jetzt möchtest du Pin 3 takten lassen. Der ist intern mit Timer 2 verbunden. Genauer OC2B.
Den CTC Modus beim Timer 2 macht das Bit namens WGM21. Das wird allerdings im Register TCCR2A gesetzt. Desweiteren muss COM2B0 gesetzt werden, weil das zum Pin OC2B gehört. Soll ja Pin 3 werden. Das Frequenz bestimmende TOP Wert Register ist OCR2A. Du erzeugst damit Frequenzen mit Tastverhältnis 50%. Mit gewünschten 8MHz ist auch nichts anderes möglich. Man hat mit TOP Wert = 0 keinen weiteren Spielraum.

void setup() {
  
  pinMode(3, OUTPUT);    // für UNO, beim Mega2560 Pin 9
  TCCR2A = (1 << COM2B0) | (1 << WGM21);
  TCCR2B = (1 << CS20);
  TIMSK2 = 0;
  OCR2A  = 3;   // 0 ... 8MHz
                // 1 ... 4MHz 
                // 3 ... 2MHz 
}

void loop() {
  
}

Die Registerschreibweisen setzen sich wie folgt zusammen. Bsp. TCCR2A.
TCCRnx liest man Bspw. im Datenblatt.
n steht für den Timer. Also Timer 0 oder Timer 1 oder Timer 2 usw.
x steht für den Kanal vom Timer. Beim UNO mit seinem 328er µC gibts nur zwei Kanäle pro Timer, A und B.

Pinout Übersichten:
Board Pinout Überblick

UNO Pinout

Mega Pinout

Viel Spass beim tüfteln mit dem Timer.

Edit:
irgendwie ist die Seite von pighixxx down, ich hoffe nur temporär

Hi

Doc_Arduino:
Pinout Übersichten:
Board Pinout Überblick

Da Du den Link 'frisch' hier reingestellt hast - funktionieren Diese bei Euch akut?
Ich bekomme seit einer knappen Woche Database-Errors angezeigt.

Dann auch hier: RLP, 57er PLZ

MfG

Edit
PLZ beigefügt - scheint also ein zentrales Problem zu sein

Hallo,

bin auch vorhin überrascht wurden das die Seite nicht wie bisher erreichbar ist. Wenn man allerdings mit “pighixxx pinout” o.ä. googelt gelangt man durchaus zu pdf’s von ihm. Die nächsten Tage werden zeigen was los. Kann auch temporär tot sein und nur eine Region in D betreffen. Zur Not kann man ihn hier im Forum kontaktieren.

Ja, auch bei mir: Error establishing a database connection
(Region Ostösterreich) :slight_smile:

Aus E auch tot “Error establishing a database connection”