mikrocontroller.net

Forum: Compiler & IDEs PWM mit Timer 0 und 2 geht, aber nicht mit Timer 1 (mega64)


Autor: popi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

wenn ich mit dem Timer 0 oder dem Timer 1 eine LED über PWM ansteuern
möchte geht es problemlos.

Initialisierungscode für Register:

...
TCCR0 = (1 << WGM00) | (1<< COM01) | (1<< CS00);
TCCR2 = (1 << WGM20) | (1<< COM21) | (1<< CS20);
TCCR1A = (1 << WGM10) | (1<< WGM20) | (1<< COM1A1);

Aber bei Timer 1 (TCCR1A) geht nicht, laut Simulator wird das TCNT1L
Register nicht incrementiert.

Könnt Ihr mit vielleicht helfen und sagen, warum das so ist?

Danke und Grüße

popi

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...(1<< WGM20)...

WGM20 steht ja auch nicht in TCCR1A sondern in TCCR2...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, wenn das Register nicht inkrementiert wird, läuft der Timer
wahrscheinlich gar nicht. Wenn das oben der komplette Code ist, wundert
mich das auch nicht. Es gibt da nämlich noch ein Register TCCR1B, dem
man auch die entsprechende Aufmerksamkeit schenken sollte. Da stehen
nämlich die CS..-Bits für Timer 1 drin!

Autor: popi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, ich danke Euch zwei....

Er läuft.... aber nicht richtig.
Jetzt zählt es in 6er Schritte...

Ich werd noch irre mit dem Ding.

Habe es jetzt nach Eurer Anleitung richtig initialisiert?

   DDRB  = (1<< DDB4) | (1<< DDB5) | (1<< DDB6) | (1<< DDB7);
   PORTB = (1<< PB4) | (1<< PB5) | (1<< PB6) | (1<< PB7);
   OCR1A  = 0x00;
   TCCR1A = (1 << WGM10) | (1<< COM1A1);
   TCCR1B = (1<< CS10);

Oder warum zählt der so komisch?

Danke im Voraus und Grüße

popi

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Okay, ich danke Euch zwei....

Naja, wenn Du schon doppelt siehst, ist es kein Wunder, dass das mit
dem Programmieren nicht mehr so klappt. Vielleicht erst mal nüchtern
werden...;-)

Im Simulator kann es schon mal passieren, dass die Bildschirmanzeige
Zustände nicht mitbekommt. Der Timer zählt sicher in Einzelschritten,
aber die Anzeige kommt nicht mit. Wenn Du im Einzelschritt-Modus
arbeitest, müsste eigentlich jeder Schritt sichtbar sein...

Autor: popi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, ich lege das Bier weg ;o)

Ich habe mal den Code gerade einfach mal auf den Controller gespielt,
und es geht. Wie auch immer, aber es geht ;o)

Nun hätte ich da ein organisatorische Problem:

Wie löst man den folgendes Problem im Code:
#include <avr/io.h>


unsigned char x = 2;
unsigned short i;

void main(void)
  {
   DDRB  = (1<< DDB4) | (1<< DDB5) | (1<< DDB6) | (1<< DDB7);
   PORTB = (1<< PB4) | (1<< PB5) | (1<< PB6) | (1<< PB7);
   OCR0,OCR1A,OCR2  = 0x00;
   TCCR0 = (1 << WGM00) | (1<< COM01) | (1<< CS00);
   TCCR2 = (1 << WGM20) | (1<< COM21) | (1<< CS20);
   TCCR1A = (1 << WGM10) | (1<< COM1A1);
   TCCR1B = (1<< CS10);

while(x==2)
{

while(OCR1A <= 0xA0) {for (i=0;i<1000;i++) asm volatile("NOP"); OCR1A
= OCR1A + 1;}
while(OCR1A >= 0x10)  {for (i=0;i<1000;i++) asm volatile("NOP");
OCR1A = OCR1A - 1;}



while(OCR0 <= 0x60) {for (i=0;i<300;i++) asm volatile("NOP"); OCR0 =
OCR0 + 1;}
while(OCR0 >= 0x40)  {for (i=0;i<100;i++) asm volatile("NOP"); OCR0 =
OCR0 - 1;}
}
}

Wie man sieht steuer Timer 0,1 und 2 jeweils eine LED.

Und sicherlich sehr Ihr auch den grausamen Änfängercode.
Wie macht man es richtig, wenn man die ersten zwei while-schleifen
PARALLEL mit den anderen 2 Schleifen laufen.

Danke nochmal und Güße

popi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.