mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Atmega48 Timer


Autor: klingel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich bin noch ein ziemlicher Neuling in diesem Gebiet, mir hat jetzt auch 
kein anderer Beitrag aus dem Froum weitergeholfen, deshalb frage ich nun 
endlich.

Ich arbeite ein wenigs das AVR-GCC-Tutorial hier durch, und wollte es 
nun hinbekommen,dass meine LED bis 9 zählen im sekunden abstand. Mein 
Quellcode dazu:
#include <avr/io.h>
#define Byte unsigned char

void delay_ms(int ms) ;

int main(void)
{
  DDRB=0xFF;
  Byte zahl=0;

  while(1) {
    while (zahl<10) {
      PORTB = 0xFF-zahl;
      zahl++;
      delay_ms(1000);
    }
  }
  return 0;
}

void delay_ms(int ms) {

  TCCR0B |= (1<<CS01) | (1<<CS00) ;
  int i ;
  for(i=0; i<ms; i++) {

    while(TCNT0<156) ;
    TCNT0=0;
  }
  TCCR0B=0;
}

Leider brauche ich aber für eine sekunde ca. 10s. Also anders gesagt, 
ich muss davon ausgehen, dass ich nur einen CPU Core von 1MHz habe, 
damit ich eine sekunde rausbekommen, bei meinem Quellcode.
Kann mir jemand vielleicht sagen, woran es liegt?

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Fuse für die Clockgeneration könnte auf den internen RC Oszillator 
gestellt sein, anstatt auf das Quarz. Das ist sogar die 
Defaulteinstellung.

Dann hast du etwaa 1MHz.

Peter

Autor: klingel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, schon mal vielen Dank für die schnelle Antwort! Leider kenne ich 
mich damit noch nicht aus, kann mir jemand vielleicht einen Link geben 
wo ich mir das mal durchlesen kann?

Autor: Peter Diener (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Fuses stellst du mit deinem Programmer ein, idR. nachdem du das 
Hexfile reingeladen hast.

Welche Software nimmst du dazu? (Ponyprog, AVRISP, AVRPROG, AVRDUDE, 
Galep...)

Wie die Fuses gesetzt gehören, steht im Datenblatt des Controllers unter 
dem Punkt Memory Programming. Von hier wird dann auf einpaar weitere 
Kapitel verwiesen.


Peter

Autor: klingel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich benutze das AVR Workpad, bei meinem mySmartUSB dabei.
Also habe jetzt mal im Datenblatt ein bisschen was gelesen, mein 
RC-Oszillator hat 8Mhz, also müsste es ja eigentlich auch in die 
Richtung 1s gehen. Es sie denn die 8Mhz sind durch 8 geteilt, aber ich 
verstehe nicht genau unter welcher Bedingung das passiert, aus dem 
Datenblatt:

3. If 8 MHz frequency exceeds the specification of the device (depends 
on VCC), the
CKDIV8 Fuse can be programmed in order to divide the internal frequency 
by 8.

Autor: klingel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, habe jetzt gesehen, dass mein Programmer, ein RC Takt standartmäßig 
durch 8 teilt... des erklärt ja dann einiges..

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.