Gast
#5476237
Hallo zusammen,
ich habe gerade den Timer5 meines Arduino Megas zum laufen bekommen. Ich
wollte mich bei euch nochmal erkundigen, ob der Weg wie ich ihn
konfiguriert habe richtig ist oder wie es besser geht. Zu dem habe ich
im Datenblatt gesehen, dass man für die 16 Bit über einen Temp zugriff
arbeiten sollte (1). Wie funktioniert das in C? Zudem habe ich mir die
Frage gestellt, wie der Vergleichswert am besten im Code beschrieben
werden soll. Ich habe euch mal meinen Code für eine Phasen-/Frequenz
Korrekte PWM angehängt. Freue mich auf Verbesserungsvorschläge und
Kritik. Viele Grüße
******
Code funktioniert. PWM Frequenz ist exakt 8000 Hz wie zuvor berechnet.
*****
void setup()
{
pinMode(46, OUTPUT);
noInterrupts(); // disable all interrupts
TCCR5A = 0b11000000; // set COM5A1, COM5A0 and WGM50 to 1
TCCR5B = 0b00010001; // set prescaler to 1 and set PWM-Mode
ICR5H = 0b00000011; // set top value to 1000
ICR5L =0b11101000; // set top value to 1000
uint16_t vglA = 500; //Vergleichswert
OCR5AH = (vglA >> 8);
OCR5AL = (vglA & 0x00FF);
interrupts(); // enable all interrupts
}
void loop()
{
//loop zur Visualisierung am Oszi
int i;
for (i=0;i<1000;i++)
{
uint16_t vglA = i; //Vergleichswert A
OCR5AH = (vglA >> 8);
OCR5AL = (vglA & 0x00FF);
delay(100);
if (i ==999)
{
i = 0;
}
}
}
(1)
The Input Capture Register is 16-bit in size. To ensure that both the
high and low bytes are read simultaneously
when the CPU accesses these registers, the access is
performed using an 8-bit temporary High Byte Register
(TEMP). This temporary register is shared by all the other 16-bit
registers)