Gast
#6536515
Hallo, ich verstehe nicht warum mein Code nicht funktioniert. Ich bekomme einfach keinen Output auf PB3 was ist mein Fehler? Für Hilfe wäre ich sehr Dankbar. Viele Grüße Herrmann
|
Anzeige
|
PWM auf PB3 Atmega 328 P
Gast
#6536515
Hallo, ich verstehe nicht warum mein Code nicht funktioniert. Ich bekomme einfach keinen Output auf PB3 was ist mein Fehler? Für Hilfe wäre ich sehr Dankbar. Viele Grüße Herrmann
Gast
#6536516
Hier der Code nochmal in Text Form
Gast
#6536566
> Ich bekomme einfach keinen Output auf PB3 was ist mein Fehler?
PB3 ist OC2A, offenbar soll die Pulsbreitenmodulation aber auf OC2B
erfolgen,.
Gast
#6536589
S. Landolt schrieb: > PB3 ist OC2A, offenbar soll die Pulsbreitenmodulation aber auf OC2B > erfolgen,. Je genau deswegen schreibe ich ja auch :
Gast
#6536601
Aber für OC2A ist das SFR OCR2A zuständig, und dieses ist im Modus 7 der TOP-Wert.
Gast
#6536607
OC2A (der Pin) wird abhängig von OCR2A (dem Register) gesetzt/gelöscht. Nicht abhängig von OCR2B. Ich hab das im Datenblatt nicht geprüft, vermute aber anhand der Kommentare "Frequenz einstellen", du hast einen CTC-Modus ausgewählt, d.h. der Timer läuft hoch bis OCR2A. Dann kannst du OC2A nicht als PWM-Ausgang verwenden, weil der Timer nie größer wird als OCR2A. Das ist mit etwas anderen Worten das gleiche, was S. Landolt auch schon gesagt hat. Es ergibt ferner im CTC-Modus keinen Sinn, wenn OCR2A 100 ist, in OCR2B Werte bis 200 zuzulassen. Der Timer läuft eh nur bis 100. MfG, Arno
Gast
#6536608
okay entschuldige ich bin etwas neu im programmieren mit Registern. Was muss ich jetzt schreiben um eine PWM an PB3 zu bekommen? :)
Gast
#6536611
Arno schrieb: > Es ergibt ferner im CTC-Modus keinen Sinn, wenn OCR2A 100 ist, in OCR2B > Werte bis 200 zuzulassen. Der Timer läuft eh nur bis 100. das ist richtig hier habe ich einen fehler gemacht ich wollte
schreiben
Gast
#6536613
korrigiere OCR2A = 200;
Gast
#6536615
Also entweder PWM im Modus 7 auf OC2B, das liegt auf PD3, oder PWM im Modus 3 auf OC2A (PB3), dann allerdings lässt sich die Frequenz nur sehr grob per Vorteiler einstellen. S. Landolt schrieb: > PB3 ist OC2A Richtig. OC2A ---> PB3 OC2B ---> PD3
Gast
#6536625
> Was muss ich jetzt schreiben um eine PWM an PB3 zu bekommen?
Als erster Versuch: Modus 3 verwenden, d.h. 'TCCR2B |= (1<<WGM22)'
weglassen und 'OCR2A = map(analogRead...' schreiben.
Gast
#6536627
S. Landolt schrieb: > Also entweder PWM im Modus 7 auf OC2B, das liegt auf PD3, oder PWM im > Modus 3 auf OC2A (PB3), dann allerdings lässt sich die Frequenz nur sehr > grob per Vorteiler einstellen. Okay Danke also vielleicht erkläre ich mal mein Vorhaben. Ich möchte auf PB1,PB2 und PB3 eine PWM ausgeben im Mode 3 kann ich keinen Dutycycle einstellen. Ich benötige allerdings eine Frequenz von 10 kHz und einen variablen Dutycycle.
Gast
#6536643
Für diese Anforderungen sehe ich bei den Gegebenheiten keine Lösung. Timer2 im Modus 3, mit Vorteiler 1024 bei (vermutlich) 16 MHz, ergäbe 15.6 kHz, doch weit weg von 10 kHz.
Beitrag #6536646 wurde von einem Moderator gelöscht.
Gast
#6536650
Okay Entschuldigung die genaue Frequenz ist nicht so wichtig PB1, PB2, PB3 sollten nur alle die gleiche Frequenz haben so um die 10kHz es muss nicht genau 10 KHz sein +-3kHz sind egal.
Gast
#6536669
Dann würde ich, als ersten Ansatz, für Timer1 & Timer2 den Vorteiler 1024 versuchen.
Gast
#6536673
Habs hin bekommen danke :)
Gast
#6536684
Herrmann schrieb: > im Mode 3 kann ich keinen Dutycycle > einstellen. Das stimmt so nicht. MfG, Arno
Gast
#6536695
Jup hab ich auch gemerkt den dutycycle kann man sehr wohl einstellen, hier noch mein fertiger code:
Gast
#6536697
> Habs hin bekommen danke :)
Prima!
Ich hatte nämlich übersehen, dass beim Timer2 ja auch noch durch 2^8 =
256 geteilt wird, damit sieht es dann deutlich besser aus, z.B. 16 MHz
/256 /8 = 7.8 kHz.
Hallo, auch wenn der Timer scheinbar das macht was er soll, sollte man in der Arduino IDE alle Timerregister (TCCRnx und TIMSKn) vorher löschen. Die werden mittels setup() im Hintergrund für analogWrite voreingestellt. Das schützt vor unliebsamen Überraschungen wenn der Timer plötzlich nicht das macht was er eigentlich sollte. Ich selbst beginne mit TCCRnB, damit der Timer erstmal gestoppt ist. Für die Prescalereinstellerei noch 2 Funktionen die einem das Leben leichter machen. Kannste auf jeden Timer anpassen.
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|