Zeitabstand 8 mal größer als erwartet

OP #1036449
Lesenswert?

Hallo,

ich habe das USB-162 aus dem Shop und möchte alle 30ms einen Interrupt 
erzeugen. Hierzu benutze ich den 16bit-Counter1.

Näheres zum TIC-Projekt:
http://vouswelt.com/index.php?title=TIC

Aber irgendwie ist er 8mal langsamer als erwartet.
Programmauszug TIC_V0.7:
1
/* Wird vom 16 Bit Timer ausgelöst, wenn dieser den Vergleichwert erreicht
2
   Wird in TIC fuer incremental_value verwendet (Gerhard)
3
*/
4
ISR (TIMER1_COMPA_vect)
5
{
6
  /*Die Incremental_value wird durch den 16bit-counter1 erzeugt
7
  */
8
...
9
  time_number++;   // nächste LEDx der Bargraphanzeige auswählen
10
...  
11
}
12

13
int main(void)
14
{
15
...
16
uint16_t increment_value = 3000;  // Wert kann 1 bis 60000 sein
17
    // entspricht 1 - 60000µs, wenn Vorteiler auf 8
18
                  // in Wirklichkeit ergibt 3000 nicht 3ms sondern ca. 24ms
19
                  // WARUM?????
20
...
21
// Init 16 bit Counter und Freigabe timerinterrupt
22
  OCR1A = (uint16_t)(increment_value);// Vergleichwert mit
23
                                             //increment_value laden 
24
                       // Takt= 8MHz/8
25
  TIMSK1 |= (1<<OCIE1A); 
26
         // Interrupt wenn Timer Vergleichswert erreicht
27

28
  TCNT1=0;             // Timer1 zurücksetzen
29
  TCCR1B = 0;    //zusätzlich TCCR1B reseten
30

31
  TCCR1B |= (1<<CS11) | (1<<WGM12);//Timer1 mit Div8 starten (CS11)
32
                                          //Clear Counter on Compare Match
33
  sei();    // IRQ Behandlung ein
Ende Programm_Auszug++++++++++++++++++

Ich vertehe nicht, warum nicht alle 3ms (sondern 24ms) der Interrupt 
kommt, obwohl Vorteiler /8 bei 8Mhz Quarz (=1µs) und OCR1A auf 3000 
gesetzt ist?
Angehängte Dateien:
OP #1036568
Lesenswert?

Habe das STK500 und AVR-Studio 4
Aber kann die Fuse CKDIV8 nicht löschen.

Die Signatur kann ich einwandfrei lesen.

Bei Fuse_Register und Entfernen des Hackens bei CKDIV8 kommt nach 
Drücken von Program ein ISP error.

Hab dann nur den Hacken bei CKDIV8 entfernt und im Auto-Register den 
Hacken nur bei Program Fuses gesetzt und Start gedrückt. Aber das CKDIV8 
ist immer noch nicht gelöscht.
Gast #1036680
Lesenswert?

Experimentier mal ein wenig mit der ISP-Geschwindigkeit, die Du auf dem 
ersten Reiter einstellen kannst. Allgemein heißt es, dass die 
ISP-Geschwindigkeit mit schneller als 1/4 CLK sein darf. Ich habe aber 
auch schon festgestellt, dass ein zu langsamer ISP-Speed auch nicht 
funktioniert.
Moderator Persönliche Seite #1036690
Lesenswert?

Da Pep wrote:
> ich halte es sowieso für quatsch, dass das von haus aus gesetzt ist :/

Das zeigt aber nur, dass du nicht bis zu Ende gedacht hast -- im
Gegensatz zu den AVR-Entwicklern.  Andernfalls hätten sie die Fuse
nämlich gar nicht gebraucht, da man das ja immer zur Laufzeit über
CLKPR ändern kann.

In dem Moment, wo alle AVRs auch bei minimaler zulässiger Betriebs-
spannung mit voller Taktfrequenz laufen können, wird CKDIV8 überflüssig.
Bis das mal soweit ist, wird sie noch gebraucht.
OP #1037349
Lesenswert?

Hallo,
mit STK500 und AVR-Studio war löschen des CKDIV8-Fuse nicht möglich.

Bekam den Tipp, den gesamten MC zu "löschen" und damit auch die 
Fuse-bits. Hab es nicht gemacht, da ich dann den Bootloader auch wieder 
laden muß, und wer weiß, was dann nicht geht.

Hat einer von euch die CKDIV8 im AVR_AT90USB162 mit dem STK500 löschen 
können?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren