Hallo, welche Möglichkeit gibt es dieses Problem zu lösen? ATtiny85 8MHz keine Möglichkeit PLL zu nutzen da nur 3.3V zur Verfügung stehen. Es sollen 2 Kanäle mit unterschiedlicher Dimmzeit als Ausgang benutzt werden können. Derzeit funktioniert das nur mit einer Dimmzeit. Der zero cross Interrupt wird an INT0 gelegt. PB0 und PB1 sind die Ausgänge. Der Timer0 ist für die Serielle Kommunikation belegt.
1 | Setup:
|
2 | DDRB |= (1<<PB0) | (1<<PB1); |
3 | PORTB &= ~(1<<PB0) | ~(1<<PB1); |
4 | MCUCR = (1 << ISC01); |
5 | GIMSK |= (1 << INT0); |
6 | TIMSK |= (1 << OCIE1A) | (1 << TOIE1); |
7 | TCCR1 = (1 << CS13) | (1 << CS11) | (1 << CS10); |
8 | |
9 | ISR(INT0_vect){ |
10 | TCNT1 = 0; |
11 | TCCR1 = (1 << CS13) | (1 << CS11) | (1 << CS10); |
12 | }
|
13 | |
14 | ISR(TIMER1_COMPA_vect) { |
15 | PORTB |= (1<<PB0); |
16 | PORTB |= (1<<PB1); |
17 | TCNT1 = 253; |
18 | }
|
19 | |
20 | ISR(TIMER1_OVF_vect) { |
21 | PORTB &= ~(1<<PB0); |
22 | PORTB &= ~(1<<PB1); |
23 | TCCR1 = 0; |
24 | TCNT1 = 0; |
25 | }
|
26 | |
27 | int main(){ |
28 | while(1){ |
29 | |
30 | for(i=1;i<61;i++){ |
31 | OCR1A = i; |
32 | }
|
33 | |
34 | }
|
35 | return 0; |
36 | }
|
Das funktioniert wunderbar nur leider beide Ausgänge mit der selben Dimmzeit. Ein Versuch ISR(TIMER1_COMPB_vect) mit ins Boot zu nehmen scheiterte. Habe versucht in TIMER1_COMPB_vect ein OCR1A += OCR1A und in TIMER1_COMPB ein OCR1B += OCR1B und dann noch das ganze im TIMER1_OVF_vect per IF abfragen zu realisieren, haut aber auch nicht hin da wohl die 8MHz einfach zu langsam sind. Ist es überhaupt machbar hier unterschiedliche Dimmzeiten zu realisieren? Hat eventuell jemand einen Lösungsansatz?