Forum: Mikrocontroller und Digitale Elektronik Problem bei Timer und interruptsteuerung


von Daniel L. (daniel_l49)


Lesenswert?

Hallo zusammen!

ich habe hier ein problem
1
#include <avr/io.h>
2
#define F_CPU 4000000UL
3
#include <avr/interrupt.h>
4
#include <util/delay.h>
5
#include "lcd.h"
6
7
unsigned char x;
8
int main(void)
9
{  
10
    MCUCR  |=   (1<<ISC01);            // wenn fallende Flanke  am int0  
11
  GIMSK  |=   (1<<INT0);                // INT0 Interrupt freischalten
12
  TCCR0 = 0x03;
13
  TIMSK |= (1<<TOIE0);                 // overflow interrupt frei            
14
  DDRB = 0xff;           
15
  
16
  lcd_init(LCD_DISP_ON);                // lcd init  
17
    sei();                          // gobale interrups frei
18
  
19
  
20
  
21
  
22
  while(1)
23
    {
24
    /*unsigned char zeit , v ;
25
    char umwandlung [5];
26
    
27
    zeit = 0.2 * TCNT0 ;
28
    v = 20 / zeit;
29
    
30
    lcd_gotoxy(5,0);
31
    sprintf(umwandlung ,"%d" , v);
32
    lcd_puts(umwandlung);
33
    lcd_gotoxy(9,0);
34
    lcd_puts("m/s");*/
35
    
36
    if (x == 1)
37
    {
38
      PORTB = 0xff;
39
    }
40
       
41
     
42
    
43
    } 
44
}
45
46
ISR (INT0_vect)
47
{
48
  
49
  PORTB ^= (1<<PB5);
50
}
51
52
53
54
ISR(TIMER0_OVF_vect)
55
{
56
  
57
  x = 1;
58
  
59
}

dieses Programm sollte eine geschwindikeit von einem Rad messen , aber 
das kommt erst später.
mein problem : das progamm geht nicht in die ISR(TIMER0_OVF_vect) habe 
keine ahnung warum. kann doch nicht so schwierig sein . Für die meisten 
von euch wird das eine lächerliche Frage sein , aber ich bin noch 
anfänger und habe nicht sehr viel erfahrung

Mfg Daniel

von Stefan E. (sternst)


Lesenswert?

volatile

von Ingo (Gast)


Lesenswert?

Du musst deinen Timer starten bzw. Einen Prescaler zuweisen!

von Ingo (Gast)


Lesenswert?

Sorry, hast du ja gemacht! Volatile is hier das Stichwort für dein x

von Daniel L. (daniel_l49)


Lesenswert?

Wie funktioniert das wenn ich fragen darf

von Ingo (Gast)


Lesenswert?

Volatile unsigned char x = 0;

von Daniel L. (daniel_l49)


Lesenswert?

ich meinte den timer0 einschalten

von Ingo (Gast)


Lesenswert?

Datenblatt. Aber wenn ich mich nicht irre hat das jemand mit TCCR0 = 3 
bereits getan. Konntest du ja nicht wissen, is ja nicht dein sourcecode!

von Daniel L. (daniel_l49)


Lesenswert?

funktioniert iergendwie nicht

von Fragender (Gast)


Lesenswert?

Um welchen Controller handelt es sich? Ich finde keine Angabe im 
Posting.

von Daniel L. (daniel_l49)


Lesenswert?

oh tut mir leid.
es handelt sich um einen ATMEGA16

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.