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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.