Hallo, Könnte mir mal bitte jemand drüber schauen wo ich meinen Fehler eingebaut habe? Es soll eine yc gesteuerte nicht invertierende fast PWM werden. Jetzt, wenn ich sie auf den controller lade, fängt es sofort von 0 bis ganz hell zu werden. Ohne das ich einen Taster betätige. Und bleibt dann hell. Auch eine taster betätigung bring keine veränderung, egal welcher art. Ich kann mir das noch so oft durchsehen, ich sehe meinen fehler nicht. -Atmel Studio 6.2 -original AVR mk2 ISP PRogrammer -ATMEGA8A * * GccApplication12.c * * Created: 30.08.2016 12:30:27 * Author: Huber */ #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000UL #include <util/delay.h> int main(void) { DDRB |= (1<<PB1); PORTD |= (1<<PD2) | (1<<PD3); //FAst PWM nicht invertiert einstellen TCCR1A |= (1<<WGM10); // PWM 8 bit TCCR1B |= (1<<WGM12); // TCCR1B |= (1<<CS12); // Vorteiler 256 TCCR1A |= (1<<COM1A1); // nicht invertierender pwm modus OCR1A = 0; sei(); while(1) { if (!(PIND&(1<<PD5))) //wenn taster 1 gedrückt ist dan... { if (OCR1A < 255) // wenn der maximalwert noch nicht erreicht ist, dann ledheller { OCR1A++; // verbreite die signalbreite um eins 1 } _delay_ms(15); } if (!(PIND&(1<<PD3))) { if (OCR1A > 0) { OCR1A--; } _delay_ms(15); } } }
:
Verschoben durch User
Kein Pullup an PD5 aktiviert (sondern an PD2) => floatender Input => wildes Erkennen von Tastendrücken. Also die Zeilen
1 | PORTD |= (1<<PD2) | (1<<PD3); |
und
1 | if (!(PIND&(1<<PD5))) //wenn taster 1 gedrückt ist dan... |
richtig aufeinander abstimmen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.