Guten Tag Miteinander Mit einem ATMega 2560 R3 sollten 14 PWM Ausgänge verwendet werden können mit einer PWM Frequenz von TCCR1B -> 31372.55 Hz. Wegen der verwendeten millis() Funktion für die State-Machine welche den Timer 0 belegt (Die Frequenz darf nicht verändert werden: 976.56 Hz/ TCCR0B) sind es nun noch 13 resp. 14 PWM Pins die verwendet werden können. Ich suche nun die Möglichkeit, den Pin 13 (PB7) von OC0A nach OC1C um zu konfigurieren, so dass der Ausgang ganz normal mit AnalogWrite() genutzt werden kann. Die Konsultation des 435 seitigen Datenblattes: http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf Auf der Seite 76 / Tabelle 13-6 ist der Pin mit seinen 3 Möglichkeiten beschrieben. In der Tabelle 13-7 / Seite 78 in der Linie PVOE stehen beide diese Compare Register aber keine Möglichkeit dies um zu konfigurieren. Auf der Seite 167 / Kapitel 19.2 habe ich gesehen dass da beide OC - Werte aufgelistet sind aber ich wurde daraus nicht schlau wie ich das nun umkonfigurieren könnte ;-( Weiss da jemand Rat? MFG Xilinx
Nachtrag: Nach mehrmaligem Lesen des Kapitels 16.9, der Seite 126 kann diese "OR" Schaltung der beiden OC0A und OC1C in den Registern COM0A1 und COM0A0 offenbar umgeschalten/deaktiviert werden. Das WGM02 Bit soll auch noch darin "verstrickt" sein. Wie jetzt die Einstellungen sein müssen, habe ich bis jetzt leider nicht heraus gefunden, resp. meine Einstellungsversuche haben bis jetzt nicht gefruchtet. Um Hinweise wäre ich daher sehr dankbar. MFG Xilinx
Hallo, man kann die Pinzuordnung der Hardware Timerausgänge nicht tauschen. Auf Seite 2 des Datenblattes ist die Zugehörigkeit ersichtlich. Die Pinummern haben jedoch nichts mit der Arduino Pin Nummerierung zu tun. http://www.pighixxx.com/test/pinoutspg/ hier suchste dein Board raus und hast einen schönen Überblick über alles. Bei einigen ATtiny's kann man die Pin Ausgänge zum Timer selbst festlegen in einem gewissen Spielraum. Beim ATmega nicht. Was du aber machen kannst ist folgendes. In einer Timer Interrupt Service Routine (ISR) kannst du jeden beliebigen Pin schalten. Dafür musste dich jedoch mit Timern direkt befassen. Programmierst einen Timer und dessen ISR und dann gehts los mit Pin toggeln, PWM, und andere Dinge. Was du gerade möchtest.
:
Bearbeitet durch User
Hallo Veit Besten Dank für den Vorschlag, dann werden es dann nur 13 steuerbare Weichen-Motoren statt 14 Stück. Dies wäre dann mit der Relais Plattinen "aufgegangen". Den Pin will ich nicht ändern sondern nur dieser ODER Betrieb der Comperatoren abschalten/umschalten auf den OC1C. Gruss Xilinx
Hallo, was meinst du mit ODER Betrieb? Den Pin 13 kannst mit PWM nutzen. Nur taktet er mit einer anderen Frequenz. Die spielt jedoch bei einer PWM Nutzung eine untergordnete Rolle. Außer die Frequenz der PWM muss aus bestimmten Gründen einem speziellen Takt entsprechen. Für Weichenmotoren sehe ich da keine Probleme. Außer man hört den Motor etwas brummen. Oder wie gesagt, du schaltest alle erdenklichen Pins in einer einzigen Timer ISR. Vorteil. Alle Pins takten mit dem gleichen Takt. Und du kannst selbst festlegen welcher Pin geschaltet werden soll. Übrigens takten alle PWM Ausgänge mit unterschiedlichen Frequenzen. Je nach Timer der dahinter steht. Die anderen Timer sollten defaultmäßig mit 490Hz takten. Kannste ändern. https://arduino-info.wikispaces.com/Arduino-PWM-Frequency
1 | beim Uno: |
2 | |
3 | PWM Pins 5 und 6 kontrolliert durch Timer 0 |
4 | PWM Pins 9 und 10 kontrolliert durch Timer 1 |
5 | PWM Pins 3 und 11 kontrolliert durch Timer 2 |
6 | |
7 | beim Mega: |
8 | |
9 | PWM Pins 4 und 13 kontrolliert durch Timer 0 |
10 | PWM Pins 11 und 12 kontrolliert durch Timer 1 |
11 | PWM Pins 9 und 10 kontrolliert durch Timer 2 |
12 | PWM Pins 2, 3 und 5 kontrolliert durch Timer 3 |
13 | PWM Pins 6, 7 und 8 kontrolliert durch Timer 4 |
14 | PWM Pins 44, 45 und 45 kontrolliert durch Timer 5 |
Mit den fast undokumentierten 3 PWM Ausgängen von Timer 5 haste bestimmt die zusätzlichen Ausgänge die du benötigst. Insgesamt hast du 15 PWM Pins. Abzüglich Pin 13 haste 14 PWM Ausgänge.
if you can make libraries, you make libraries. copy file "wiring_analog.c" delete all like #if defined(TCCR0A) && defined(COM0B1), #endif in switch(digitalPinToTimer(pin)) revise digitalPinToTimer(pin) -> pin case TIMER0A: -> case pinNumber(ex:11): maybe you can
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.