Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ATtiny2313, 20MHz
- #define F_CPU 20000000UL
- #include <avr/io.h>
- //#include <util/delay.h>
- #include <avr/interrupt.h>
- #include <avr/pgmspace.h>
- #define pwmout 5
- // TCCRxX
- #define WGMx0 0
- #define WGMx2 3
- #define COMxB0 4
- #define CSx0 0
- // TIMSK
- #define OCIE1A 6
- #define OCIE1B 5
- typedef unsigned char uint8;
- typedef unsigned short uint16;
- volatile uint8 i;
- const uint8 wavetable[340] PROGMEM = {
- 0x82, 0x86, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x8D, 0x95, 0x96, 0x95, 0x95, 0x95,
- 0x95, 0x95, 0x95, 0x94, 0x97, 0xA0, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xAA,
- 0xB3, 0xB4, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB2, 0xB4, 0xBD, 0xC3, 0xC2, 0xC2, 0xC2, 0xC2,
- 0xC1, 0xC1, 0xC1, 0xC0, 0xC6, 0xCD, 0xCF, 0xCE, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCC, 0xCE, 0xD5,
- 0xDA, 0xDA, 0xD9, 0xD9, 0xD9, 0xD9, 0xD8, 0xD8, 0xD7, 0xDC, 0xE3, 0xE5, 0xE4, 0xE4, 0xE4, 0xE4,
- 0xE4, 0xE3, 0xE2, 0xE4, 0xEA, 0xF0, 0xF0, 0xEF, 0xEF, 0xEF, 0xEF, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
- 0xED, 0xED, 0xED, 0xED, 0xED, 0xEC, 0xEC, 0xED, 0xEB, 0xE5, 0xDE, 0xDD, 0xDE, 0xDE, 0xDD, 0xDD,
- 0xDD, 0xDD, 0xDD, 0xDA, 0xD2, 0xCE, 0xCF, 0xCF, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xC8, 0xC1,
- 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF, 0xBF, 0xC0, 0xBD, 0xB5, 0xB1, 0xB1, 0xB2, 0xB1, 0xB1, 0xB1,
- 0xB1, 0xB2, 0xB1, 0xAB, 0xA2, 0xA0, 0xA1, 0xA1, 0xA1, 0xA1, 0xA0, 0xA0, 0xA1, 0x9F, 0x96, 0x90,
- 0x90, 0x91, 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x8B, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x80, 0x81, 0x80, 0x78, 0x71, 0x71, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x73, 0x6D, 0x64, 0x61,
- 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x63, 0x62, 0x5A, 0x53, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53,
- 0x54, 0x55, 0x50, 0x47, 0x43, 0x44, 0x45, 0x45, 0x45, 0x45, 0x45, 0x46, 0x45, 0x3C, 0x33, 0x32,
- 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x31, 0x26, 0x21, 0x22, 0x23, 0x23, 0x23, 0x23, 0x23,
- 0x24, 0x24, 0x1C, 0x12, 0x11, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x14, 0x11, 0x06, 0x01, 0x01,
- 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x06,
- 0x05, 0x08, 0x13, 0x1A, 0x1A, 0x19, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x21, 0x2C, 0x2F, 0x2E,
- 0x2E, 0x2E, 0x2E, 0x2F, 0x2F, 0x2E, 0x30, 0x3A, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42,
- 0x42, 0x48, 0x53, 0x57, 0x55, 0x55, 0x56, 0x56, 0x56, 0x56, 0x55, 0x57, 0x5F, 0x66, 0x67, 0x66,
- 0x66, 0x66, 0x66, 0x66, 0x66, 0x65, 0x6A, 0x73, 0x77, 0x76, 0x76, 0x76, 0x76, 0x76, 0x77, 0x76,
- 0x77, 0x7E, 0x85, 0x85
- };
- ISR(TIMER1_COMPA_vect) {
- OCR0B = pgm_read_byte(wavetable+i);
- if(i!=339) {
- i++;
- }
- else {
- i=0;
- }
- }
- int main(void) {
- DDRD |= (1 << pwmout);
- PORTD |= (1 << pwmout);
- TCCR0A |= (3 << WGMx0); // 0-normal, 1-phase correct pwm ,2-ctc, 3-fast pwm
- TCCR0A |= (3 << COMxB0); // ^ V
- TCCR0B |= (1 << CSx0); // clock source - CPU/1
- TCCR1B |= (1 << WGMx2); // CTC mode
- TCCR1B |= (1 << CSx0); // clock source - CPU/8
- TIMSK |= (1 << OCIE1A); // enable timer1 compA interrupt
- OCR1A = 57; // 44100kHz (57)
- // OCR1A = 169; // 14714kHz
- i=0;
- sei();
- while(1) {
- asm("nop");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement