Forum: Mikrocontroller und Digitale Elektronik Probleme mit der PWM


von Maximilian (Gast)


Lesenswert?

Hallo,

ich bastle grad an einem kleinen Tool, wo auf ein Sensorsignal hin eine 
LED gedimmt werden soll. Für die LED gibt es 3 verschiedene PWM-Arrays, 
deshalb sind die Werte dafür auch im Flash gespeichert. Aus irgendeinem 
Grund, fängt die LED zwar an zu dimmen, aber springt anschließend wieder 
auf 100% und dimmt erneut, es läuft quasi eine Endlosschleife und ich 
weiß nicht warum. Könnt ihr mir bitte helfen...

Vielen Dank schonmal
Max

Hier das Programm:

#define ARRAY_SIZE 190

//long delays
void my_delay(uint16_t milliseconds)
{
  for(; milliseconds > 0; milliseconds--)
  _delay_ms(1);
}

//----------------- Die LED einmal durchdimmen

void sweepLed(uint16_t *useTable, uint16_t delay)
{
  int8_t tmp;

  //-->LED Dimmen
for(tmp = 0 ; tmp < ARRAY_SIZE; tmp++)
  {
    OCR1A = pgm_read_word(useTable-tmp);
    my_delay( delay );
  }
}

von Karl H. (kbuchegg)


Lesenswert?

Maximilian schrieb:

> Aus irgendeinem
> Grund, fängt die LED zwar an zu dimmen, aber springt anschließend wieder
> auf 100% und dimmt erneut, es läuft quasi eine Endlosschleife

Von irgendwo her muss diese Funktion ja auch aufgerufen werden.
Dort wird sich der Grund für die "Endlosschleife" finden.


>     OCR1A = pgm_read_word(useTable-tmp);

Das sieht falsch aus.

                            useTable + tmp

von dummy (Gast)


Lesenswert?

int8_t tmp;

  //-->LED Dimmen
for(tmp = 0 ; tmp < ARRAY_SIZE; tmp++)

int8_t geht nur bis 128 und ist somit immer zu klein;)

von Maximilian (Gast)


Lesenswert?

Hmm, also im Hauptprogramm ruf ich eigentlich nur die Funktion 
"sweepLED(useTable, step_time)" auf...Daran kann doch eigentlich nix 
groß falsch sein oder?

von Maximilian (Gast)


Lesenswert?

Ohh Gott, wie bescheuert kann man eigentlich sein :) vielen Dank

von Karl H. (kbuchegg)


Lesenswert?

dummy schrieb:
> int8_t tmp;
>
>   //-->LED Dimmen
> for(tmp = 0 ; tmp < ARRAY_SIZE; tmp++)
>
> int8_t geht nur bis 128 und ist somit immer zu klein;)

Kopfklatsch.

Ja, das hab ich überlesen. Wohl auch, weil ich davon ausgegangen bin, 
dass eine derartige Variable ein uint8_t sein wird. Typischer Fall von: 
das gelesen, was man erwartet. Und nicht das was dortsteht.

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.