mikrocontroller.net

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


Autor: Benjamin (Gast)
Datum:

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

//Includedateien
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>

//Variablen für die Zeit
unsigned int ms=0;
unsigned int s=0;
unsigned int hs=0;
 
int main(void)
{

while(1)
{

  if(PINA & 1<<PINA0)
  {

    TCNT0=0x00;
    OCR0=0xFF;

    TIMSK=(1<<TOIE0);

    TCCR0|=((1<<CS01));

    sei();
    

      while(1)
    { 
      if(PINA & 1<<PINA5)
      {
        TCCR0=(0<<CS00);
        DDRA=0xFF;
        PORTA=s;
        
        while(1)
        {
          if (PINA & 1<<PINA6)
          {
            PORTA=0x00;
            if(ms<100)
            { hs=0; }

            else if(100<=ms && ms<200)
            { hs=1; }

            else if(200<=ms && ms<300)
            { hs=2; }

            else if(300<=ms && ms<400)
            { hs=3; }

            else if(400<=ms && ms<500)
            { hs=4; }

            else if(500<=ms && ms<600)
            { hs=5; }

            else if(600<=ms && ms<700)
            { hs=6; }

            else if(700<=ms && ms<800)
            { hs=7; }

            else if(800<=ms && ms<900)
            { hs=8; }

            else
            { hs=9; }

            PORTA=hs;

            while(1)
            {
              if (PINA & 1<<PINA7)
              {
                ms=0;
                s=0;
                PORTA=0x00;
                break;
              }
            }
          }
        }
      }

     }

  }

}
}
 
//#ifndef TIMER0_OVF_vect
// Für ältere WinAVR Versionen z.B. WinAVR-20071221 
//#define TIMER0_OVF_vect TIMER0_OVF0_vect
//#endif


ISR (TIMER0_OVP_vect)
{
  ms++;
    
  if(ms == 1000)
    {
        s++;
        ms = 0;
    }

}

: Verschoben durch Moderator
Autor: Benjamin (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Ansgar K. (paulderbademeister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Überleg dir doch mal, wie sinnvoll die Schachtelung von Endlosschleifen 
ist.

Autor: Benjamin (Gast)
Datum:

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

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Heißt der Interrupt-Vector wirklich so?

> ISR (TIMER0_OVP_vect)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Interrupt

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

@falk
>Siehe Interrupt

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

Autor: Falk Brunner (falk)
Datum:

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

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.