Hallo,
ich habe ein Programm für einen Atmega48 geschrieben welches mir ein Signal mit welchselden Impulslängen erzeugen soll. Bis zu 2 Werten klappt alles wunderbar und ich bekomme ein sauberes Signal. Nur sobald es mehr werden überlagern sich die Signale. Hat jemand ne Ahnung woran das liegen kann....??
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char Preloads[] = {15, 100, 20, 100, 20, 100, 20, 100, 20, 100, 20, 100, 5, 100, 5, 200};
unsigned char NrOverflow = 0;
ISR(TIMER2_COMPA_vect)
{
PORTB =~ PORTB; // PORTB inventieren
NrOverflow++;
if( NrOverflow == 16)
NrOverflow = 0;
OCR2A = Preloads[ NrOverflow ]; // Den Timer damit laden
}
int main()
{
DDRB = 0xFF; // PORTB als Ausgang schalten
PORTB = 0x00; // Alle Ausgaenge auf 0 schalten
TCCR2B |= (1 << CS21); // Teiler 8
TCCR2A |= (1 << WGM21); // CTC Modus
TIMSK2 |= (1 << OCIE2A); // Timer 2 Compare Interrupt enable
sei(); // Interrupts einschalten
while(1); //ever
}
Gruß Funky
Lesezeichen