我正在使用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设置为熔丝位。但不幸的是,问题仍然存在。 –