Zdravím.
mám program pro generování signálu pomocí PWM v ATMEGA 8L.
Program funguje,ale nyní nevím, jak změnit původní výstupní frekvenci 100Hz na menší- přibližně 1-2 Hz. Bohužel při změně hodnoty TCCR1B se mi mění i vzorkovací frekvence, čímž se zhoršuje i kvalita signálu na výstupu.
Program je postavený podle jednoho DDS generátoru, kdy si to hodnoty an výstup PWM bere z tabulky 256 hodnot. ATMEGA 8L je nastavena an Fint = 1MHz
Můžete mi někdo pomoci, jak frekvenci změnit?
Děkuji
[code]#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr/pgmspace.h>
const uint8_t plethysmcurve] PROGMEM= //256 hodnot
{
0x0,0x3,0x6,0x9,0xC,0xF,0x12,0x15,0x18,0x1B,0x1E,0x21,0x24,0x27,0x2A,0x2D,
0x30,0x33,0x36,0x39,0x3C,0x3F,0x42,0x45,0x48,0x4B,0x4E,0x51,0x54,0x57,0x5A,0x5D,
0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x75,0x78,0x7B,0x7E,0x81,0x84,0x87,0x8A,0x8D,
0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,0xB1,0xB4,0xB7,0xBA,0xBD,
0xC0,0xC3,0xC6,0xC9,0xCC,0xCF,0xD2,0xD5,0xD8,0xDB,0xDE,0xE1,0xE4,0xE7,0xE9,0xEB,
0xEC,0xEF,0xF0,0xF1,0xF3,0xF4,0xF5,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFC,0xFD,0xFE,
0xFE,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFA,0xF9,0xF8,0xF7,0xF6,0xF5,0xF5,
0xF3,0xF2,0xF1,0xF1,0xF0,0xEE,0xEC,0xEB,0xEA,0xE9,0xE8,0xE6,0xE4,0xE2,0xE0,0xDE,
0xDC,0xDA,0xD8,0xD6,0xD4,0xD2,0xD0,0xCE,0xCC,0xCA,0xC8,0xC6,0xC4,0xC2,0xC0,0xBE,
0xBC,0xBA,0xB8,0xB7,0xB5,0xB4,0xB4,0xB5,0xB6,0xB7,0xB8,0xBA,0xBB,0xBD,0xBE,0xC0,
0xC1,0xC3,0xC4,0xC5,0xC6,0xC8,0xC9,0xCB,0xCC,0xCD,0xCE,0xCE,0xCE,0xCD,0xCD,0xCC,
0xCB,0xCA,0xC8,0xC6,0xC6,0xC4,0xC3,0xC1,0xBF,0xBD,0xBC,0xBA,0xB8,0xB6,0xB4,0xB2,
0xB0,0xAE,0xAC,0xAA,0xA8,0xA6,0xA4,0xA2,0xA0,0x9E,0x9C,0x9A,0x98,0x96,0x93,0x90,
0x8D,0x8A,0x87,0x84,0x81,0x7E,0x7B,0x78,0x75,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,
0x5D,0x5A,0x57,0x54,0x51,0x4E,0x4B,0x48,0x45,0x42,0x3F,0x3C,0x39,0x36,0x33,0x30,
0x2D,0x2A,0x27,0x24,0x21,0x1E,0x1B,0x18,0x15,0x12,0xF,0xC,0x9,0x6,0x3,0x0,
};
uint8_t i=0;
ISR(TIMER1_COMPA_vect)
{
OCR1A=pgm_read_byte(&plethysmcurve*);
i++;
}
int main(void) {
DDRD=0x00; //Port D pins nastaví jako výstupní
PORTD=0xFF; //nastavení interních pull ups odporů
DDRB=0xFF; //nastaví PORTB- B1 pinu jako výstupní
OCR1A=80; // inicializace OCR1A hodnoty
//Output compare OC1A 8 bit non inverted PWM
TCCR1A=0x91; //spustí časovač bez předděličky (start timer without prescaler )
TCCR1B=0x01; //enable output compare interrupt for OCR1A
TIMSK=0x10; //enable global interrups
sei();
while (1)
{
//nekonečná smycka,preruseni pracuje
}
}
[/code]
administrator: přejmenováno z “pomoc s PWM”*