Forum: Mikrocontroller und Digitale Elektronik wie weit ist die pwm


von Hendrik (Gast)


Lesenswert?

Hallo,
ich habe bisher immer mit Arduino programmiert, was ich sehr einfach 
fande. Nun möchte ich aber ein kontroller einbauen und den dort lassen. 
Dafür wäre mir ein Arduino zu teuer. Daher habe ich einen Attiny45 
genommen.
Da ich das PRogrammieren mit den Controllern sehr schwierig finde, habe 
ich im Netz gesucht und bin auch fündig geworden
1
#define F_CPU 1000000UL
2
#include <stdlib.h>
3
#include <stdio.h>
4
#include <stdint.h>
5
#include <avr/io.h>
6
#include <util/delay.h>
7
8
void init_timer(){
9
  TCCR0A |= (1<<WGM00) | (1<<WGM01);
10
  TCCR0A |= (1<<COM0A1);
11
  TCCR0B |= (1<<CS00) | (1<<CS01);
12
  OCR0A = 0;
13
}
14
15
void init_servo(){
16
  DDRB |= (1<<PB0);
17
  PORTB &= ~(1<<PB0);
18
}
19
20
int main(){
21
  int i;
22
  init_servo();
23
  init_timer();
24
  while(1){
25
    for(i=5; i<40; i++) {
26
      OCR0A = i;
27
      _delay_ms(15);
28
    }
29
    for(i=40; i>5; i--) {
30
      OCR0A = i;
31
      _delay_ms(15);
32
    }
33
  }
34
  return 0;
35
}

dort lass ich mittels eines PWM-Signals einen Servo hin und her fahren.
Allerdings habe ich dazu noch zwei fragen.
Vorweg sei ncoh gesagt, dass ich mir das datenblatt zum kontroller 
angeseheen habe, aber nicht wirklich verstanden habe.

meine Fragen wären, woher weiss ich in der main-funktion, dass das 
PWM-Siganl an PB0 herauskommt? kommt es da überhaupt raus? PB0 ist halt 
der einzige deklarierte ausgang.
Die zweite Frage wäre, woher weiss ich, wie groß die PWM ist? und auf 
wie viel grad mein Servo fährt? (zweiteres könnte ich auch durch 
ausprobieren herausfinden.

Wäre nett, wenn mir jemand diese fragen beantworten könnte, aber bitte 
so, dass es ein leie (wie ich es bin) versteht.

recht herzlichen Dank

von Sebastian H. (sebihepp)


Lesenswert?

Das steht alles in den Datenblättern des Mikrocontrolers und des Servos.

von Falk B. (falk)


Lesenswert?

@ Hendrik (Gast)

>meine Fragen wären, woher weiss ich in der main-funktion, dass das
>PWM-Siganl an PB0 herauskommt? kommt es da überhaupt raus?

Steht im Datenblatt.

>Die zweite Frage wäre, woher weiss ich, wie groß die PWM ist?

Die schreibt dein Programm in das passende Register, hier OCR0A

> und auf wie viel grad mein Servo fährt?

Nominal geht das Steuersignal von 1ms (linker Anschlag), 1,5ms 
(Mittellage) bis 2ms (rechter Anschlag) Wieviel Grad das sind, ist von 
Servo zu Servo etwas anders.

Mein Tipp. Nimm lieber Timer 1 und OCR1A, damit bekommt man eine 
DEUTLICH bessere Auflösung der Ansteuerung!

von Max H. (hartl192)


Lesenswert?

Hendrik schrieb:
> woher weiss ich in der main-funktion, dass das
> PWM-Siganl an PB0 herauskommt?
Das ist einfach so. Atmel hat den Tiny so gebaut, dass das PWM an PB0 
herauskommt.

Kann man z.B. auf S.62 nachlesen:
http://www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf

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.