Ich verwende ATMEGA32
mit Crystal 16MHz
.
Ich habe folgenden Code geschrieben, um 1kHz
Welle zu generieren.ATMEGA32 Sicherungsbiteinstellungen, Low Fuse und High Fuse, 16MHz, Externer Quarz?
Ich versuchte Low- 0xFF
High-0x99
schreiben Aber ich bin nicht in der Lage 1kHz wave
zu bekommen. Ich bekomme 250Hz wave
. anstelle von 1kHz
.
Bitte helfen.
#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
}
}
Wahrscheinlich verwendet der Timer eine geteilte Uhr als Eingabe und Sie können den Teiler irgendwie konfigurieren. Schauen Sie in Ihr Datenblatt. –
Es funktionierte gut mit dem vorherigen ATMEGA32-Chip, der mit dem Kit geliefert wurde. Ich habe nie versucht, die Sicherungsbits zu überprüfen/ändern. Aber dieser brannte wegen irgendeines Problems. also musste ich ein neues kaufen. Code ist gleich, Schaltung ist gleich. Ich bin mir sicher, dass es etwas mit Fuse bit Settings zu tun hat. Ich habe auf Datenblatt verwiesen und 0xFF anf 0x99 als Sicherungsbits gemäß Datenblatt gesetzt. aber leider bleibt das Problem bestehen. –