-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: C Motorsteuern klappt!?!?!pwm nicht!!!

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099

    C Motorsteuern klappt!?!?!pwm nicht!!!

    Anzeige

    hallo leute,

    kann einer von sagen was ich falsch mach. Er soll eine Pwm geschwindigkeit haben also ich meine das so:

    ocr1a = 12

    nur er dreht immer 255 an statt 12 oder andere zahlen bis 255 warm??

    hier der code noch:

    Code:
    #include <avr/io.h>
    
    
    /* Timer1 initialisieren */
    void timer1_init(void);
    
    
    int main(void)
    {
    	/* Timer1 initialisieren */
    	timer1_init();
    	OCR1AL = 5;
    		
        DDRD = 0xff;
    	PORTD = (1<<PD1)|(1<<PD4)|(1<<PD3);
    	while (1)
    
    		;
    }
    
    /* Timer1 initialisieren */
    void timer1_init(void)
    {
    	/* normale 8-bit PWM aktivieren ( nicht invertiert ),
    	   Das Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet */
    	TCCR1A = (1<<COM1A1)|(1<<WGM10);
    
    	/* Einstellen der PWM-Frequenz auf 14 kHz ( Prescaler = 1 ) */
    
    	/* Interrupts für Timer1 deaktivieren
    	Achtung : Auch die Interrupts für die anderen Timer stehen in diesem Register */
    	TIMSK &= ~0x3c;
    }
    danke im voraus

    gruß
    patrick

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    so auf den ersten Blick hätte ich zwei Anmerkungen,
    • Wie schauts mit einem Prescaler aus, wenn kein Wert gesetzt wird ist er 0, und somit der Timer aus.
    • Du schreibts nur nach OCR1AL, das ist aber ein 16-Bit Register, da sollte man trotzdem OCR1A angeben, dann macht der Compiler den Rest mit High und Low-Register.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    ups wo ich das da gerade sehe wollte eigentlich auch ocr1a schreiben

    aber gut das du mich aufmerksam darauf gemacht hast.

    gruß
    patrick

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    klappt immer noch nicht:

    Code:
    #include <avr/io.h>
    
    /* Timer1 initialisieren */
    void timer1_init(void);
    
    
    int main(void)
    {
    	/* Timer1 initialisieren */
    	timer1_init();
    	
    	
    		
        DDRD = 0xff;
    	PORTD = (1<<PD1)|(1<<PD4)|(1<<PD3);
    	while (1)
    
    		;
    }
    
    /* Timer1 initialisieren */
    void timer1_init(void)
    {
    	/* normale 8-bit PWM aktivieren ( nicht invertiert ),
    	   Das Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet */
    	TCCR1A = (1<<COM1A1)|(1<<CS01);
    	OCR1A = 255;
    	/* Einstellen der PWM-Frequenz auf 14 kHz ( Prescaler = 1 ) */
    
    	/* Interrupts für Timer1 deaktivieren
    	Achtung : Auch die Interrupts für die anderen Timer stehen in diesem Register */
    	TIMSK &= ~0x3c;
    }
    stimmt das so nicht?


    gruß
    patrick

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hat sich da was geändert ?
    Schau Dir mal das Register TCCR1B an !
    Thema Clock und Teiler, dazu finde ich nix im Programm.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    ja aber ich möchte doch nur a haben nicht b sonst hätte ich das ja mit darein geschrieben.


    gruß
    patrick

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hast Dir das Register mal angesehen ?
    Hat nix mit PWM Ausgang A oder B zu tun !
    Ist einfach nur ein weiteres Register von Timer 1.
    Und wenn Du da nix reinschreibst läuft der Timer nicht, ganz einfach.

    Also guckst du !?

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    ok mach ich


    gruß
    patrick

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731

    Bei 8MHz CPU-frequenz wird gerne dieses genommen:

    // timer1 on MCU clock/8
    TCCR1B = (1 << CS11);

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    so sieht das ganze jetzt aus


    Code:
    void timer1_init(void)
    {
    	OCR1AL = 0xff;
    	
    	TCCR1A = (1<<WGM10)|(1<<COM1A1)|(1<<COM1A0)|(1<<CS11)| (1<<COM1B1) | (1<<COM1B0);;
    	TCCR1B = (1<<CS11);
    	
    	TIMSK &= ~0x3c;

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •