moin, wenn ich bei meinem atmega128 timer0, 1, 2 gleichzeitig nutzen will wird timer0 ganz deaktivert und die anderen sind sehr langsam. kann mir jemand sagen woran das liegt oder mir sogar eine lösung für mein problem sagen? danke der code ist im anhang
>preload the timer with 96 to get 10us interrupts
1 | SIGNAL(TIMER0_OVF_vect) |
2 | { //timer0 interrupt |
3 | ...
|
4 | set(0); |
5 | ..
|
6 | }
|
7 | |
8 | void set(color_num) |
9 | {
|
10 | ...
|
11 | color[color_num]=color[color_num] % 0x46; |
12 | }
|
Ich könnte mir gut vorstellen, trotz des Quartzes von >10MHz die Modulo-Rechnung durchaus länger als 10µs dauern kann... Vielleicht so hier: statt:
1 | void set (... |
2 | {
|
3 | ...
|
4 | if( color[color_num] > 0x46 ) |
5 | {
|
6 | color[color_num]=color[color_num] % 0x46; |
lieber so:
1 | if( color[color_num] > 0x45 ) |
2 | {
|
3 | color[color_num] -= 0x46; |
ich habe deinen vorschlag umgesezt und die random fuktion aus dem interrupt entfernt leider ist timer0 immernoch komplett deaktiviert
>TCNT0=70; //preload the timer with 96 to get 10us interrupts
Mit welchem Takt läuft der Prozessor den nun wirklich?
10 Mikrosekunden sind verdammt wenig. Bei 1MHz Taktfrequenz sind das mal
gerade 10 Zyklen, macht drei für jede ISR. Geht schon mal gar nicht.
Selbst bei vollen 16MHz sind es im Mittel nur 48 Zyklen je ISR, und
davon dürfte die Hälfte schon für push/pop draufgehen.
Fazit: Mit deinen ISR's im 10us-Takt überforderst du den Prozessor bei
weitem.
Aber, mal dumm gefragt, welche Anwendung braucht denn alle 10
Mikrosekunden einen neuen Wert?
Oliver
hm verdammt da ist was wahres dran. naja es soll ein ccfl steuergerät werden für 3 cclfs werd das jetzt mit einer astabilen Kippstufe lösen bei der ich per pwm den takt ändere da muss ich auch net soviel programmieren, das liegt mir wie man sieht nicht so gut ;-)
Nimm einen AT90PWMx oder einen ATtiny861 dafür. Die haben geeignetere PWMs für sowas.
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.