AVR PWM tut nichts

Gast #2128479
Lesenswert?
• ▲
▼
Hallo, ich habe ein Problem mit dem PWM und zwar, kommt einfach gar 
nichts bei dem Pin raus(PD5/ 0CR1A). Ich habe es jetzt schon zweimal 
versucht, einmal mit meinem Code und ein zweites mal mit einem aus dem 
Internet. In beiden fällen passiert einfach gar nichts.


#define PULSE_WIDTH 0x40

#include <avr/io.h>
#include <stdint.h>
// TCCR1A = 0x81
// |COM1A1|COM1A0|COM1B1|COM1B0|FOC1A|FOC1B|WGM11|WGM10|
//   1    0    0    0    0     0     0     1
// 8 bit PWM mode - nicht invertierende PWM
//======================================================
// TCCR1B = 0x04
// |ICN1|ICES1| - |WGM12|WGM12|CS12|CS11|CS10|
//  0     0    0    0     0     1    0    0
//  takt = cpu*/256


void pwm(){      //ausgabe auf PortD pin5 'OC1A'

        OCR1AL = PULSE_WIDTH;   //Load Pulse width
        OCR1AH = 0;
        DDRD |= (1<<5);         //PortD.5 as o/p
        TCCR1A = 0x81;          //8-bit, Non-Inverted PWM
        TCCR1B = 0x04;             //Start PWM
}

Die Funktion rufe ich dann in einer Endlossschleife in main auf. Das ist
die Version aus dem Internet. Man könnte doch jetzt erwarten das die LED
etwas leuchtet, nur tut sie gar nichts. :(

Ich glaub ich übersehe hier irgendwas?
Gast #2128656
Lesenswert?
• ▲
▼
Danke, das wusste ich nicht. So sieht es jetzt aus:

#define F_CPU 1000000UL //Den Takt des µC angeben für delay.h
#define PULSE_WIDTH 0x40 // kopiert
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>


// TCCR1A = 0x81
// |COM1A1|COM1A0|COM1B1|COM1B0|FOC1A|FOC1B|WGM11|WGM10|
//   1    0    0    0    0     0     0     1
// 8 bit PWM mode nicht invertierende PWM
//======================================================
// TCCR1B = 0x04
// |ICN1|ICES1| - |WGM12|WGM12|CS12|CS11|CS10|
//  0     0    0    0     0     1    0    0
//


void pwm(){      //ausgabe auf PortD pin5 'OC1A'

        OCR1AH = 0;
        OCR1AL = PULSE_WIDTH;   //Load Pulse width
        TCCR1A = 0x81;          //8-bit, Non-Inverted PWM
        TCCR1B = 0x04;             //Start PWM
}

int main (void) {

  DDRD = 0x20;  //port von D pin 5 'OC1A' auf Ausgang setzen
  pwm();
  while(1);

  return 0;
}

leider geht es noch immer nicht?
Gast #2129452
Lesenswert?
• ▲
▼
Ich habe jetzt versucht mal ein paar LEDs an PORTD zusteuern hab die 
sonst auf PortA sitzen. Nach einem kurzen Umbau und Änderungen im Code 
stell ich fest das meine Pins bei D alle tot sind, ich kann sie weder 
als Eingänge noch als Ausgänge benützen. Ist der jetzt kaputt, oder muss 
man irgendwelche fuses oder sonstwas setzen? Oder hat man mich um 4,95€ 
betrogen :<
Gast #2129476
Lesenswert?
• ▲
▼
Schalten mit dem neuen Code die Pins wenn
du es mit dem Simulator probierst?
Wenn ja dürfte der Code OK sein.

Hängt an den Pins irgend etwas dran was stören kann?
Pin offen lassen und sehr langsam schalten, dann
reicht schon ein Multimeter, wenn man keinen Oszi hat.

Schalten die "offenen" Pins nicht auf einfache ON/OFF-Befehle
ist vermutlich der µC reif für die Tonne.
Gast #2129584
Lesenswert?
• ▲
▼
OK jetzt weis ich was los ist, bei meinem ausgeborgten Steckbrett ist 
eine Leiste (ground) unterbrochen deshalb kann da nichts raus kommen. 
Dadurch
ist die untere Hälfte abgeschnitten.

Hab die jetzt umgesteckt und ein längeres Kabel direkt zum (-)pol ohne 
Umwege spendiert. Die funktionieren jetzt auch nur pin 1-5 der gruppe C 
hat nur 1,6V alle anderen bringen die 5V keine Ahnung was da passiert. 
Ich nehme
an PWM funktioniert jetzt auch, hab es aber bis her noch nicht probiert.

Vielen Dank für eure Hilfe.

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.