www.mikrocontroller.net

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


Autor: Manuel B. (jackson02)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <avr/io.h>          
#ifndef F_CPU
#define F_CPU 12000000UL
#warning "F_CPU war noch nicht definiert, wird nun mit 12MHz definiert"
#endif
#include <util/delay.h>
#include <stdint.h>
  uint16_t i; 
int main()

{

  DDRB = (1 << PB1 );                                  //ATMega8, OCR1A Ausgang
  DDRD  |= (1<<DDD0) | (1<<DDD1);                    //Unwichtig!, Wären definierte Eingänge
  TCCR1A = (1<<COM1A1) | (1<<WGM11);
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10); 
  ICR1 = 0x6FFF; 
  OCR1A = (0x6FFF - i);                                    //Helligkeit beeinflußen
 
  while( 1 ) {
  i = i + 0x00FF;
  if (i == 0x5FFF) {
  i = 0;}
  main (i);

  }
return 0;      
}
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

Autor: Stefan S. (novafly)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Vom Code her sollte es soweit stimmen.
int main()
{

// ganz viel Code entfernt

  while( 1 ) {

//noch mehr Code entfernt

  main (i); 
  }
}

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

Autor: Jackson02 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.