Hi Forum,
ich wollte den SoftPWM-Code vom Tutorial
(http://www.mikrocontroller.net/articles/Soft-PWM) für den Attiny45
umschreiben, jedoch tut sich bei den Ausgängen nichts. Als Ausgang hab
ich 0,1 und 2 definiert. Die Änderungen die ich gemacht habe:
1 | // Defines an den Controller und die Anwendung anpassen
|
2 | #if !defined(F_CPU)
|
3 | #define F_CPU 8000000L // Systemtakt in Hz
|
4 | #endif
|
5 | #define F_PWM 100L // PWM-Frequenz in Hz
|
6 | #define PWM_PRESCALER 8 // Vorteiler für den Timer
|
7 | #define PWM_STEPS 256 // PWM-Schritte pro Zyklus(1..256)
|
8 | #define PWM_PORT PORTB // Port für PWM
|
9 | #define PWM_DDR DDRB // Datenrichtungsregister für PWM
|
10 | #define PWM_CHANNELS 3 // Anzahl der PWM-Kanäle
|
11 | ...
|
12 | ISR(TIMER0_COMPA_vect) {
|
13 | static uint8_t pwm_cnt; // ändern auf uint16_t für mehr als 8 Bit Auflösung
|
14 | uint8_t tmp; // ändern uint16_t oder uint32_t für mehr Kanäle
|
15 |
|
16 | OCR0A += isr_ptr_time[pwm_cnt];
|
17 | tmp = isr_ptr_mask[pwm_cnt];
|
18 |
|
19 | if (pwm_cnt == 0) {
|
20 | PWM_PORT = tmp; // Ports setzen zu Begin der PWM
|
21 | // zusätzliche PWM-Ports hier setzen
|
22 | pwm_cnt++;
|
23 | }
|
24 | else {
|
25 | PWM_PORT &= tmp; // Ports löschen
|
26 | // zusätzliche PWM-Ports hier setzen
|
27 | if (pwm_cnt == pwm_cnt_max) {
|
28 | pwm_sync = 1; // Update jetzt möglich
|
29 | pwm_cnt = 0;
|
30 | }
|
31 | else pwm_cnt++;
|
32 | }
|
33 | }
|
34 | ...
|
35 | int main(void) {
|
36 | // PWM Port einstellen
|
37 | PWM_DDR = 0x07; // Port als Ausgang: 0,1,2 ->pin 5,6,7
|
38 | // zusätzliche PWM-Ports hier setzen
|
39 |
|
40 | TCCR0B = 2; // Timer läuft mit Prescaler 8
|
41 | TIMSK |= (1<<OCIE0A);// Interrupt freischalten
|
42 |
|
43 | sei(); // Interrupts global einschalten
|
44 |
|
45 | //startvariablen setzen
|
46 | const uint8_t t7[8]={0, 0, 0, 0, 0, 125, 125, 125};
|
47 | memcpy(pwm_setting, t7, 8);
|
48 | //pwm_setting[0]=255;
|
49 | pwm_update();
|
Ausgänge machen keinen mux, irgendwas hab ich glaub ich vergessen xD
Hoffe ihr könnt mir helfen.
Grüßle equi