mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik timer/counter 1+pwm auf pin ausgeben


Autor: unbekannt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ich versuche mit dem timer/counter 1
zwei unteschiedliche PWM signale auf die pins/ports PD4 PD5 
auszugeben...
aber irgendwie klappt das ganze noch nicht so wie es soll...
das ganze soll mit der fast PWM mode laufen

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ja interessant. Hast du auch eine Frage?

Spaß beiseite.: Wie versuchst du es denn? Was tut sich? Um welchen 
Controller geht's überhaupt?

Autor: unbekannt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dabei handelt es sich um einen atmega32,
das problem ist, das auf beide pins immer ein und dieselbe PWM 
ausgegeben wird, resultat dessen ist, das die beiden motoren immer 
gleich schnell drehen und man den einen motor nicht halb so schnell wie 
den anderen laufen lassen kann...
und das ganze passiert obwohl die vergleichswerte unterschiedlich sind
z.b.
OCR1A = 1024;
OCR1B = 512;

dabei ist der prescaler auf 1 gesetzt und wir haben einen externen takt 
von 16MHz

////////////////////////////////////////
////  Variablendefinition      ////
////////////////////////////////////////

OCR1A = 1024;
OCR1B = 512;

//////////////////////////////////////
//  Timer / Counter        //
//////////////////////////////////////

TCCR1A   = 0xA3;  //Startet Timer/Counter 1
TCCR1B   = 0x19;  //Startet Timer/Counter 1
ICR1=0x03FF;

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Wert "1024" liegt außerhalb des Bereiches der 10-Bit-PWM! Die geht 
nur bis 1023 (0x3FF)...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, Du würdest hilfswilligen Lesern Deines Codes (und nicht zuletzt 
auch Dir selbst) einen großen Gefallen tun, wenn Du Sachen wie
TCCR1A   = 0xA3;  //Startet Timer/Counter 1
TCCR1B   = 0x19;  //Startet Timer/Counter 1
mit den Bitnamen in der Art
TCCR1A = (1 << BITNAME1)|(1 << BITNAME2)|(1 << BITNAME3); //usw....
schreibst. Dann kann man nämlich sofort sehen, welche Steuerbits Du da 
gesetzt hast.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: Wenn Du als TOP-Wert eh 0x3FF verwendest (10-Bit-PWM), dann kannst 
Du auch den PWM-Modus 3 (phase correct 10-Bit) oder 7 (fast 10-Bit) 
nehmen und brauchst das ICR1 nicht zu behelligen...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, also wenn ich die Bits richtig auseinandergefummelt hab, dann sind 
alle WGM-Bits 1 (PWM-Mode 15). Das heißt, dass der TOP-Wert OCR1A ist. 
Der Timer läuft also immer nur bis zu dem Wert hoch, den du in OCR1A 
speicherst. Der Wert von ICR1 ist dann eh wurscht.
Ich nehme an, du wolltest PWM-Mode 14 haben.

Autor: unbekannt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok ich habs mal lesbarer gemacht...

OCR1A = 1000;
OCR1B = 50;
wert =0;
//////////////////////////////////////
//  Timer / Counter       ///
//////////////////////////////////////
TCCR1A =   (1 << COM1A1)|(0 << COM1A0)|(1 << COM1B1)|(0 << COM1B0)
       |(0 << FOC1A)|(0 << FOC1B) |(1 << WGM11)|(1 << WGM10);
TCCR1B =   (0 << ICNC1)|(0 << ICES1)|(0 << WGM13)
       |(1 << WGM12)|(1 << CS12) |(0 << CS11)|(1 << CS10);

Fahrt_vorwaerts();



////hier die funktion ///////
#define  MRR  PORTC  &=  0x7F;
#define  MRV  PORTC  |=  0x80;
#define  MLR  PORTC  &=  0xBF;
#define  MLV  PORTC  |=  0x40;

void Fahrt_vorwaerts(void)
{
  MLV;
  MRR;
}

so aber weiterhin besteht das problem, das auf beide ports (D4 D5)
das gleiche PWM geliefert wird, obwohl
OCR1A = 1000;
OCR1B = 50;
einen unterschiedlichen wert enthalten....

muss ich noch irgendein register setzten oder geht es generell nicht, 
das man mit einem Timer/counter 2 unterschiedliche PWM auf die dafür 
zuständigen PWM-Ports geben kann ???

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(0 << FOC1A)

multosenseful...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass die "0 << irgendwas" besser weg... Die bringen nichts. Die 
Reihenfolge ist ebenfalls egal. Hauptsache, man muss sich nicht erst das 
komplette Bitmuster aufmalen und alles auseinandertüddeln.

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und alles auseinandertüddeln.

Vielleicht gibt es dafür ja irgendwo im Netz eine JAVA-Applet ... ;-)

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.