我正在使用ATMEGA32
和Crystal 16MHz
。
我已經寫下面的代碼來生成1kHz
波。ATMEGA32熔絲位設置,低熔絲和高熔絲,16MHz,外部晶振?
我試着寫Low- 0xFF
High-0x99
但我無法得到1kHz wave
。我得到250Hz wave
。而不是1kHz
。
請幫忙。
#define F_CPU 16000000UL
#include <avr/io.h> //io related
#include <util/delay.h> //delay
#include "lcd.h" //custom lib for lcd
#include <stdlib.h> //for string handling
#ifndef sbit_h
#define sbit_h
int main(void)
{
//All Declarations Go here.
OCR0=p*127/100; //set pwm1 duty cycle
OCR2=OCR0; //set pwm2 duty cycle (Output compare register)
while(1)
{
if ((bit_is_set(PIND, 3)))
{
pinChange(LED8,1); //Turn on solenoid valve
pinChange(LED1,1);
//PORTC|=(1<<PC3);
_delay_ms(sq); //wait for squeeze time
TCCR0 |= (1<<WGM00)|(1<<COM01)|(1<<WGM01)|(1<<CS01)|(1<<CS00);
//initialise timer in PWM mode 1kHz//cs00 and cs02
_delay_us(500);//90 degree phase shift
TCCR2 |= (1<<WGM20)|(1<<COM21)|(1<<WGM21)|(1<<CS22); //initialise timer2 in PWM mode 1kHz//CS22 for 1kHz
_delay_ms(w1); //wait until weld time over
TCCR0=0x00; //stop PWM1
TCCR2=0x00; //Stop PWM2
_delay_ms(h); //wait for hold time
pinChange(LED8,0); //turn off solenoid valve
pinChange(LED1,0);
TCNT0=0x00; //Reset timer counter
TCNT2=0x00; //reset timer counter
}
}
也許,計時器使用分頻時鐘作爲輸入,您可以以某種方式配置除數。看看你的數據表。 –
它與該套件隨附的以前的ATMEGA32芯片工作良好。 我從不費心檢查/更換熔絲位。 但是,那個由於某個問題而燒燬。所以我不得不買一個新的。代碼相同,電路相同。我相信它與熔絲位設置有關。 我參考數據表,並根據數據表將0xFF和0x99設置爲熔絲位。但不幸的是,問題仍然存在。 –