- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: PWM Frage und Interrupt mit Tasten?

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ja habs mal im Simulator versucht. Es geht. Naja hab mich schon bei void main(void) zurückgehalten.

    Zum Problem. Um Hardwarefehler auszuschließen, würde ich noch eine LED an den PWM Ausgang hängen.
    Ansonsten würde ich die Init nur einmal durchlaufen und dann nur noch den Vergleichswert (OCR1B) ändern. Wobei ich zugeben muss, dass es auch das so funktionieren müsste.

    Gruß

    Jens

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Hallo Sebastian,

    Hallo, so wie ich sehe möchtest Du Timer1 in 8 Bit Fast PWM Mode betreiben und Dein Takt auf OC1B ausgeben, den musst Du aber auch noch als Ausgang konfigurieren.
    Das habe ich bestimmt verwechselt, da der PWM Ausgang am OC1A ist.
    Komme nicht so klar mit dem Datenblatt vom Atmega8.

    Dann wäre doch das richtiger oder?
    DDRB = (1<<PB1);


    Damit läuft der Timer mit µC Takt, ist das nicht was schnell ?
    Nee , das wollte ich auch nicht.
    Da ich ein 14,7456 MHZ Quartz habe.

    Wie müßte ich es jetzt verändern.

    mfg
    Enterprise

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Naja hab mich schon bei void main(void) zurückgehalten.
    Kannst mal sehen, wie oberflächlich ich manchmal lese...

    @Enterprise, ändere Dein Programm bitte so, daß es ein int zurückliefert, auch wenn beim AVR nichts zurückgeliefert wird, es ist halt so und müsste eigentlich eine Warnung beim kompilieren geben...

    zu Deinem PWM Kanal

    Code:
    TCCR1A = (1<<COM1B1)|(1<<WGM10)|(1<<WGM12);
    8 Bit Fast PWM Modus
    OC1B geht LOW bei Compare Match also TCNT1= OCR1B
    OC1B geht HIGH bei Bottom also TCNT1 = 0

    Wenn Du das auf OC1A ändern willst muß so aussehen:
    Code:
    TCCR1A = (1<<COM1A1)|(1<<WGM10)|(1<<WGM12);
    und anstatt OCR1B nimmt man halt OCR1A und ja PB1 muß dann als Ausgang deklariert werden.

    Zu der PWM Frequenz, tja was ist sinnvoll für Motoren ? 10 kHz ?
    wenn Du den Timer mit µC Takt laufen läßt hast Du eine PWM Frequenz von 14745600 / 256 = 57,6 KHz
    bei Prescaller 8 7,2 KHz
    bei Prescaller 64 900 Hz

    Muß mal schauen, was am besten passt.

    Und mach das dann so wie McJenso sagt,
    am Anfang Timer Initialisieren, im Programm dann nur OCR1A ändern

    0 -> Stopp
    255-> Voll
    128 -> Halb usw.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Hallo Sebastian,

    Jetzt bin ich wirklich durcheinander.

    Code:
    #include <avr/io.h>
    #include <stdint.h>
    
    
    void pwminit()
    {
    TCCR1A = (1<<COM1A1)|(1<<WGM10)|(1<<WGM12);
    TCCR1B = (1<<CS10);
    OCR1A = 128;
    }
    
    int main()
    {
    DDRD=0x0c;             // Port PD2 u. PD3 auf Port D als Ausgang
    PORTD=0x0c;            // Pins PD2 u. PD3 auf Port D auf low
    
    DDRB &=~(1<<PB3);
    PORTB |=(1<<PB3);
    
    DDRB |= (1<<DDB1);
    DDRD |= (1<<DDD5);
    
    pwminit();
    
    while(1)
    
    if ( PINB & ( 1<<PINB3 ) )     
          {
    	   PORTD |= (1<<PD5);
           PORTD |= (1<<PD2);     // LED ein "Test"   
           // pwminit();
              }
       else
           {
             PORTD &= ~(1<<PD2);   // LED aus "Test"
          }     
    
    }
    Habe versucht alles zu beachten, was ihr mir geschrieben habt.

    mfg
    Enterprise

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Jetzt bin ich wirklich durcheinander
    Warum ?
    Ich glaube es liegt eher daran, daß Du Anfänger in Sachen C u. µC bist, oder ?

    Ich versuche Dein Programm etwas abzuändern:

    Code:
    #include <avr/io.h> 
    #include <stdint.h> 
    
    int main(void) { 
    DDRD=(1<<PD2)|(1<<PD3)|(1<<PD5); 
    DDRB = (1<<PB1);
    PORTB = (1<<PB3);
    TCCR1A = (1<<COM1A1)|(1<<WGM10)|(1<<WGM12); 
    TCCR1B = (1<<CS10); 
    while(1)  {
       if ( PINB & ( 1<<PINB3 ) ) { 
          PORTD |= (1<<PD2)|(1<<PD5); 
          OCR1A = 128;  
       } 
       else { 
          PORTD &= ~((1<<PD2)|(1<<PD5));   // LED aus "Test" 
          OCR1A = 0;
       }      
    } 
    return 0;
    }
    Ich sag mal so, das müsste klappen

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Danke Sebastian,

    Funktioniert natürlich mit deinem Programm.

    Ich glaube es liegt eher daran, daß Du Anfänger in Sachen C u. µC bist, oder ?
    Dabei hast du recht mit der Annahme.

    Habe festgestellt, es ist für ein Anfänger ziemlich schwer ohne jemanden fragen zu können, der Ahnung hat.
    Deshalb habe ich mich erst heute Abend um 19.00 Uhr gemeldet.
    Da ich den ganzen Tag versucht habe mich im Forum, RN Wissen, Tutorials, Datenblätter u.s.w durch zu lesen.
    Das hatte ja keinen roten Faden.

    Danke nochmals für deine Hilfe und deine Geduld.

    mfg
    Enterprise

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Funktioniert natürlich mit deinem Programm.
    Wieso meinem ? Ich habe nur etwas nachgeholfen.

    Wichtig ist aber, daß Du das verstehst, dann ist die Erweiterung auf 3 Tasten nur noch ein kleiner Schritt...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Hallo zusammen,

    Gestern habe ich mit izaseba das Programm zusammen gestellt.

    Code:
    #include <avr/io.h>
    #include <stdint.h>
    
    int main(void) {
    DDRD=(1<<PD2)|(1<<PD3)|(1<<PD5);
    DDRB = (1<<PB1);
    PORTB = (1<<PB3);
    TCCR1A = (1<<COM1A1)|(1<<WGM10)|(1<<WGM12);
    TCCR1B = (1<<CS10);
    while(1)  {
       if ( PINB & ( 1<<PINB3 ) ) {
          PORTD |= (1<<PD2)|(1<<PD5);
          OCR1A = 128; 
       }
       else {
          PORTD &= ~((1<<PD2)|(1<<PD5));   // LED aus "Test"
          OCR1A = 0;
       }     
    }
    return 0;
    }
    Ich kann in der IF Schleife den Wert OC1A ändern wie ich möchte.
    Das hat keine Auswirkung auf die Geschwindigkeit vom Motor.
    Habe auch den Prescale auf CS11 geändert.
    Hatte auch keine Auswirkung.

    mfg
    Enterprise

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,

    muss man für den Motor nicht noch die Richtung vorgeben? Der Motor dreht sich aber oder bewegt er sich gar nicht? Was hast du für einen Motor? Was passiert, wenn du den Taster/Schalter an PB3 betätigst.
    Das Programm sieht gut aus. Würde halt CS11 nehmen.

    Gruß

    Jens

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    03.10.2004
    Alter
    57
    Beiträge
    50
    Hallo,

    muss man für den Motor nicht noch die Richtung vorgeben? Der Motor dreht sich aber oder bewegt er sich gar nicht? Was hast du für einen Motor? Was passiert, wenn du den Taster/Schalter an PB3 betätigst.
    Das Programm sieht gut aus. Würde halt CS11 nehmen.
    Wenn ich die Taste drücke dreht sich der Motor in eine Richtung.
    Ich meine PB40 mit Getriebe so ungefähr.

    Ich habe festgestellt, wenn der Port PB5 high wird, dann
    läuft der Motor.
    Dann habe ich den Port PB4 high geschaltet mit der PB3 Taste, dann hat sich der Motor nicht gedreht.
    Seltsam ?????
    Der müßte ja dann auch in die andere Richtung drehen.

    Was meist du dazu !

    mfg
    Enterprise

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress