PWM gibt kein Ausgangssignal

OP #2535886
Hallo zusammen,

ich versuche erneut die pwm an meinem Atmega168 zu programmieren nur 
leider mit mäßigen erfolg.
1
  
2

3
void main(void) {
4
 
5
  DDRD = (1 << PD6 );  
6

7

8
  TCCR1A = (1<<COM1A1) | (1<<WGM11);
9
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
10
  ICR1 = 0xFFFF;
11

12
 OCR1A = 0x3FFF;
13
 
14
  while (1) {}
15

16
   return 0;                 
17
   
18
}

Ich verstehe an diesem Tutorial zwei sachen absolut nicht

1. was bedeutet ICR1 = 0xFFFF ?

2. der Atmega168 hat so wie ich das sehe 3 PWM Ausgänge PD3, PD5 und 
PD6.

lt. DB;
PD6 (PCINT22/OC0A/AIN0)
PD5 (PCINT21/OC0B/T1)
PD3 (PCINT19/OC2B/INT1)
Ist es dann richtig wenn ich OCR1A einfach in OCR0A für PD6 ändere und 
bekomme ich dann bei einem "OCR0A" Wert von 128 nur 50% der Spannung an 
PD6?

Danke für eure Erläuchtung.
Gast #2535973
Hi

>2. der Atmega168 hat so wie ich das sehe 3 PWM Ausgänge PD3, PD5 und
>PD6.

>lt. DB;
>PD6 (PCINT22/OC0A/AIN0)
>PD5 (PCINT21/OC0B/T1)
>PD3 (PCINT19/OC2B/INT1)

OC1A und OC1B an PB1/PB2 vergessen.

>Ist es dann richtig wenn ich OCR1A einfach in OCR0A für PD6 ändere und
>bekomme ich dann bei einem "OCR0A" Wert von 128 nur 50% der Spannung an
>PD6?

OCR0A gehört zu Timer0. Der PWM-Ausgang für deinen geposteten Code ist 
PB1 nicht PD6.

MfG Spess
Gast #2535981
spess53 schrieb:

>>lt. DB;
>>PD6 (PCINT22/OC0A/AIN0)
>>PD5 (PCINT21/OC0B/T1)
>>PD3 (PCINT19/OC2B/INT1)
>
> OC1A und OC1B an PB1/PB2 vergessen.


und OC2A, fehlt auch.

die 48/88/168 megas haben insgesamt 6 pwm channels.


und wie spess schon sagte, es werden immer OC0,OC1,und OC2 zusammen 
konfiguriert.

steht alles auch wunderschön im datenblatt..
OP #2542213
Ich seh schon einige Sachen stehen nicht im Tutorial bzw. sind so 
einfach das ein Anfänger gar nicht drauf kommt :)
Ich habe es nun fast geschafft  (glaub) ich habe das Ergebnis eines 
Potis genutzt um die PWM zu beeinflussen.
1
int main(void)
2
{
3

4
uint16_t result;
5
uint16_t result2;
6

7
ADMUX = (1<<REFS1) | (1<<REFS0);
8
ADCSRA = (1<<ADPS1) | (1<<ADPS0); 
9
ADCSRA |= (1<<ADEN);
10
ADCSRA |= (1<<ADSC);                  
11
while (ADCSRA & (1<<ADSC) ) {}  
12
result2 = ADCW;
13

14
//////// |////////////////////////////////////////////////////////////////////////7
15

16
TCCR0A = ( 1<<WGM01) |( 1<<WGM00) | (1<<COM0A1) | (1<<COM1A0);
17

18
//    WGM01 + WGM00 = 10 BIT  
19
//    COM0A1  = Nicht Invertierender PWM 
20

21
TCCR0B = (1<<CS00);
22

23
//    CS00 + CS02 = Takt des PWM  = CF / 1024
24

25
/////////////////////////////////////////////////////////////////////////////////7
26

27
DDRD= (1<<PD6) | (1<<PD7) | (1<<PD3) ;
28
DDRC = (1<<PC4);
29

30
  while (1) 
31
  {  
32

33
    ADMUX |= PC5;
34
    ADCSRA |= (1<<ADSC);           
35
    while (ADCSRA & (1<<ADSC) ) {} 
36
    result = ADCW;                 
37
      
38
      
39
    if(result > 10)    //wert in result 1024
40
    {
41
      PORTC &= ~(1<<PC4);
42
    }
43
    else
44
    {
45
      PORTC |= (1<<PC4);
46
    }  
47
        
48

49

50
    if(result > 1000)    //wert in result 1024
51
    {
52
      PORTD &= ~(1<<PD7);
53
    }
54
    else
55
    {
56
      PORTD |= (1<<PD7);
57
    }  
58

59
    if(result > 500)    //wert in result 1024
60
    {
61
      PORTD &= ~(1<<PD3);
62
    }
63
    else
64
    {
65
      PORTD |= (1<<PD3);
66
    }  
67
      
68
    OCR0A = result;
69
  }
70

71
return 0;       
72

73
}

Jetzt kommt aber etwas was ich nicht verstehe. Ich drehe den Poti die 
LED (PD6) wird gedimmt und auf einmal ist sie wieder voll beleuchtet. 
Ich drehe wieder ein Stück sie wird wieder gedimmt und das Spielchen 
beginnt von neuem. Dies wiederholt sich 3 bis 4 mal.
Der result wert vom Poti müsste passen habe diesen habe ich mit 3 LEDs 
getestet.

könntet ihr mir nochmal einen Denkanstoß versetzen?

Danke
Gast #2544350
Hi

>sorry aber das verstehe ich jetzt echt nicht. Der PWM ist doch mit
>WGM01 + WGM00 auf 10 bit gestellt oder meinst du was anderes?

Dann hast du in der falschen Tabelle nachgesehen. Timer0 ist ein 
8-Bit-Timer.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.