- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: atmega32-PWM-Frequenz

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo muat, here we go:

    das programm ist in assembler geschrieben, für den atmega8. ich hatte gerade keinen anderen controller da. ich denke, man muss nicht viel ändern für den atmega32.

    es macht ein 800Hz PWM an OC1A bei 16MHz-Takt.

    Code:
       .NOLIST                
       .INCLUDE <m8def.inc> 
       .LIST                    
    
       .def temp = r20 
    
       .CSEG                    
       .org 0 
    
       ; Interupt Vektoren 
       rjmp    init             ; Reset Handler 
       reti                   ; IRQ0 Handler 
       reti                   ; IRQ1 Handler 
       reti                   ; Timer2 Compare Handler 
       reti                   ; Timer2 Overflow Handler 
       reti                   ; Timer1 Capture Handler 
       reti                   ; Timer1 CompareA Handler 
       reti                   ; Timer1 CompareB Handler 
       rjmp overflow          ; Timer1 Overflow Handler 
       reti                   ; Timer0 Overflow Handler 
       reti                   ; SPI Transfer Complete Handler 
       reti                   ; USART RX Complete Handler 
       reti                   ; UDR Empty Handler 
       reti                   ; USART TX Complete Handler 
       reti                   ; ADC Conversion Complete Handler 
       reti                   ; EEPROM Ready Handler 
       reti                   ; Analog Comparator Handler 
       reti                   ; Two-wire Serial Interface Handler 
       reti                   ; Store Program Memory Ready Handler
    
    init: 
    ;Stackpointer 
       ldi temp, LOW(RAMEND) 
       out SPL, temp 
       ldi temp, HIGH(RAMEND) 
       out SPH, temp 
    ;Aus/Eingänge 
    
       ldi temp, 2
       out DDRB, temp                  ; Ausgang
    
    
       ldi    temp,   (1<<COM1A0)|(1<<COM1A1)|(1<<COM1B1)|(1<<WGM10) ; set PWM mode (phase correct)
       out	  TCCR1A, temp
    
       ldi    temp,   (1<<CS10)|(1<<CS11) 
       out    TCCR1B, temp 
    
       ldi    temp,  (1<<TOIE1)
       out    TIMSK, temp 
    
       sei                           ; Generelle Interruptfreigabe 
    
       ldi   temp, 50 ; <--- hier PWM duty cycle. Achtung! 255 bedeutet 0% duty! kleinerer wert -> grösserer duty-cycle
       out   OCR1AL, temp
    
    
    Main: ;----------------------------- Einsprungspunkt Main
    nop
    rjmp Main
    
    overflow:
       ldi   temp, 200
       out   TCNT1L, temp
    reti
    man braucht den interrupt, um die 800Hz frequenz zu bekommen. vielleicht hilft es dir weiter.

    dein deutsch ist gar nicht so schlecht, dafür dass du in der türkei wohnst.

    gruesse von der katz

    edit: ach so, du wolltest es in c. ist aber nicht schwer zu portieren.

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    40
    Beiträge
    685
    Wäre OCR1A nicht 0x270F (9999) anstatt 10000?

    OCRnX=(Clk/(2*Prescaler*f))-1

    Wobei f=800Hz

    Gruß
    Stefan

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    da weicht mein code sicher noch um einiges mehr von den 800Hz ab, der ist nur PI*daumen (messgerät sagte 49-51Hz bei 1MHz takt). ganz auf die schnelle zamgezimmert.. -.-

    was mir selber etwas schleierhaft ist: wieviele pwm stufen ergeben sich eigentlich? die interrupt routine setzt den zähler ja bei überlauf auf 200, ausgang ist dann low. bei comparematch wird er high, zählt bis 255 und dann wieder runter, also 55 stufen? aber, hm, wann findet eigentlich ein überlauf statt, wenn bei 0xFF wieder runtergezählt wird? wäre für erklärungen dankbar. werde das morgen nochmal gründlicher angucken.

    gruesse von der katz

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2006
    Beiträge
    16
    Vielen Dank für die Koden und Antworten.
    İch probiere die Koden, und es geht, aber ich habe eine Frage.
    was muss ich verandern um die Frequenz zu besitimmen?
    Diese Kode gibt 480hz mit 16mhz Taktfrequenz.

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    2 möglichkeiten:
    Code:
    overflow: 
       ldi   temp, 200 ; <---- diesen wert groesser machen
       out   TCNT1L, temp 
    reti
    wenn das nicht genuegt, musst du den prescaler ändern:
    Code:
       ldi    temp,   (1<<CS10)|(1<<CS11) 
       out    TCCR1B, temp
    aendern in:
    Code:
       ldi    temp,   (1<<CS11) 
       out    TCCR1B, temp
    danach TCNT1L aendern, bis es passt.

    hoffe dass das hilft. du solltest dir das datenblatt ansehen.
    (ich auch.. dann wuerde ich nicht mehr um 320Hz danebenliegen)

    gruesse

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    40
    Beiträge
    685
    Hallo Muat,

    was ist denn "Koden"

    Hier mal eine Tabelle (müsste Korrekt sein, wenn nicht, einfach sagen):
    https://www.roboternetz.de/phpBB2/ze...175&highlight=
    (Link im 1.Beitrag).

    Gruß
    Stefan

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2006
    Beiträge
    16
    @robocat
    ich denke, das ist die Lösüng von meine Problem, ich werde es probieren.

    @reeper
    İch meinte "code", aber ich weiß nicht genau auf Deutsch. Können Sie mir richtigen Wort sagen?

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    40
    Beiträge
    685
    Zitat Zitat von muat
    @reeper
    İch meinte "code", aber ich weiß nicht genau auf Deutsch. Können Sie mir richtigen Wort sagen?
    Achso, alles klar. Code ist allgemein und hier auch üblich.
    Wie robocat schon schrieb, steht immens viel im Datenblatt drin.
    Dort steht alles über Register und den dazugehörigen Info's (Ansteuerung kann von Atmel zu Atmel untersch. sein). Im Wiki sind auch einige Beiträge mit Codes.
    ZB:
    https://www.roboternetz.de/wissen/in...nter_%28Avr%29
    (beachte: Fehler:
    • 100.000Hz anstatt 1.000.000Hz
      CS20 anstatt CS22
    )
    http://www.mikrocontroller.net/artic...R-GCC-Tutorial

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    es gibt kein gescheites deutsches wort, soweit ich weiss, hoechstens programm. ich sage meistens "der code" und programmieren/coden für das verb. man kann "quelltext" sagen für die programmzeilen. (aber keiner sagt "quelltexten" für das schreiben von code)

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2006
    Beiträge
    16
    Vielen Dank für ihre Programierung und Deutsch Unterricht

    Grüße von Muat, aus der Türkei...

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen