Gast
#521740
Hallo,
ich habe ein Problem mit dem Timer2. Ich habe versucht das USB-AVR Board
aus dem letzten Elektor auf einer einseitigen Eurokarte nachzubauen.
Dies hat auch so halbwegs geklappt, alleridings habe ich Probleme mit
der USB schnitstelle, da aber die Leitungen OK zu sein scheinen habe ich
mir gedacht das es eventuell an den Fuse-Bits liegen könnte (das der MC
eventell mit !=12Mhz läuft).
Naja da ich kein Oszilloskop habe habe ich versucht die Geschwindigkeit
wenigstens ansatzweise über einen Timer Interrupt zu überprüfen.
Hierzu mein Code:
int main(void)
{
// setup for port A
DDRA = 0x00; //PORTA all pins input
PORTA = 0x00; // switch off all pull up resistors
// setup for port B
DDRB = 0xff; //PORTB all pins output
PORTB = 0x00; // switch off all pins
// setup for port D
PORTD = 0x00; // no pullups on USB pins on PORTD
DDRD &= ~(1 << PD2) | ~USBMASK; // PD0, PD1 and INT0 as Input
DDRD &= ~(1 << PD7); // P7 Input
DDRD &= ~(1 << PD6); // P6 Input
DDRD &= ~(1 << PD5); // P5 Input
DDRD &= ~(1 << PD3); // P3 Input
//Mein Timer Code
TCCR2 = (1<<CS22) | (1<<CS20); //12Mhz/1024 f=11718,75 Hz
TCNT2 = (255-117); //11718,75kHz/117=~ 100 Hz
TIMSK |= (1<<TOIE2);
sei();
return 0;
}
//mein interrupt
uint8_t counter=0;
SIGNAL(SIG_OVERFLOW2)
{
counter++;
TCNT2 = (255-117); // Nachladen
if(counter==100) {
PORTB &= ~(1<<PB0);//LED AUS (+Relaise)
}
if(counter ==200) {
counter=0;
PORTB |= (1<<PB0);//LED AN+ (+Relaise)
}
}
//-------
Die Rechnung ist zwar nicht ganz exakt, aber ich bekomme eine höhere
frequentz raus. Eine niedrigere hätte ich ja erwartet aber naja... Meine
Frage ist jetzt: Sieht jemand irgendwelche offensichtliche Fehler in
meinem Code?
mfg.: Andre
