Probleme mit Atmega48 Timer

Gast #1062048
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:
1
#include <avr/io.h>
2
#define Byte unsigned char
3

4
void delay_ms(int ms) ;
5

6
int main(void)
7
{
8
  DDRB=0xFF;
9
  Byte zahl=0;
10

11
  while(1) {
12
    while (zahl<10) {
13
      PORTB = 0xFF-zahl;
14
      zahl++;
15
      delay_ms(1000);
16
    }
17
  }
18
  return 0;
19
}
20

21
void delay_ms(int ms) {
22

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

27
    while(TCNT0<156) ;
28
    TCNT0=0;
29
  }
30
  TCCR0B=0;
31
}

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?
Gast #1062065
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
Gast #1062152
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.

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