Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <util/delay.h>
- #include <avr/sleep.h>
- #include <avr/pgmspace.h>
- #include "sound.h"
- // create prototype function
- void TimerInit();
- void PWMInit();
- // global variable here
- volatile uint16_t cnt_snd=0;
- /*
- pada mode ctc interupsi yang berpengaruh adalah compare match
- karena tcnt tidak pernah mencapai level max(0xFF) tetapi
- mencapai level TOP yaitu sama dengan nilai dari output compare
- */
- /*
- prescaller 8 , Xtal 16MHz
- tick = 8/16Mhz= 0.5 us
- delay=counter*tick
- delay=counter*0.5us
- untuk sampling rate 8 khz maka Tsampling= 1/8Khz= 125us
- counter = 125/0.5us = 250
- */
- ISR (TIMER1_COMPA_vect)
- {
- PORTB ^= (1 << PB7); // pin 13 Arduino
- OCR3A=~pgm_read_byte(&salam_raw[cnt_snd]);
- if (cnt_snd==salam_raw_len-1) {
- cnt_snd=0;
- _delay_ms(200);
- } else {
- cnt_snd++;
- }
- }
- int main(void) {
- DDRB |=_BV(DDB7); //LED output
- TimerInit(); /// schedule 10ms
- PWMInit();
- sei();
- /// enable global interupsi
- while (1) {
- sleep_mode(); // sleep
- }
- }
- void TimerInit() {
- TCCR1B |= _BV(WGM12); // CTC
- TCCR1B |= _BV(CS11); //prescaller 8
- OCR1A = 250 ; // delayms
- TIMSK1 |= (1 << OCIE1A); // enable compare match interrupt
- }
- void PWMInit(){
- DDRE= _BV(PE3); //activate PWM output
- TCCR3B = _BV(CS30); //prescaller 1
- TCCR3B |= _BV(WGM32); //Fast PWM 8 Bit on Timer3
- TCCR3A |= _BV(WGM30);
- TCCR3A |= _BV(COM3A1); //non inverting
- OCR3A=128; // test PWM
- }
Advertisement
Add Comment
Please, Sign In to add comment