Auf dem AVR ist wirklich nur der Code, um PWM zu machen.
Und die erste und zweite Messung ist die selbe. Nur einmal mit nem Digital Analyzer und einmal mit nem Oszi.
Und es macht auch keinen Unterschied, ob ich das PWM von der Hardware machen lasse oder im Interrupt den Pin toggle.
Weiterhin ist mir aufgefallen, wenn ich an dem Run/Stop Kopf spiele, ist diese "Störfrequenz" weg. Also wenn ich die Aufnahme anhalte.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert
(z.B. durch Übergabe als Parameter zum Compiler innerhalb
des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
"nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
#define F_CPU 16000000UL /* Quarz mit 3.6864 Mhz */
#endif
#include <util/delay.h>
volatile int command_h = 0;
volatile int command_l = 0;
volatile int mhh = 0;
volatile int mhl = 0;
volatile int mlh = 0;
volatile int mll = 0;
volatile int tmp_shift = 0;
volatile int puls_counter = 0;
volatile int shift_counter = 0;
volatile int byte_counter;
volatile int ubertrgung_aktiv = 0;
volatile int halb_bit_counter = 0;
volatile int command [4];
volatile int command_num = 0;
volatile int bit = 0;
SIGNAL(TIMER1_COMPA_vect){// TIMER2_COMP_vect
static int tmp = 0;
if (tmp == 0) tmp = 2;
else tmp = 0;
PORTB = tmp;
}
int main (void)
{
int n = 0;
TCCR1A |= (0<<COM1A1)|(1<<WGM11);
TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS10);
ICR1 = 1000;
OCR1A = 500;
DDRB |= 0b00001111;
TIMSK = 0b00010000;
main2:
sei();
cli();
_delay_ms(100);
goto main2;
return 0;
}
Lesezeichen