Forum: Mikrocontroller und Digitale Elektronik PWM beim AT MEGA 8


von Theater s. (kosti)


Lesenswert?

Hallo,

habe auf der Seite
http://www.electronicsblog.net/atmega8-pwm-controlfrequencypolarityduty-cycle-example-tutorial-with-program/

einen guten einstieg in die PWM mit ATMEG 8 Bekommen.
Und auch verstanden wie ich die PWM anpasse. an Frequenz und 
Tastverhältniss.

Jedoch

wollte ich statt
1
DDRB=0x08;
 Port B Pin 3 ( vom Ursprunglichen Programm)
lieber den PIN 1 des Port B Benutzen
1
DDRB=0x01;
benutzen.

Jedoch funktioniert es nicht.

Witwerhin Stellt sich die Frage ab ich die PWM beim AT MEGA 88 auf den 
PIN 5 und 6 des PORT D ausgeben lassen kann.

Danke für eure Hilfe im voraus

von g457 (Gast)


Lesenswert?

> Jedoch funktioniert es nicht.

Fehler ist in Zeile 42. Kuckst Du Datenplatt wegen Initialisierung, dann 
gehts auch mit B1/OC1A.

> Witwerhin Stellt sich die Frage ab ich die PWM beim AT MEGA 88 auf den
> PIN 5 und 6 des PORT D ausgeben lassen kann.

Ja. Das 'Wie' steht im Datenplatt.

von chris (Gast)


Lesenswert?

du musste dein program sagen das du das auch auf PORTB1 machen möchtest.

Heißt aber auch da du den Timer2 nutzt musst du von Timer2/PB3 OCA2 auf 
Timer1/PB1 OC1A initalisieren

DB Atmega88 Seite 100/101

von Theater s. (kosti)


Lesenswert?

Danke Chris,

So ungefähr habe ich es mit dem Datenblatt verstanden.

Da ich mit dem mega 88 gerade noch nicht arbeiten kann muss noch warten 
bis der Kommunitone das Layout endlich fertig erstellt hat.

Versuche ich es auf meinem Selbstgebauten Mega 8 Evaluierungsbord.

Hier haben ich mal den Simultanen versuch gewagt.
Beim Atmel Mega 8 die beiden Anschlüsse PINS

OC1B  --> PB2
OC1A  --> PB1

ine PWM zu erzeugen


1
#include <avr/io.h>
2
#include <avr/iom8.h>
3
int main( void )
4
{
5
DDRB=0xff;
6
7
OCR1AH = 0x0f;
8
OCR1AL = 0xff; 
9
OCR1BH = 0x0f; 
10
OCR1AL = 0xff; 
11
12
TCCR1A=  (0<<COM1A1) | (1<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<FOC1A) | (1<<FOC1B) | (1<<WGM11) | (0<<WGM10);
13
TCCR1A =  (0<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (1<<CS11) | (0<<CS10); 
14
while (1) {};
15
}

PS . kann ich den Code auch mit Syntaxihlighting einbinden ?

von Theater s. (kosti)


Lesenswert?

Sorry habe gleich selber paar fehler gefunden!

hier nochmal richtig

Jedoch Funktioniert NUR der PB1 OC1A
1
#include <avr/io.h>
2
#include <avr/iom8.h>
3
int main( void )
4
{
5
DDRB=0xff;
6
7
OCR1A = 0xff;
8
9
OCR1B = 0xff; 
10
11
12
TCCR1A=  (1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<FOC1A) | (0<<FOC1B) | (1<<WGM11) | (0<<WGM10);
13
TCCR1B =  (0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10); // --> Siehe Datenblatt s 98 ff
14
while (1) {};
15
}

P.S. Wie kann ich Quellcode mit Syntaxhihlighting einbinden ?

von chris (Gast)


Lesenswert?

Theater sucht schrieb:
> Jedoch Funktioniert NUR der PB1 OC1A

TCCR1A=  .....(0<<COM1B1) | (0<<COM1B0)......

sollte ja gesetzt werden wenn beide 0 sind ist

"Normal port operation, OC0B disconnected" S.102 nochmal nachlesen.

von Theater s. (kosti)


Lesenswert?

Ja stimmt,
vielen Dank. Sorry das ich mich jetzt erst melde.
Es waren ja die Feiertag.

Vielen Dank für deine Mühe

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.