Sajnos úgy beállítani a három timert, hogy azok teljesen egyforma frekvencián menjenek, az nagyon nehéz. A 8 bites és a 16 bites nagyon más.
Az előbbi kódnál még az is a problémám, hogy ha a TCNT regiszterek állítása átkerül a loop-ba, akkor már a fázisok össze vissza tolódnak, ahogy éppen a program beböki az aktuális fázisszöget. Ahhoz, hogy jó legyen, ahhoz a TCNT regisztert mindig 0 fázisszögnél kellene átírni. De ha a program éppen olyankor írja át a regisztert, amikor nem 0 fázisszögnél áll, akkor összeadódnak, és szétcsúszik az együtt futás. Hiába azonos a frekvencia, az elcsúszó fázisszög miatt egy massza van a szkópon.
Arduino Timer/Counter
Re: Arduino Timer/Counter
Ilyenkor kel másik HW. után nézni!
Pl.: az arduino Mega, vigan el látná a feladatot:
• Peripheral Features
– Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
– Four 16-bit Timer/Counter with Separate Prescaler, Compare- and Capture Mode
– Real Time Counter with Separate Oscillator
– Four 8-bit PWM Channels
– Six/Twelve PWM Channels with Programmable Resolution from 2 to 16 Bits
4 * 16-bit timer! Az első vezérelhetné interuptban a másik 3 indítását.

Pl.: az arduino Mega, vigan el látná a feladatot:
• Peripheral Features
– Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode
– Four 16-bit Timer/Counter with Separate Prescaler, Compare- and Capture Mode
– Real Time Counter with Separate Oscillator
– Four 8-bit PWM Channels
– Six/Twelve PWM Channels with Programmable Resolution from 2 to 16 Bits
4 * 16-bit timer! Az első vezérelhetné interuptban a másik 3 indítását.
Re: Arduino Timer/Counter
Timerek beállít és a start timerrel - közel egyidőben indítható.
(közel: néhány tized usec az utasításvégrehajtás)
(közel: néhány tized usec az utasításvégrehajtás)
Re: Arduino Timer/Counter
Igen, a Mega jó lenne. Kár, hogy megaméretű.
Kis vargabetűvel megoldottam a problémát.
A korrekt jelalakhoz szükségem lesz arra, hogy XOR kapuval összekapuzzam a 0, és a 2-es timerek kimeneteit, mivel a kimenetén lévő PWM jelből így tudom csak kiszedni a megfelelő jelet. De még mindig kisebb vagyok egy Nanoval, és egy 14 lábú IC-vel, mint a Mega.
Kis vargabetűvel megoldottam a problémát.
Kód: Egész kijelölése
void setup()
{
TCCR1A = 0;
TCCR1B = 0;
OCR1A = 512;
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
TCCR1A = _BV(WGM10) | _BV(COM1A0);
TCCR1B = _BV(WGM13) | _BV(CS10);
pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM10) | _BV(WGM11);
TCCR2B = _BV(CS21);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
TCCR0A = _BV(COM0A1) | _BV(WGM00) | _BV(WGM01) | _BV(COM0B1);
TCCR0B = _BV(CS01);
}
void loop()
{
OCR2A = (45);
OCR2B = (45 + 126);
OCR0A = (100);
OCR0B = (100 + 126);
}Re: Arduino Timer/Counter
Új IC: ATMega328PB : belül 2 timer kapuzva van 