Die Klammer ist vorhanden, ich hatte sehr viele Kommentare und
ausgeklammerten Code dazwischen und den ganzen non-sense wollte ich hier
nicht posten, da es dann nicht mehr übersichtlich ist :)
hier mal der komplette Code:
1 | # define F_CPU 10000000UL
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | void entprellung( volatile uint8_t *port, uint8_t maske ) {
|
7 | uint8_t port_puffer;
|
8 | uint8_t entprellungs_puffer;
|
9 |
|
10 | for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {
|
11 | entprellungs_puffer<<=1;
|
12 | port_puffer = *port;
|
13 | _delay_us(150);
|
14 | if( (*port & maske) == (port_puffer & maske) )
|
15 | entprellungs_puffer |= 0x01;
|
16 | }
|
17 | }
|
18 |
|
19 | void long_delay(uint16_t ms)
|
20 | {
|
21 | for(;ms>0;ms--) _delay_ms(1);
|
22 | }
|
23 |
|
24 |
|
25 | void pwm_init(){
|
26 |
|
27 | TCCR0B |= (1 << CS00); // kein Prescaler
|
28 |
|
29 | TCCR0A |= (1 << WGM00) | (1 << WGM01); //Fast PWM
|
30 |
|
31 | TCCR0A |= (1 << COM0A1);
|
32 | TCCR0A |= (1 << COM0B1); // Compare match Bottom
|
33 |
|
34 | TCNT0 = 0;
|
35 |
|
36 | OCR0A = 0; // erlaubter Bereich: 0 - 255
|
37 |
|
38 | DDRB |= (1 << PB2); // PWN an Port B2 aktivieren
|
39 | }
|
40 |
|
41 | int main(void)
|
42 | {
|
43 | DDRA=0xFF; //all pins of PORTB declared as output
|
44 | DDRB = 0xFF;
|
45 |
|
46 | pwm_init();
|
47 |
|
48 | uint8_t wert;
|
49 | PORTA |= (1<<PA2);
|
50 | PORTA &= ~(1<<PA3);
|
51 |
|
52 | while(1){
|
53 |
|
54 | for (wert=0; wert<255; wert++)
|
55 | {
|
56 | OCR0A = wert;
|
57 | _delay_ms(10);
|
58 | }
|
59 |
|
60 | for (wert=255; wert>0; wert--)
|
61 | {
|
62 | OCR0A = wert;
|
63 | _delay_ms(10);
|
64 | }
|
65 | }
|
66 | }
|