PWM- Steuerung, LED Helligkeit beeinflußen

OP #1889472
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
#1889607
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
Gast #1889623
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.
Gast #1890014
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

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.