ich baue gerade einen Wandler, der das Steuersignal für meine alten Heizungspumpen (2Hz "PWM") in ein für Hocheffizienzpumpen geeignetes Signal mit frei wählbarer Frequenz (hier 720Hz) aber gleichem Tastverhältnis umwandelt.
Benutzt wird der Arduino Mega R3 und dort die 16-bit Timer (1,3,4,5), vom Timer 5 nur die ersten beiden Outputs (A,B - Pin 44 und 45).
Ich nutze einen aufsteckbaren Shield, das beschriebene Verhalten zeigt sich aber mit und ohne Shield, auf original Arduinos und auf Clones.
9 von meinen 10 Kanälen funktionieren perfekt -- Timer 1, 3, 4 und 5B(Pin 45).
Der Ausgang 5A (Pin44), bei mir Kanal 9 funktioniert nicht.
Ausgang 5A funktioniert sobald ich zusätzlich analogWrite wie auskommentiert nutze. Dies ist bei keinem anderen Ausgang nötig.
Frage: Was verursacht dieses abweichende Verhalten? Habe ich etwas falsch/nicht verstanden, gibt es einen dummen :-) Fehler?
Ich hänge den Code und den LogicAnalyzer Screenshot an.
Der Code/die Config ist angehängt.
Die eigentliche Frage ist auch warum Timer4 Pins funktionieren, aber ein Pin von Timer5 nicht bzw nur via analogWrite.
Im Manual wird für beide sogar das gleiche Blockschaltbild verwendet. Die verwendeten Werte stammen genau von den o.a. Seiten.
Hier nochmal Timer 4 und 5:
Gesetzt im
TCCR5A ist WGM51
TCCR5B ist WGM52 und CS50 (kein Teiler aktiviert)
mal die WGMx:y
| TCCR5B | TCCR5A |
|WGM53 | WGM52 | WGM51 | WGM50 |
0 1 1 0
= FastPWM 9 Bit
Wenn du ausserhalb des 0x3F Adressraumes arbeiten willst musst die WGM eigentlich mit STS/LDS ansprechen alles darunter wird mit IN/OUT angesprochen
Schau mal Seite 402
Stopp soll der auf 0.0 gesetzt sein
Harald F. schrieb im Beitrag #7455471:
Chris, du musst nicht an die Decke gehen wenn du nicht erkennst was Fakt ist. Arduino F. hat es dir doch schon mit dem Zaunpfahl gesagt. Es gilt die Arduino Pin-Nummerierung. Dafür reichen 2 Informationen. Thread Titel und im Programm die Existenz von setup() und loop(). Letzteres ist entscheidend.
Das ist ein "Selbständig Denkender".
Konventionen interessieren ihn nicht.
Genau so wenig wie Threadtitel und Dokumentationen.
Beim "selbständig denken" nerven solche Fakten nur!
Aber Umschlüsselungen sind auch wirklich schwer zu verstehen....
Abstraktion, igitt!
Genau so wenig wie Threadtitel und Dokumentationen.
Beim "selbständig denken" nerven solche Fakten nur!
Aber Umschlüsselungen sind auch wirklich schwer zu verstehen....
Abstraktion, igitt!
ja dann verrate doch das Problem wo der TE dies liegen hat wenn Timerkanal 5 A/B nicht funzen obwohl dies zu Timer 4 identisch beschrieben ist!!
Kommm jetzt will ich wissen wo der Fehler liegt!! Grins
das mit der Rechnung ist leider nur ein Fehler. Hauptgrund für die Nichtfunktion ist der fehlende Eintrag im struct für Compare C. Die Timer laufen übrigens im Timer-Mode 10, der Kommentar dazu stimmt, wenn im Code auch nur schwer ersichtlich.
Zum testen reduziert und runtergebrochen. Alle 3 Timer 5 Pins takten.
Die Registeradressen im struct wird der TO so noch nicht verwenden können. Das als Warnung. Noch ein Tipp an den TO. Gewöhne dir an die Indexvariable der for Schleifen lokal zu belassen. Es gibt meistens keinen Grund für außerhalb. Du sparst dabei auch nichts, dafür kommen mehr Fehlerquellen hinzu.
In der welcher IDE programmierst du überhaupt?
1
#include<avr/io.h>
2
#include<stdint.h>
3
#include<arduino.h>
4
5
constuint8_tMAX_LINES=3;
6
constuint8_tNO_INPUT=0;
7
constuint8_tDIGITAL_INPUT=1;
8
constuint8_tANALOG_INPUT=2;
9
constuint16_tPWMFreq=720;// output PWM frequency (Hz)
Es war natürlich ein blöder Lesefehler, aber ab einem bestimmten Punkt bei der Fehlersuche brauchte ich offenbar Hilfe :-).
Die "Abstraktion" im Code kommt natürlich auch von meinem Shield, der die verfügbaren Kanäle von 1-10 numeriert. Ich habe die struct nun so angepasst (s.u.) und natürlich das OCR5C verwendet.
Die anderen Spalten/Arduino Pins waren hier nicht wichtig, da sie nur auf der Eingangsseite zum tragen kommen - auf den Pins lese ich die TP-Filter der Schaltung aus bzw. zähle high und low direkt aus (alternativ). Beides geht sehr schön und jetzt tuts auch der Ausgang vollständig.