AVR Lauflicht

OP #4130597
Lesenswert?

Moin,

ich versuche gerade ein Lauflicht auf einem MEGA644 zu realisieren. Dazu 
zählt ein Timer und ruft eine ISR auf.

Wenn meine Variable gesetzt ist soll das Licht andersherum laufen als 
wenn sie null ist:
1
int r = 0x80;
2
int l = 0x00;
3

4
ISR(TIMER0_COMPA_vect)
5
{
6
  cli();
7
  
8
  if (s == 1)
9
  {
10
  
11
    if (d == 1)
12
    {
13
      
14
      PORTC = r;
15
      r = r >>1;
16
      if (r == 0)
17
      {
18
      r = 0x80;
19
      }
20
    }
21
    else
22
    {  
23
      
24
      PORTC = l;
25
      l = l <<1;
26
      if (l == 0x80)
27
      {
28
        l = 0x00;
29
      }
30
    }
31
    
32
  }
33
  
34

35
  sei();
36
}
Mein Problem ist der Teil in der else-Bedingung. Sie wird nicht 
ausgeführt; entweder das erste oder keine Aktion. Ich habe auch schon 
den nicht funktionierenden Teil in der ISR gehabt ohne das eine 
Bedingung erfüllt sein muss trotzdem funktioniert es nicht. Wo könnte 
der Fehler liegen?
#4130604
Lesenswert?

Marco G. schrieb:
> Mein Problem ist der Teil in der else-Bedingung. Sie wird nicht
> ausgeführt; entweder das erste oder keine Aktion.

Sie wird schon ausgeführt, aber sie tut nichts sinnvolles.

> int l = 0x00;
>
> // ...
>
>       PORTC = l;
>       l = l <<1;

0 << 1 ist immer noch 0.

Übrigens:

> int r = 0x80;
> int l = 0x00;
> if (s == 1)
> if (d == 1)

Variablennamen dürfen auch mehr als ein Zeichen lang sein.
Und cli() und sei() haben in einer ISR nichts verloren.
#4130727
Lesenswert?

Marco G. schrieb:
> Kann ich mir den im OCR1A eingetragen Wert auch über die UART
> ausgeben lassen? ich hatte es schon mit der itoa Funktion versucht,
> allerdings funktioniert dies nicht richtig. Wenn der Wert auf 1024 steht
> bekomme ich 0 ausgegeben.
Bist du dir sicher, dass OCR1A nicht nur 8bit breit ist? Die untersten 
8bit von 1024 wären genau 0x00
Gast #4130822
Lesenswert?

HI

>Nein ist 16-Bit, allerdings nur mit einem acht Bit Bus verbunden. Wie
>soll ich denn dort zahlen reinschreiben, die größer als 255 sind?

Mit z.B. OCR1A = 65535;

oder einer beliebigen anderen Zahl im Bereich 0..65535?

MfG Spess
Gast #4130835
Lesenswert?

>das hatte ich versucht, allerdings ist es unerheblich, welche zahl ich
>eingebe, das Lauflicht läuft immer gleich schnell (bei werten über 255)

Poste den Sourcecode. Wie soll man dir denn sonst helfen?

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