www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pw funktioniert nicht oder falsch geflashed?


Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi.
also ich habe vorhin das beispiel vom mc-project.de zum thema pwm 
compiliert.
/***********************************************************
  Beispiel zur Initialisierung und Verwendung
  der PWM des Atmega8
  --> Dimmen von LEDs an den Ports OC1A und OC1B
***********************************************************/

#include <avr/io.h>
#include <pwm_init.c>
#include <simple_delayroutinen.c>

int main(void) {
  
    unsigned char i = 0;
  pwm_init ();
  
    for (;;) {
    
    for (i=0; i<254; i++) {
      OCR1A = i;
      OCR1B = i;
      delay_us (10000);
    }
  }
}

das compilieren an sich verlief nach einiger zeit fehlerfrei.
dann habe ich den chip mit folgendem code und avrdude geflashed:
avrdude -p m8 -c sp12 -U flash:w:test.hex
pause

aber wenn ich dann die led an oc1b halte, leuchtet diese einfach 
dauerhaft.
woran könnte das liegen?

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
niemand ne idee?

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Was hat das mit PC-Programmierung zu tun?
2. Du willst doch dimmen, dann sollte die PWM doch dauerhaft an sein und 
lediglich heller oder dunkler werden.

Für mehr Antworten, mehr Input
Marcus

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. ich dachte es kommt hier rein, weil ich am pc programmiere und es 
compiliere, naja sorry wenns falsch ist.

2. und aus dem quelltext lese ich zumindest, dass er die led von 0 auf 
254 dimmt.
also müsste sie ja langsam heller werden, dann wieder dunkel sein und 
wieder langsam hell werden.
und das als endlosschleife.

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo steckt denn der Timer, der die PWM generieren soll, in welchem Modus 
wird der betrieben?.

Marcus

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier ist mal die pwm_init.c:
/***********************************************************
  Funktion zur Initialisierung der PWM des Atmega8
***********************************************************/

void pwm_init (void) {

  DDRB = (1<<PB1) | (1<<PB2);
  PORTB = ~(1<<PB1) & ~(1<<PB2);

  //Timer Counter Control Register A
  
    TCCR1A =  (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0) |(1<<COM1B1) | (1<<COM1B0); //8bit PWM, phase correct
  //TCCR1A =  (1<<WGM11) | (1<<COM1A1) | (1<<COM1A0) |(1<<COM1B1) | (1<<COM1B0); //9bit PWM, phase correct
  //TCCR1A =  (1<<WGM10) | (1<<WGM11) | (1<<COM1A1) | (1<<COM1A0) |(1<<COM1B1) | (1<<COM1B0); //10bit PWM, phase correct    
  
  /*COM1A1,COM1A0,COM1B1, COM1B0 = setze OC1A und OC1B bei Compare Match beim Hochzählen,
    lösche sie bei Compare Match beim Runterzählen*/
  
  //Timer Counter Control Register B
  
  //TCCR1B = (1<<CS10) | (1<<WGM12);        //MCU clock / 0
    TCCR1B = (1<<CS11) | (1<<WGM12);        //MCU clock / 8
  //TCCRB = (1<<CS10) | (1<<CS11) | (1<<WGM12);  //MCU clock / 64 
  //TCCRB = (1<<CS12) | (1<<WGM12);        //MCU clock / 256 
  //TCCRB = (1<<CS10) | (1<<CS12) | (1<<WGM12);  //MCU clock / 1024
  
  /*WGM12 = Timer/Counter mode of operation: CTC (Clear Timer on Compare Match)
  8bit (/510):      7,8KHz, 980Hz, 122,5Hz, 30,6Hz, 7,7Hz
  9bit (/1022):      3,9kHz, 488Hz, 61Hz, 15Hz, 3,8Hz
  10bit (/2046):       1,95Khz, 244Hz, 30,5Hz, 7,6Hz, 1,9Hz*/

}

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:/

Autor: Zeusi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, also ich sehe da nicht das du den global interrupt flag setzt,
das würde sozusagen das pwm auslassen,..

Es wird auch empfohlen die änderung in OCRnX im interrupt handler zu 
ändern, weil da kann dieser auch net durch ein weiteres interrupt beim 
setzen unterbrochen werden,...
CTCint:
ldi temp,32
out OCRnX,temp
reti

grüüße

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.