Forum: Mikrocontroller und Digitale Elektronik Zeitabstand 8 mal größer als erwartet


von Gerhard G. (ge1ge)


Angehängte Dateien:

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?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Kann es sein dass das CKDIV8-Fuse gesetzt ist? Mal so geraten...

von Gerhard G. (ge1ge)


Lesenswert?

Danke für den Hinweis.

Ja das CKDIV8-Fuse war gesetzt.

von Di P. (drpepper) Benutzerseite


Lesenswert?

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

von Gerhard G. (ge1ge)


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.

von Jan (Gast)


Lesenswert?

weiter hacken!
Oder in den Garten gehen und harken!
Oder verstehen, was die Haken bedeuten!

von Gast (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Gerhard G. (ge1ge)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.