Fast PWM Code

Gast #3714124
Lesenswert?

Hallo :)

Könnte mir jemand sagen, was an meinem Code für einen Attiny84 nicht 
funktioniert?
An PB2 ist der Enable von einem L293 angeschlossen und an PA2 & PA3 der 
Input.

1
void pwm_init(){
2
  
3
  TCCR0B |= (1 << CS00); // kein Prescaler
4
  TCCR0A |= (1 << WGM00) | (1 << WGM01); //Fast PWM
5
  
6
  TCCR0A |= (1 << COM0A1);
7
  TCCR0B |= (1 << COM0B1); // Compare match Bottom
8
    
9
  TCNT0 = 0;
10
  
11
  OCR0A = 0; // erlaubter Bereich: 0 - 255
12
    
13
  DDRB |= (1 << PB2); // PWN an Port B2 aktivieren  
14
}
15

16
int main(void)
17
{
18
  DDRA=0xFF; //all pins of PORTB declared as output
19
  DDRB = 0xFF;
20
  
21
  pwm_init();
22
  
23
  uint8_t wert;
24
  PORTA |= (1<<PA2);
25
  PORTA &= ~(1<<PA3);
26
    
27
  while(1){
28
  
29
  for (wert=0; wert<255; wert++)
30
  {
31
    OCR0A =  wert;
32
    _delay_ms(10);
33
  }
34
  
35
  for (wert=255; wert>0; wert--)
36
  {
37
    OCR0A =  wert;
38
    _delay_ms(10);
39
  }
40
}
Gast #3714139
Lesenswert?

>Könnte mir jemand sagen, was an meinem Code für einen Attiny84 nicht
>funktioniert?

Ja.

  while(1){

Da fehlt eine schliessende Klammer.
Der Code den du zeigst lässt sich nicht compilieren
und kann logischerweise nicht der Code sein den du
wirklich benutzt.
Gast #3714142
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren