Forum: Mikrocontroller und Digitale Elektronik PWM- Steuerung, LED Helligkeit beeinflußen


von Manuel B. (jackson02)


Lesenswert?

Guten Abend,

hab hier ein Problem mit meinem Code.
Laut AVR Studio müsste es eigentlich hinhauen. In der Simulation ändert 
sich laufend der Wert von OCR1A, was dem Ausgang PB1 des Atmega8 
entsprechen sollte.
Jedoch leuchtet die LED ständig mit konstanter Helligkeit auf, wenn ich 
dieses Programm in den Controller spiele.
1
#include <avr/io.h>          
2
#ifndef F_CPU
3
#define F_CPU 12000000UL
4
#warning "F_CPU war noch nicht definiert, wird nun mit 12MHz definiert"
5
#endif
6
#include <util/delay.h>
7
#include <stdint.h>
8
  uint16_t i; 
9
int main()
10
11
{
12
13
  DDRB = (1 << PB1 );                                  //ATMega8, OCR1A Ausgang
14
  DDRD  |= (1<<DDD0) | (1<<DDD1);                    //Unwichtig!, Wären definierte Eingänge
15
  TCCR1A = (1<<COM1A1) | (1<<WGM11);
16
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10); 
17
  ICR1 = 0x6FFF; 
18
  OCR1A = (0x6FFF - i);                                    //Helligkeit beeinflußen
19
 
20
  while( 1 ) {
21
  i = i + 0x00FF;
22
  if (i == 0x5FFF) {
23
  i = 0;}
24
  main (i);
25
26
  }
27
return 0;      
28
}
die Delay-Include-Datei ist nur für ne mögliche Verzögerung gedacht, 
weshalb ich sie mal drinnen lasse. Aber ich finde einfach keinen Fehler. 
Zumindest müsste es meiner Meinung nach hinhauen :D .

Ich hoffe mich kann jemand berichtigen.

Grüßle

von Stefan S. (novafly)


Lesenswert?

Manuel B. schrieb:
> die Delay-Include-Datei ist nur für ne mögliche Verzögerung gedacht,

Dann programmier einmal eine Verzögerung von zwei oder drei Sekunden 
rein, denn dein Wert ändert sich so schnell, dass du das 
höchstwahrscheinlich gar nicht wahr nimmst :)
Vom Code her sollte es soweit stimmen. Wie steuerst du die LED an? 
Direkt am PortPin oder über einen Transistor?

Gruß
Stefan

von holger (Gast)


Lesenswert?

>Vom Code her sollte es soweit stimmen.
1
int main()
2
{
3
4
// ganz viel Code entfernt
5
6
  while( 1 ) {
7
8
//noch mehr Code entfernt
9
10
  main (i); 
11
  }
12
}

Sieht mir irgendwie rekursiv aus;)
Ohne Compiler warnings dürfte das wohl auch nicht gehen.

von Jackson02 (Gast)


Lesenswert?

So.. Nun, da ich den Code noch ein wenig angepasst habe und statt immer 
nur "0x00FF" abzuziehen von i, habe ich jetzt immer 0x05FF abgezogen und 
eine Verzögerung von 200 ms eingefügt. Nun funktionierte einwandfrei. 
Zumindest jedoch genauso, wie ich wünschte dass es geht :)

@Holger:
Warnings tritt keine bis auf die, dass der Prozessor auf 12 MHz 
definiert wird.

Vielen Dank für den schnellen Denkanstoss :)


Mit den besten Grüßen


Manuel

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.