www.mikrocontroller.net

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


Autor: Gerhard G. (ge1ge)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
/* Wird vom 16 Bit Timer ausgelöst, wenn dieser den Vergleichwert erreicht
   Wird in TIC fuer incremental_value verwendet (Gerhard)
*/
ISR (TIMER1_COMPA_vect)
{
  /*Die Incremental_value wird durch den 16bit-counter1 erzeugt
  */
...
  time_number++;   // nächste LEDx der Bargraphanzeige auswählen
...  
}

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

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

  TCCR1B |= (1<<CS11) | (1<<WGM12);//Timer1 mit Div8 starten (CS11)
                                          //Clear Counter on Compare Match
  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?

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein dass das CKDIV8-Fuse gesetzt ist? Mal so geraten...

Autor: Gerhard G. (ge1ge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis.

Ja das CKDIV8-Fuse war gesetzt.

Autor: Di Pi (drpepper) Benutzerseite
Datum:

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

Autor: Gerhard G. (ge1ge)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gerhard G. (ge1ge)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.