私はATMEGA32
とクリスタル16MHz
を使用しています。
私は1kHz
waveを生成するために次のコードを書いています。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チップでFineが動作していました。 私は決してヒューズビットをチェック/変更するのに気にかけませんでした。 しかし、それは何らかの問題のために燃えていました。私は新しいものを買わなければならなかった。 コードは同じで、Circuitは同じです。 ヒューズビットの設定と関係があると確信しています。 私はデータシートを参照し、データシートに従ってヒューズビットとして0xFFと0x99を設定します。しかし、残念ながら、まだ問題は残っています。 –