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?
NBLM schrieb:> Die Funktion rufe ich dann in einer Endlossschleife in main auf.
D.h. du startest die PWM ständig neu? Du musst das ganze nur ein mal
aufrufen, und dann in der main() eine Endlosschleife laufen lassen, die
gar nichts tut:
Das hat mit dem Interrupt-Flag cli () nichts zu tun. Welchen
Mikrocontroller verwendest du? Kann es sein, dass du den falschen Pin
verwendest? Beim ATmega8 liegt das Ausgabesignal am Pin "OC1A" bzw. PB1,
also Pin Nr. 15, ganz unten rechts, an. Daher musst du auch folgenden
Code zum Konfigurieren des Ports ausführen:
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 :<
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.
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.
NBLM schrieb:> 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.
PC2..5 ist JTAG.
NBLM schrieb:> Aha wusste ich nicht, ich programmiere mit ISP. Kann man JTAG abschalten> damit ich normale 5V I/O habe?
Ja, dauerhaft per Fuse oder temporär per Code indem man zweimal
innerhalb 4 Zyklen eine 1 auf das JTD Bit im MCUCSR schreibt.