Problem mit PORTA = 0xFF bei atmega32

OP #626955
Lesenswert?
• ▲
▼
Hi, ich hab ein kleines Problem, vielleicht könnt ihr mir helfen...

Ich hab nen Zähler und gehe nach nem Compare Match ein Element im Array 
weiter, dessen Wert beim nächsten Durchlauf als Compare-Zahl dient.

Resultat: Wenn ich gleichzeitig überprüfe, ob ein Element im Array 
erreicht wurde, wird ( werden ) LEDs gelöscht. Somit habe ich einen 
relativ effektiven Dimmer.

Klappt auch alles soweit, bis auf eine Sache:
Wenn ich alle LEDs dimmen möchte ( siehe Quellcode ), klappt es nicht. 
Nach Prüfen ist mir aufgefallen, dass es passiert, wenn ich den Schritt 
davor alle LEDs ausschalte und im erwähnten Schritt mehr als 3 
einschalte.

Das komische ist außerdem Folgendes:
Wenn ich eine immer an lasse, kann ich die 7 restlichen im Port 
problemlos dimmen.

Woran liegt das?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
 
4
int steps[] = { 1,4,6,9,11,13,16,19,21,23,26,28,31,33,36,38,41,43,45,48,51,52,56,58,60,63,65,68,70,72,75,78,80,82,85,87,90,93,94,97,100,102,105,107,109,112,115,117,119,122,124,127,129,132,134,136,139,142,144,146,149,151,154,156,159,161,164,166,168,171,174,176,178,181,183,186,188,191,193,196,198,201,203,205,208,210,213,215,218,220,223,225,228,230,232,235,238,240,242,245,247,250,252,255,257,260,262,264,267,270,271,275,277,279,282,284,287,289,291,294,297,299,301,304,306,309,311,314,316,319,321,324,326,328,331,334,335,339,341,343,346,348,350,353,356,358,360,363,366,368,370,373,375,378,380,382,386,387,390,393,395,397,400,402,405,407,410,412,414,418,419,422,425,426,430,432,434,437,439,442,444,446,449,452,454,456,459,462,463,467,468,472,473,476,479,481,484,486,488,491,493,496,498,501,503,506,508,511,513,515,518,520,523,526,527,531,532,536,537,540,543,545,547,550,553,555,557,560,562,565,567,569,573,574,577,580,581,585,587,589,592,594,597,599,602,604,606,609,612,614,616,619,621,624,626 };
5

6
int cstep = 0;
7
int tep = 0;
8
char plus = 1;
9

10
int main (void) {
11
 
12
  DDRA  = 0xff;
13
  //TCCR1A = (1<<WGM11)|(1<<WGM10);
14
  
15
  //no prescaler and reset on compare on match
16
  TCCR1B = (1<<CS10)|(1<<WGM12);
17
  OCR1A = steps[cstep];
18
  TCNT1 = 0;
19
  
20
  //enable interrupt
21
  TIMSK = (1<<OCIE1A);
22
  
23
  sei();
24
  
25
  while(1) {
26
    if ( tep > 255 )
27
      plus = -1;
28
    else if ( tep < 0 )
29
      plus = 1;
30
    tep += plus;
31
    int i,j,k;
32
    for ( i = 0; i < 80; i++ )
33
      for ( j = 0; j < 100; j++ )i = i;
34
        
35
  }
36
   return 0;
37
}
38

39
ISR( TIMER1_COMPA_vect ){
40
  
41
  OCR1A = steps[++cstep];
42
  
43
  if ( cstep >= tep && PINA != 0 )
44
    PORTA = 0;
45
  
46
  //Schreib ich hier PORTA = 1; klappt es...
47
  if ( cstep == 1 )
48
    PORTA = 255;
49
  
50
  if ( cstep > 254 )
51
    cstep = 0;
52
  
53
  TCNT1 = 0;
54
  return;
55
  
56
}
Gast #627346
Lesenswert?
• ▲
▼
Hallo,

@Realplotter: ich weiß, etwas unfair, aber:

hätte ich auf dem C64 mit dem Programmieren erst begonnen, wenn der 
Macro-Assembler einen Simulator hat, würde ich heute noch warten.

Speziell seinen Fehler hätte ihm kein Simulator gezeigt...

Gruß aus Berlin
Michael

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.