Forum: Mikrocontroller und Digitale Elektronik Hilfe bei PWM- Test


von Michael J. (juston)


Lesenswert?

Hallo,
ich habe mir in dem AVR-GCC-Tutorial alles über PWM durchgelesen und 
untenstehendes Programm erstellt.

Allerdings kann ich an dem PIN 19 (OC1A) keine PWM messen.
1
#include <avr/io.h>
2
3
4
int main  (void) 
5
6
{
7
8
// PWM Konfig.
9
TCCR1B |= (1<<CS12);  // Vorteiler = 256
10
TCCR1A |= (1<<WGM10) || (1<<COM1A1); //PWM 8 Bit
11
 
12
OCR1A = 128; // Obergrenze
13
14
  while (1)
15
  {
16
  
17
  }
18
}

Gruß
Michael

von Johannes M. (johnny-m)


Lesenswert?

Du musst den Pin schon als Ausgang konfigurieren, sonst kommt da auch 
nix raus (zumindest nix nennenswertes)...

von Michael J. (juston)


Lesenswert?

Mhh,
ja ich habe nachträglich noch den gesamten POR D als Ausgang definiert 
allerdings kahm gar nichts raus.

von Lötlackl (Gast)


Lesenswert?

Hallo,

Du veroderst falsch! Statt so
1
TCCR1A |= (1<<WGM10) || (1<<COM1A1); //PWM 8 Bit
  sollte es wohl eher so aussehen.
1
TCCR1A |= (1<<WGM10) | (1<<COM1A1); //PWM 8 Bit

mfg Lötlackl

von Michael J. (juston)


Lesenswert?

Hallo,
habe das nun hinbekommen.

Wollte jetzt einen Taster, der an PD2 angeschlossen ist  zum erhöhen des 
OCR1A Wertes verwenden aber irgend was habe ich da wohl falsch gemacht.
1
#include <avr/io.h>
2
#define F_CPU 8000000
3
#include <util/delay.h>
4
5
int wert=20 ;
6
7
int main  (void) 
8
9
{
10
11
12
DDRD  = 0b11111011;
13
PORTD = 0b00000100;
14
15
// PWM Konfig.
16
TCCR1B |= (1<<CS12);  // Vorteiler = 256
17
TCCR1A |= (1<<WGM10) | (1<<COM1A0)| (1<<COM1A1); //PWM 8 Bit
18
 
19
  while (1)
20
  {
21
    
22
   if (!(PIND & (1<<PD2)))
23
      {
24
        wert ++;
25
        _delay_ms(5);
26
  
27
      }
28
29
       wert=OCR1A;
30
     
31
  }
32
}

von Gast (Gast)


Lesenswert?

>wert=OCR1A;
oder eben andersrum...

von Frank L. (florenzen)


Lesenswert?

Michael Justinger wrote:

> [...]
> irgend was habe ich da wohl falsch gemacht.

Ja.

[...]
> wert=OCR1A;
[...]

Du solltest auch überlegen bei deinem Taster statt auf den Zustand auf 
die Flanke zu prüfen.

von Lötlackl (Gast)


Lesenswert?

Hallo,

vielleicht auch noch der main-Funktion einen Rückgabewert ins Nirvana 
schicken lassen, so daß der Compiler nicht rummeckert.
1
...
2
    OCR1A = wert;
3
  }
4
  return 0;
5
}

mfg

von Johannes M. (johnny-m)


Lesenswert?

Lötlackl wrote:
> vielleicht auch noch der main-Funktion einen Rückgabewert ins Nirvana
> schicken lassen, so daß der Compiler nicht rummeckert.
Solange das Programm mit einer Endlosschleife endet, sollte das den 
Compiler nicht jucken. Meiner zumindest hat sich noch nie beklagt...

von Lötlackl (Gast)


Lesenswert?

muß ich mal bei Gelegenheit ausprobieren.

von Michael J. (juston)


Lesenswert?

Hallo,
danke für eure Hilfe, nun läuft es.

Der Compiler hat nicht gemeckert.


Gruß
Michael

von Lötlackl (Gast)


Lesenswert?

> Der Compiler hat nicht gemeckert.

Huch, meiner auch nicht.

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
Noch kein Account? Hier anmelden.