65536/(717-307) = 159 + Angstfaktor = 161.
Der A/D Wandler liefert Werte zwischen 307 und 717 (rechnerisch).
Aber ich glaub mit ein bischen Überlegen wärst Du auch selber drauf gekommen.
Druckbare Version
65536/(717-307) = 159 + Angstfaktor = 161.
Der A/D Wandler liefert Werte zwischen 307 und 717 (rechnerisch).
Aber ich glaub mit ein bischen Überlegen wärst Du auch selber drauf gekommen.
Hallo ,
Ich hab diesen Code geschrieben , am anfang gings mit dem PWM Signal aber jetzt kommt nur 0V von PD5 woran kann es liegen dh es gibt kein PWM signal mehr??
MErci
Code:#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#define F_CPU 4433618UL //Oscillator-frequenz in Hz
#define BAUD 19200UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
/* LED */
#define LED 4 //PIN 5 vom PORTA als LED nennen
#define LED_ON PORTA |= (1 << LED ) //PIN5 HIGH
void init_led (void)
{
DDRA |= (1 << LED); //PIN5 von DDRA als ausgang
}
/* ADC */
#define ADC_PIN 0 //PIN 0 vom PORTA als ADC nennen
void adc_init(void)
{
DDRA &= ~(1 << ADC_PIN); //PIN 0 vom PORTA als Eingang
ADMUX = ADC_PIN; //AD-Wandlerkanal 0 (ADC0) auswählen
ADMUX |= (1<<REFS0); //AVCC als Referenzspannung
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS0); //AD-Wandler einschalten und Prescaler = 32 einstellen
}
#define start_a2d ADCSRA |= (1<<ADSC) //Wandlung starten
/* PWM */
// PORT AND PIN CONFIGURATION
#define PWM_PIN 5
void pwm_init(void)
{
DDRD |= (1 << PWM_PIN);
// normale 10-bit Fast PWM aktivieren (nicht invertiert),
TCCR1A = (1<<COM1A0)|(1<<WGM11)|(1<<WGM10);
// Einstellen der PWM-Frequenz auf 4 kHz (Prescaler = 1024)
TCCR1B = (1<< CS12) | (1<<CS10) |(1<<WGM12);
// Interrupts für Timer1 deaktivieren
TIMSK &= ~0x3c;
}
int main(void) {
uint16_t adc_result;
uint16_t z;
uint32_t y;
init_led();
adc_init();
pwm_init();
while(1)
{
LED_ON;
start_a2d;
while ( !(ADCSRA & (1<<ADIF))); //Warten bis die AD-Wandlung abgeschloßen ist
adc_result = ADCL | (ADCH<<8) ; //AD-Wert auslesen
y = adc_result/1024 ;
z= ((y*1023)/716)*1024;
OCR1A = z;
}
}
Miss doch erst mal die Spannung die dein Temperaturfühler abgibt.
Liegt die im zulässigen bereich sollte auch der A/D Wandler vernünftige Werte haben.
Lade das Comparematchregister mit einem festen Wert z.B. 32000.
Dann sollte eine PWM von ca. 50% rauskommen.
Kommt nichts raus, stimmt entweder deine Initialisierung nicht, oder der Port D5 ist defekt. Dann solltest Du aber mal deine Beschaltung an dem Pin überprüfen.
Wenn sich bei 32000 ein PWM Signal einstellt stimmt mit dem ADC Initialisierung, Hardware was nicht, oder in deiner Formel ist ein Fehler.