Wäre OCR1A nicht 0x270F (9999) anstatt 10000?
OCRnX=(Clk/(2*Prescaler*f))-1
Wobei f=800Hz
Gruß
Stefan
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.
man braucht den interrupt, um die 800Hz frequenz zu bekommen. vielleicht hilft es dir weiter.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
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.
Wäre OCR1A nicht 0x270F (9999) anstatt 10000?
OCRnX=(Clk/(2*Prescaler*f))-1
Wobei f=800Hz
Gruß
Stefan
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
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.
2 möglichkeiten:
wenn das nicht genuegt, musst du den prescaler ändern:Code:overflow: ldi temp, 200 ; <---- diesen wert groesser machen out TCNT1L, temp reti
aendern in:Code:ldi temp, (1<<CS10)|(1<<CS11) out TCCR1B, temp
danach TCNT1L aendern, bis es passt.Code:ldi temp, (1<<CS11) out TCCR1B, temp
hoffe dass das hilft. du solltest dir das datenblatt ansehen.
(ich auch.. dann wuerde ich nicht mehr um 320Hz danebenliegen)
gruesse
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
@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?
Achso, alles klar. Code ist allgemein und hier auch üblich.Zitat von muat
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
Vielen Dank für ihre Programierung und Deutsch Unterricht
Grüße von Muat, aus der Türkei...
Lesezeichen