Forum: Mikrocontroller und Digitale Elektronik Wieder mal Ein Timer (atmega 32 stoppuhr)


von Benjamin (Gast)


Lesenswert?

Hallo ich verfolge nun seit wochen dieses Forum und versuche immer 
wieder mit dem Timer zu arbeiten. ich muss dazu sagen das ich nicht der 
talentierteste bin und sicher oft sehr umständliche wege wähle. nun 
jedoch wende ich mich in der Hoffnung an euch das ihr weiterhelfen könnt 
und vorallem wollt.

zu meinen Problemen: schon beim start bleibt er am anfang der Main 
funktion hängen und will gar nicht in while schleifen, gelinde gesagt 
befürchte ich das dies nicht das einzige problem ist (mal abgesehen 
davon das es vielleicht etwas umständlich ist) vielleicht mag mir da 
jemand helfen.

1
//Includedateien
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include <stdint.h>
5
6
//Variablen für die Zeit
7
unsigned int ms=0;
8
unsigned int s=0;
9
unsigned int hs=0;
10
 
11
int main(void)
12
{
13
14
while(1)
15
{
16
17
  if(PINA & 1<<PINA0)
18
  {
19
20
    TCNT0=0x00;
21
    OCR0=0xFF;
22
23
    TIMSK=(1<<TOIE0);
24
25
    TCCR0|=((1<<CS01));
26
27
    sei();
28
    
29
30
      while(1)
31
    { 
32
      if(PINA & 1<<PINA5)
33
      {
34
        TCCR0=(0<<CS00);
35
        DDRA=0xFF;
36
        PORTA=s;
37
        
38
        while(1)
39
        {
40
          if (PINA & 1<<PINA6)
41
          {
42
            PORTA=0x00;
43
            if(ms<100)
44
            { hs=0; }
45
46
            else if(100<=ms && ms<200)
47
            { hs=1; }
48
49
            else if(200<=ms && ms<300)
50
            { hs=2; }
51
52
            else if(300<=ms && ms<400)
53
            { hs=3; }
54
55
            else if(400<=ms && ms<500)
56
            { hs=4; }
57
58
            else if(500<=ms && ms<600)
59
            { hs=5; }
60
61
            else if(600<=ms && ms<700)
62
            { hs=6; }
63
64
            else if(700<=ms && ms<800)
65
            { hs=7; }
66
67
            else if(800<=ms && ms<900)
68
            { hs=8; }
69
70
            else
71
            { hs=9; }
72
73
            PORTA=hs;
74
75
            while(1)
76
            {
77
              if (PINA & 1<<PINA7)
78
              {
79
                ms=0;
80
                s=0;
81
                PORTA=0x00;
82
                break;
83
              }
84
            }
85
          }
86
        }
87
      }
88
89
     }
90
91
  }
92
93
}
94
}
95
 
96
//#ifndef TIMER0_OVF_vect
97
// Für ältere WinAVR Versionen z.B. WinAVR-20071221 
98
//#define TIMER0_OVF_vect TIMER0_OVF0_vect
99
//#endif
100
101
102
ISR (TIMER0_OVP_vect)
103
{
104
  ms++;
105
    
106
  if(ms == 1000)
107
    {
108
        s++;
109
        ms = 0;
110
    }
111
112
}

: Verschoben durch User
von Benjamin (Gast)


Lesenswert?

Okay erstes problem gerade selber gelöst vorn kopf klatsch muss im 
simulator ja auch sagen das knopf gedrückt wurd. ^^

aber über einen allgemeinen Blick drüber wäre ich dankbar

von Peter (Gast)


Lesenswert?

> unsigned int ms=0;
> unsigned int s=0;
sie müssen volatil sein, weil du sie in der SIR setzt und in der main 
liest.

von Ansgar K. (paulderbademeister)


Lesenswert?

Überleg dir doch mal, wie sinnvoll die Schachtelung von Endlosschleifen 
ist.

von Benjamin (Gast)


Lesenswert?

okay die hinweise klingen schonmal logisch, was ich leider noch nicht 
raushabe (Win-AVR als Umgebung) wo ich auslesen oder erkennen wie weit 
die einzelnen Variablen gerade sind.

von Route_66 (Gast)


Lesenswert?

Hallo!

Heißt der Interrupt-Vector wirklich so?

> ISR (TIMER0_OVP_vect)

von Falk B. (falk)


Lesenswert?

Siehe Interrupt

von Route_66 (Gast)


Lesenswert?

Hallo!

@falk
>Siehe Interrupt

Meinst du mich? Ich dachte immer der Overflow-INT heißt nicht
TIMER0_OVP_vect sondern OVF...

von Falk B. (falk)


Lesenswert?

@  Route_66 (Gast)

>>Siehe Interrupt

>Meinst du mich?

Nein, den OP.

> Ich dachte immer der Overflow-INT heißt nicht
>TIMER0_OVP_vect sondern OVF...

Das ist auch so ;-)

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.