Hallo, der ATMega8 hat 3 PWMs, der ATMega32 hat 4 PWMs und der ATMega128 sogar 8 PWMs g. Wie kriege ich alle Timer/PWMs gleich? Also ich brauche die PWMs auf allen ATmegas gleich. Als Beispiel beim ATMega8 PWM_WERT = 128; OCR1A = PWM_WERT; OCR1B = PWM_WERT; OC2 = PWM_WERT; Ich kriege bei den oben genannten Megas lediglich die PWM unter OCR1A und OCR1B zum laufen. Die andere garnicht. Ich habe gesetzt, gemacht getan, nichts. Entweder läuft die PWM unter OCR1A und OCR1B oder es geht garnicht. Ich könnte mir natürlich auch einfach einen PWM Controller kaufen. Da ich hier aber noch hunderte ATMegas rumliegen habe kann ich diese noch als PWM Controller einsetzten. Haben zwar dann mehr unbenutzte PINs und werden sich mehr als alles andere langweilen aber so kriege ich die wenigstens Weg ;) Da ich 12 PWMs brauche und am besten per I2C ansprechbar bietet sich das nunmehr an. Allerdings kriege ich nicht alle PWMs auf den AVRs zum laufen. Also es müssen einfach alle Timer auf der höchsten, vom kleinsten WErt möglichen BIT laufen. Also ich glaube 8Bit können alle Timer der AVRs somit müsste dann jede PWM mit 8Bit Phase Korrekt laufen. Beim ATMega128 kommt noch dazu das da 2 PWMs auf einem PIN liegen, und zwar auf PIN PB7. Daraus würde ich jetzt schließen das dieser nur "nutzbare" 7 PWMs hat. Richtig? Danke euch schonmal.
Hi
>und der ATMega128 sogar 8 PWMs g.
Damm musst du ein anderes Datenblatt haben. In meinem steht:
6 PWM Channels with Programmable Resolution from 2 to 16 Bits
MfG Spess
Tobias N. schrieb: > Als Beispiel beim ATMega8 > > PWM_WERT = 128; > > OCR1A = PWM_WERT; > OCR1B = PWM_WERT; > OC2 = PWM_WERT; > > Ich kriege bei den oben genannten Megas lediglich die PWM unter OCR1A > und OCR1B zum laufen. Die andere garnicht. Wenn das alles an Programm ist reicht es ja auch nicht um PWMs zum Laufen zu kriegen.
In meinem steht Two 8-Bit PWM Channels 6 PWM Channels with Programmable Resolution from 2 to 16 Bits das macht bei mir ingesammt 8. Und wenn ich auf dem Datenblatt mir die PINs ansehe dann zähle ich 7 PWMs mit einem eigenen PIN und zwei PWMs auf einem PIN. Das ist mein DB: http://www.atmel.com/images/doc2467.pdf
Vermutlich hat er gar kein Datenblatt. Denn da stünde drinn, wie man die PWMs an laufen bekommt. Oliver
Das ist mir schon klar. Das war nur die erklärung dazu.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #include <util/twi.h> //enthält z.B. die Bezeichnungen für die Statuscodes in TWSR |
4 | #include <avr/interrupt.h> //dient zur Behandlung der Interrupts |
5 | #include <stdint.h> //definiert den Datentyp uint8_t |
6 | #include "twislave.h" |
7 | #include <stdlib.h> //nötig für Zahlumwandlung mit itoa |
8 | |
9 | #define SLAVE_ADRESSE 0x50
|
10 | |
11 | uint8_t byte1 = 42; |
12 | |
13 | int main(void) |
14 | {
|
15 | // PWM
|
16 | DDRB = 0x06; // Set Port PB1 and PB2 as Output |
17 | TCCR1A = (1<<WGM10)|(1<<COM1A1) // Set up the two Control registers of Timer1. |
18 | |(1<<COM1B1); // Wave Form Generation is Fast PWM 8 Bit, |
19 | TCCR1B = (1<<WGM12) // OC1A and OC1B are cleared on compare match |
20 | |(1<<CS10); // and set at BOTTOM. Clock Prescaler is 1024. |
21 | |
22 | OCR1A = 0; |
23 | |
24 | // PWM Ende
|
25 | |
26 | // TWI
|
27 | |
28 | //TWI als Slave mit Adresse slaveadr starten
|
29 | init_twi_slave(SLAVE_ADRESSE); |
30 | |
31 | //i2cdatamit Werten füllen, die der Master auslesen und ändern kann
|
32 | for(uint8_t i=0;i<i2c_buffer_size;i++) |
33 | {
|
34 | i2cdata[i]=0+i; |
35 | }
|
36 | |
37 | // TWI Ende
|
38 | |
39 | while(1) |
40 | {
|
41 | |
42 | OCR1A = i2cdata[0]; |
43 | |
44 | }
|
45 | }
|
das Klappt mit OCR1A und OCR1B aber nicht mit OC2. Sobald ich den OC2 in den registern einstelle geht garkeine PWM mehr.
Oliver schrieb: > Vermutlich hat er gar kein Datenblatt. Denn da stünde drinn, wie man die > PWMs an laufen bekommt. > > Oliver Schieb dir deinen Kommentar sonst wo hin.
Tobias N. schrieb: > aber nicht mit OC2. Sobald ich den OC2 in > den registern einstelle geht garkeine PWM mehr. Wenn du Timer 2 nicht initalisierst, wird aus OC2 bis zum Ende der Zeit auch nichts rauskommen. > DDRB = 0x06; // Set Port PB1 and PB2 as Output Du solltest dann noch PB3 als Ausgang konfigurieren.
:
Bearbeitet durch User
Tobias N. schrieb: > . > . > . > das Klappt mit OCR1A und OCR1B aber nicht mit OC2. Sobald ich den OC2 in > den registern einstelle geht garkeine PWM mehr. Schade. Kann leider nix dazu sagen :(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.