So langsam krieg ich die Krise hier (sonst würd ich ja nicht schreiben
;) )...
Ich versuche seit einigen Tagen, den Timer2 des ATmega8535 für eine
schnellstmögliche PWM zu konfigurieren. Der aktuelle Stand sieht so aus,
vielleicht fällt hier wem ein offensichtliches Brett vorm Kopf auf:
1
; Clear Timer on Compare Match (CTC) mode (WGM-Bits=2), toggle on each
2
; match (COM-Bits=1) und interner Taktquelle ohne Prescaling (CS-Bits=1)
3
ldi tmp2, 128 ; kürzestmögliches Intervall für CTC
4
out OCR2, tmp2
5
ldi tmp1, 1 << WGM21 | 1 << COM20 ; noch nicht die Uhr starten
6
out TCCR2, tmp1
7
; starten via Setzen des Clock Bits
8
ori tmp1, (1 << CS20)
9
out TCCR2, tmp1
10
11
; PWM an OC2/PD7 initialisieren als Takt für LCD
12
sbi DDRD, 7 ; PD7 = OC2 wird als Output konfiguriert, damit er
13
; als PWM-Ausgang dienen kann
14
15
; reset timer to just before overflow, to get a little extra time
16
ldi tmp1, 254
17
out TCNT2, tmp1
Fein, das compiliert auch und ich hab mehrmals nachgeschaut, ob ich
WIRKLICH die Drähte am richtigen Pin hab, ob der Sockel Kontakt zum AVR
hat, ob die Spannungen alle stimmen etc etc... was Irrtümer nicht
ausschließen soll. Durch diverse LED-Tests hab ich aber verifiziert, daß
der AVR tut und das aktuelle Programm kriegt.
Im Datenblatt hab ich zigmal den Artikel über den Timer2 gelesen...
COM21:0 soll 1 sein, damit "toggle on each match" passiert, WGM21:0 soll
2 sein, damit CTC passiert. Das Datenblatt sagt auch, daß all diese Bits
wirklich in TCCR2 sind... Spannend ist hier auch, daß im TEXT des
Datenblattes gesagt wird, COM21:0=1 wäre für "toggle on each match",
aber in der entsprechenden Tabelle steht nur "reserved"... als ob diese
Kombination nicht implementiert wäre. Was stimmt jetzt?
OK, zum wirklichen Problem: Schließe ich nun an Pin PD7/OC2 eine LED
über 1kO nach GND an, leuchtet sie einfach. Nicht halb so hell wie an
einem dauernd auf HIGH gesetzten Pin, nicht blinkend (egal, welcher
Prescaler, welcher PWM-Modus und welcher OCR2-Wert), sondern genauso
hell (also keine PWM mit 50% duty, wie anfangs erwartet). Ein Voltmeter
zeigt keinen Wechselstrom an. Es ist auch wirklich PIND7.
Simuliere ich das Ganze im AVR Simulator (AVR Studio 4.18.716 SP3), wird
schonmal gleich der PWM-Modus falsch erkannt... bekanntes, nicht in
absehbarer Zeit zu lösendes Problem seitens ATMEL, wie eine kurze
Recherche ergab. Prima. Der CTC funktioniert aber auch dann nicht, wenn
der Simulator behauptet, CTC sei aktiviert (der Timer wird bei
Match-Flag NICHT zurückgesetzt).
Ich hab auch Fast PWM (WGM21:0 = 3) versucht, mit demselben "Erfolg".
Auch mit COM21:0 = 1 und = 2... erfolglos.
Die AppNotes von Atmel zum Timer und zur PWM hab ich gelesen...
ebenfalls kein Erfolg.
Kann mir irgendwer sagen, was ich falsch mache? Ich wäre für jeden
Hinweis SEHR dankbar!
(Der Timer-Reset auf 254 am Schluß war ein letzter Notanker, als alles
andere nicht geklappt hat... weder mit OCR2=0, 1, 2 oder 128. Ich
dachte, vielleicht liegt es an irgendwelchen Delays... nö. Nicht so
jedenfalls.)
Vielen Dank schonmal!
Eingehirner
Einen direkten Fehler sehe ich nicht.
Ich würde mal versuchen, das Datenrichtungsbit zu setzen bevor die
Timerinitialisierung gemacht wird. Es steht zwar nirgendwo das es so,
wie Du es gemacht hast, nicht geht, aber man könnte es mal probieren.
Schreib mal bitte ob das geholfen hat.
Ein kleiner Hinweis noch:
>Spannend ist hier auch, daß im TEXT des>Datenblattes gesagt wird, COM21:0=1 wäre für "toggle on each match",>aber in der entsprechenden Tabelle steht nur "reserved"... als ob diese>Kombination nicht implementiert wäre. Was stimmt jetzt?
Du hast wahrscheinlich in der falschen Tabelle geguckt. Tabelle Nr. 53,
die aussagt, das COM21:0=1 reserviert ist, gilt nur für den
Fast-PWM-Modus. Tabelle 52 ist für den CTC-Modus massgebend.
In einer Application Note zur PWM wirst Du zum CTC-Modus wahrscheinlich
nichts relevantes finden. Denn der CTC Modus ist was anderes. Das ist
überhaupt etwas, was mich ein wenig irritiert. Du sprichst von PWM
stellst aber einen CTC-Modus ein. Meinst Du, Du willst eine PWM mit dem
CTC-Modus erzeugen oder willst Du wirklich einen PWM-Modus des Timers
benutzen?
Eine LED zum testen zu verwenden kann bei schnellen Takten irreführend
sein. Vielleicht kannst Du Dir doch irgendwo ein Oszilloskop leihen. Das
ist wesentlich verlässlicher als eine LED oder ein Multimeter.
Hi
> Spannend ist hier auch, daß im TEXT des>Datenblattes gesagt wird, COM21:0=1 wäre für "toggle on each match",>aber in der entsprechenden Tabelle steht nur "reserved"... als ob diese>Kombination nicht implementiert wäre. Was stimmt jetzt?
Du redest erst von PWM und dann von CTC. Für CTC gilt die Tabelle
*Table 52 Compare Output Mode, non-PWM Mode*
>Simuliere ich das Ganze im AVR Simulator (AVR Studio 4.18.716 SP3), wird>schonmal gleich der PWM-Modus falsch erkannt... bekanntes, nicht in>absehbarer Zeit zu lösendes Problem seitens ATMEL, wie eine kurze>Recherche ergab.
Falsch. Dein Programm macht genau das, was du programmiert hast. Sogar
im Simulator.
MfG Spess
@ Guru: Hab ich auch schon probiert... es wird empfohlen, das Bit danach
zu setzen (irgendwas mit "do the setup before setting the pin as output"
oder so), aber auf beide Weisen klappts nicht.
(Quelle: Datenblatt S. 120: "The setup of the OC2 should be performed
before setting the Data Direction Register for the port pin to output."
Die Output Compare Unit wird ja von CTC und FastPWM verwendet, also hab
ich gefolgert, daß es so herum am sinnvollsten ist. Weiter unten steht
noch "The design of the output compare pin logic allows initialization
of the OC2 state before the output is enabled.")
Weshalb ich teilweise vom CTC-Modus spreche: Laut Datenblatt verhalten
sich Fast PWM und CTC mit dem Setting COM21:0=1 gleich, wenn man OCR2=0
setzt (sie geben ein schnellstmöglich oszillierendes Signal aus). Der
einzige Unterschied ist, daß bei CTC der Wert für OCR2 nicht double
buffered ist. Ich hatte es erst mit Fast PWM versucht, dann mit CTC.
Deshalb die bunte Mischung im Code aus CTC und PWM. Beides wurde für
sich getrennt versucht, beides sollte (mit größerer Fehleranfälligkeit
für CTC) laut Datenblatt einen ähnlichen Output ergeben... beides tut
bei mir nicht.
(Quelle: Datenblatt, S. 123: "For generating a waveform output in CTC
mode, the OC2 output can be set to toggle its logical level on each
Compare Match by setting the Compare Output mode bits to toggle mode
(COM21:0 = 1). [...] The waveform generated will have a maximum
frequency of fOC2 = fclk_I/O/2 when OCR2 is set to zero (0x00)." und S.
125: "A frequency (with 50% duty cycle) waveform output in fast PWM mode
can be achieved by setting OC2 to toggle its logical level on each
Compare Match (COM21:0 = 1). The waveform generated will have a maximum
frequency of foc2 = fclk_I/O/2 when OCR2 is set to zero. This feature is
similar to the OC2 toggle in CTC mode, except the double buffer feature
of the output compare unit is enabled in the fast PWM mode.")
Daß eine LED nicht das ideale Testmittel ist, weiß ich... aber ich hab
leider keinen Zugang zu einem Oszi. Mein Multimeter erkennt aber
immerhin die 2kHz von einem NE555, den ich zum Invertieren in derselben
Schaltung verwende, als Wechselstrom mit der korrekten Spannung; ich
weiß natürlich nicht, ob es dann bei 7,3728 MHz nicht dicht macht, aber
einen Versuch war's wert.
Ziel der Schaltung und des Programms ist es letzten Endes, an OC2 den
Takt für ein LCD-Display zu erzeugen; das hat als erstes nicht
funktioniert (das Display bekommt offensichtlich keinen Takt). Da beim
LCD aber mehr Unwägbarkeiten auftreten können -- falsche Ansteuerung,
falscher ON-Befhel etc etc --, bin ich zu Testzwecken zur LED
übergegangen. Eine Helligkeitsänderung um 50% sollte damit beobachtbar
sein.
@ spess53: Zum ersten Punkt: Siehe oben, ich les ja das Datenblatt nicht
umsonst... zum zweiten: Im AVRFreaks-Forum hat sich einer direkt mit
Atmel unterhalten, der dasselbe (Teil-)Problem hatte. NEIN, AVR Studio
ist anscheinend NICHT in der Lage, alle PWM-Modes auf allen µCs korrekt
darzustellen, das ist ein bekannter Bug, der wohl in nächster Zukunft
nicht gelöst werden wird (und dummerweise nicht unter den bekannten
Problemen aufgelistet wird). Die (zahlenmäßig) niedrigen Modes werden
meist korrekt wiedergegeben, die höheren (insbesondere FastPWM und alles
darüber) meistens nicht.
Abgesehen davon wird bei mir bei einem WGM21:0-Setting von 3 (beide Bits
= 1) in AVR Simulator ein CTC-Mode erkannt (das zeigt AVR Simulator ja
an, wenn man sich die Byte-Werte von Timer2 anschaut), kein FastPWM wie
im Datenblatt angegeben. Und trotz "CLEAR Timer on compare match" wird
bei mir der Timer im Simulator NICHT gecleared, obwohl das "Match"-Flag
nach einem Match gesetzt ist.
Hi
>Zum ersten Punkt: Siehe oben, ich les ja das Datenblatt nicht>umsonst... zum zweiten: Im AVRFreaks-Forum hat sich einer direkt mit>Atmel unterhalten, der dasselbe (Teil-)Problem hatte.
Der Simulator unterstützt keine PWM-Modi mit variablen Topwert. Ist mir
bekannt. Das betrifft aber eigentlich nur 16-Bit-Timer. Der Timer2 von
deinem ATMega fällt nicht darunter.
>Abgesehen davon wird bei mir bei einem WGM21:0-Setting von 3 (beide Bits>= 1) in AVR Simulator ein CTC-Mode erkannt (das zeigt AVR Simulator ja>an, wenn man sich die Byte-Werte von Timer2 anschaut), kein FastPWM wie>im Datenblatt angegeben. Und trotz "CLEAR Timer on compare match" wird>bei mir der Timer im Simulator NICHT gecleared, obwohl das "Match"-Flag>nach einem Match gesetzt ist.
Das Clear bezieht sich auf der OC-Ausgang nicht auf den Timer!
MfG Spess
NEIN! Warum sollte der Modus denn sonst "Clear TIMER on Compare Match"
heißen? Auch der Satz im Datenblatt mit der kürzestmöglichen Pulsdauer
ist sonst nicht sinnvoll.
Zitat: "In CTC mode, the COUNTER is cleared to zero when the COUTER
value (TCNT2) matches the OCR2. The OCR2 defines the top value for the
COUNTER, hence also its resolution." (DB, S. 122)
Kleine Info noch, ich hab im Datenblatt nichts gefunden, aber vielleicht
ist es relevant: Ich habe KEINE Interrupts aktiviert. Die Flag OCF2 wird
also nur beim ersten Match gesetzt, es erfolgt kein automatischer Reset.
Wenn ich alles richtig verstanden habe, brauche ich diese Flag aber
nicht für die Hardware-PWM, sondern ausschließlich, falls ich einen
Interrupt triggern will (sitzt ja im TIFR). Sollte also kein Problem
sein, CTC und PWM sollten auch funktionieren, wenn nach dem jeweils
ersten Auftreten TOV2 und OCF2 dauerhaft gesetzt bleiben.
Hi
>NEIN! Warum sollte der Modus denn sonst "Clear TIMER on Compare Match">heißen? Auch der Satz im Datenblatt mit der kürzestmöglichen Pulsdauer>ist sonst nicht sinnvoll.
Also vorweg: Ich habe das eben im Simulator getestet. Das wird
fehlerfrei simuliert. Bei OCR2=128 zählt der Timer bis 127 und fängt
dann von Null wieder an. Gleichzeitig wird PIND7 getoggled. Absolut
korrekt.
Was mich irritiert:
> ldi tmp2, 128 ; kürzestmögliches Intervall für CTC
^^^^^^^^^^^^^^^^
Wie kommst du zu dieser Annahme?
MfG Spess
Hmmmm, interessant. Du hast dieselbe AVR Studio-Version wie ich? Ich
habs gestern stundenlang probiert. PIND7 wird auch von nichts anderem
verwendet. PORTA/PORTC werden komplett als Outputs konfiguriert und für
die LCD-Ansteuerung benutzt, aber erst deutlich später im Code...
Wie weiter oben erwähnt, hatte ich für OCR2 Werte wie 0, 1, 2, 4, 128
ausprobiert. 128 war der letzte, deshalb steht der noch drin... den
Kommentar hab ich geschrieben, als ich 0 ausprobiert hab... sorry für
die Nachlässigkeit. Gleiches Problem wie beim CTC -- die Kommentare
ignoriert man leicht, wenn man ständig was ändert...
Hast du einfach nur meinen Code kopiert und compiliert? Hast du den
ATmega8535 als Typ verwendet? Wenn du's zum Laufen gekriegt hast, stell
doch bitte deinen kompletten Code mal hier rein, vielleicht fällt der
Groschen dann schneller...
Hi
>Du hast dieselbe AVR Studio-Version wie ich?
Ja.
>Hast du einfach nur meinen Code kopiert und compiliert?
Ja. Nur das tmp-Gedödel durch r16/r17 ersetzt und assembliert.
>Hast du den ATmega8535 als Typ verwendet?
Ja.
1
ldi r17, 128 ; kürzestmögliches Intervall für CTC
2
out OCR2, r17
3
ldi r16, 1<<WGM21 | 1 << COM20 ; noch nicht die Uhr starten
4
out TCCR2, r16
5
; starten via Setzen des Clock Bits
6
ori r16, (1 << CS20)
7
out TCCR2, r16
8
9
; PWM an OC2/PD7 initialisieren als Takt für LCD
10
sbi DDRD, 7 ; PD7 = OC2 wird als Output konfiguriert, damit er
11
; als PWM-Ausgang dienen kann
12
13
; reset timer to just before overflow, to get a little extra time
CTC ist doch kein PWM, denke ich mal. Zumindest keine sinnvolle PWM.
Durch ändern des Topwertes andert sich ja das Tastverhältnis nicht. Das
bleibt immer 1:1, es ändert sich nur die Frequenz. Eine LED brennt dann
mit ca 70% Helligkeit gleichmäßig.
@ Spess: Danke, ich werd's daheim nochmal versuchen... wenn du es zum
Laufen kriegst, MUSS ich ja irgendwo einen Fehler haben, auch wenn ich
keine Ahnung hab, wo...
@ Ralf: 50%, nicht 70%, oder? Es ist ja kein Sinus (U_eff =
sqrt(2)*U_max ~ 0.707*U_max), sondern eine Rechteck-Kurve
(Leuchtleistungsberechnung via P_eff = P_an*duty+P_aus*(1-duty) =
P_an*0.5+0*0.5 = 0.5*P_an). Und wie aus meiner gewünschten Anwendung
hervorgeht, ist mir der Modulationsteil egal, ich brauche nur ein
schnellstmögliches an-aus-an-aus des PIND7. Da tut's CTC genauso wie
FastPWM. Auch alles siehe oben.
@Eingehirner
da gibts diese zwei verschiedenen Ansichten ...
'Variante 70%' gefällt mir besser :-) Ich habe mir allerdings die
Herleitung nicht gemerkt. Sehen kann man das an der Helligkeit der LED
(auch an der Drehzahl eines Motors!). In den z.B. ersten 30% leuchtet
die LED immer heller, in den letzten 30% passiert fast nichts mehr. Die
Helligkeit (Drehzahl beim Motor) ist nicht linear zum Tastverhältnis.
Das hat fast nichts mit der Wahrnehmung des Auges zu tuen (bei der LED
natürlich).
@ Spess: Ich bin mir SEHR sicher, ja. Aber kontrollieren werd ich's auf
jeden Fall nochmal.
@ Ralf: Es sollte in der Physik eigentlich keine "Ansichten" geben...
Die effektive Spannung kann ich ganz simpel über den Mittelwert der an-
und aus-Spannungen berechnen, bei U_aus=0V noch einfacher via U_eff =
Tastverhältnis*U_an = 0.5*U_an. Die Leistung ist P=U²/R, allerdings
zeitlich getrennt für U_an und U_aus, also hier P_eff =
U²/R*Tastverhältnis = 0.5*P_an. Die Ströme, die die LED zum Leuchten
bringen, sind aber vermutlich die wichtigste Größe (es fällt ja immer
dieselbe Spannung ab).
Daß das menschliche Auge Lichtstärken logarithmisch wahrnimmt, ist
nochmal ein anderes Thema, aber erkennen kann man den Unterschied
trotzdem sehr gut...
Beim Motor sollte aber wegen der linear ansteigenden aufgenommenen
Leistung ein ungefähr linearer Verlauf der Drehzahl vorliegen!
So, ich habs ausprobiert... mit FastPWM funktionierts in der Schaltung,
aber im Simulator nicht (dort wird CTC "erkannt"), mit CTC funktionierts
in beiden Fällen nicht (der Simulator erkennt den Modus "normal"). Ich
hab überprüft, ob der korrekte µC eingestellt ist (ja), ob die korrekte
Headerdatei eingebunden wird (ja) und ob ich irgendwo aus Versehen die
Pins doch anders beschaltet hab (nein). Auch ein Minimalprogramm liefert
das unerwünschte Ergebnis. Aber wie gesagt, mit FastPWM funktioniert die
eigentliche Schaltung jetzt wie gewünscht!
Allerdings kann es sein, daß alles "für die Katz" war, denn ich kann die
Leitung, über die die 3.6MHz-Takte übertragen werden, nicht beliebig
kurz machen und anscheinend kommen die nur sehr unregelmäßig an, genauso
wie die Steuerpulse für's LCD. Bin jetzt mit einem Prescaler von 1024
erfolgreich gewesen, aber das ist natürlich nur suboptimal...
Hi
>aber im Simulator nicht (dort wird CTC "erkannt"), mit CTC funktionierts>in beiden Fällen nicht (der Simulator erkennt den Modus "normal").
Interessante Fehlerbeschreibung. Was heisst bei dir 'dort wird CTC
"erkannt"' oder 'der Simulator erkennt den Modus "normal"'?
Die Simulation funktioniert definitiv für alle vier Modi korrekt. Ich
bekomme langsam das Gefühl, das du das, was du in der Simulation siehst,
nicht richtig deuten kannst oder die Funktionsweise von CTC und PWM
nicht vollständig verstanden hast.
MfG Spess
Wenn ich sage "wird erkannt", bedeutet das, daß der Simulator die
entsprechende Anzeige für den Timer-Modus anzeigt (rechts in Fenster).
Ich habe keinerlei Probleme beim Verständnis von CTC und PWM.
Sobald ich daheim bin, werd ich einen Screenshot vom Problem machen,
dann wird's vielleicht klarer... eventuell reden wir aneinander vorbei.
Ich bin in Assembler jetzt nicht ganz so fit, aber ich denke der Fehler
liegt in der folgenden Anweisung.
Eingehirner schrieb:> ; PWM an OC2/PD7 initialisieren als Takt für LCD> sbi DDRD, 7 ; PD7 = OC2 wird als Output konfiguriert, damit er> ; als PWM-Ausgang dienen kann
Ich vermute mal du setzt hier nur die Pins PD0, PD1, PD2 als Augang für
PD7 müsstest du 128 schreiben.
Gruß
AVR-Frickler
Stimmt -- das könnte der Hauptfehler gewesen sein, es tut ja jetzt...
ich hab gestern den gesamten PORTD als Ausgang konfiguriert... oh mann,
wie blöd.
Eingehirner schrieb:> Stimmt -- das könnte der Hauptfehler gewesen sein,>...>
Stimmt nicht.
SBI A,b setzt wirklich nur das Bit das mit b im Bereich 0 bis 7 liegt.
SBR Rd,K setzt je nach dem was in der Konstante K (0-255) angebeben ist.
Bernd_Stein
OK, um mal etwas Klarheit zu schaffen (hoffentlich!), hab ich vier
Bilder angehängt.
Zunächst mal: der ATmega8535 ist ausgewählt (AVRSimulator_Options.png).
So wie in CTC_Mode.png sieht es aus, wenn ich das Programm grade
gestartet hab und eine Anweisung nach dem TCCR2-Setzen bin. Man beachte,
dass zwar rechts oben "normal" angezeigt wird, die Bits jedoch das
Bitmuster für CTC anzeigen (WGM21=1, WGM20=0).
Auswahl.png zeigt, daß man zur Laufzeit die Bits für den Timer-Modus
ändern kann. Die Änderung wird direkt unten in TCCR2 sichtbar.
Dies ist in vonHand_auf_CTC.png zu sehen. Hier habe ich nun CTC
ausgewählt, das Bitmuster entspricht einer FastPWM (WGM21=1,WGM20=1).
Spess, fällt dir irgendwas ein, was sonst noch bei mir anders sein
könnte als bei dir?
Übrigens, mal der vollständige Code bis zu diesem Punkt:
1
.include "m8535def.inc"
2
3
.def lcd_command=r16
4
.def lcd_data=r17
5
.def tmp1=r18
6
.def tmp2=r19
7
.def counter=r20
8
.def lcd_page=r21
9
10
.equ FREQ=7372800
11
.equ TIME50MUS=123
12
.equ LCD_COMMAND_PORTC=0b00001110
13
.equ LCD_DATA_PORTC=0b00001111
14
.equ A0=0
15
.equ CS2=1
16
.equ CS1=2
17
.equ READ=3
18
.equ WRITE=4
19
; Steuer-Pins:
20
; PC0: A0 (0: Command, 1: Data)
21
; PC1: CS2 (0: right display active)
22
; PC2: CS1 (0: left display active)
23
; PC3: /RD (0: read display data/status)
24
; PC4: /WR (0: write display data/command)
25
.equ LCD_ON_PORTA=0b10101111
26
.equ LCD_OFF_PORTA=0b10101110
27
.equ LCD_STARTLINE_PORTA=0b1100000 ; use with "OR line#" (0..31)
28
.equ LCD_SETPAGE_PORTA=0b0111000 ; use with "OR page#" (0..3)
29
.equ LCD_SETCOLUMN_PORTA=0b00000000 ; use with "OR column#" (0..79)
30
.equ LCD_SELECTADC_PORTA=0b10100000 ; use with "OR ccw_output" (0/1)
31
.equ LCD_READMODIFYWRITE_PORTA=0b1110000 ; for updating small parts of LCD
32
.equ LCD_END_PORTA=0b11101110 ; end the read-modify-write mode
33
.equ LCD_RESET_PORTA=0b11100010 ; reset display; usually unused, kept on VCC
34
; PA0..7: DB7..0, lcd_data byte for writing/lcd_command
35
;===============================
36
; Stackpointer initialisieren
37
ldi tmp1, HIGH(RAMEND)
38
out SPH, tmp1
39
ldi tmp1, LOW(RAMEND)
40
out SPL, tmp1
41
42
; einfach mal zur Sicherheit 1s warten...
43
;rcall wait1s
44
45
; PORTA/PORTC sind Ausgänge für LCD
46
ldi tmp1, 0xFF
47
out DDRA, tmp1
48
out DDRC, tmp1
49
50
; CTC mode (WGM-Bits=10), toggle on each match (COM-Bits=01), interner Takt mit 1024-Prescaling (CS-Bits=111)
51
ldi tmp2, 0 ; Intervall für CTC
52
out OCR2, tmp2
53
ldi tmp1, 1 << WGM21 | 0 << WGM20 | 1 << COM20
54
out TCCR2, tmp1
55
56
; PWM an OC2/PD7 initialisieren als Takt für LCD (CL-Pin des LCD12232)
57
; Diodenblinker/leuchter an PD6
58
ldi tmp1, 0xFF
59
out DDRD, tmp1 ; PORTD wird als Output konfiguriert, damit PD7 als PWM-Ausgang dienen kann (PD7 = OC2)
Hi
>Spess, fällt dir irgendwas ein, was sonst noch bei mir anders sein>könnte als bei dir?
An dieser Stelle gibt es wirklich einen Bug. Ist mir bis jetzt nicht
aufgefallen, da ich diese Darstellung nicht benutze. Mir reicht die
Registeranzeige.
Der Bug betrifft aber nur diese Anzeige. Der Timer wird entsprechend den
gesetzten WGM-Bits korrekt simuliert.
MfG Spess
OK, danke... dann bin ich noch nicht völlig verblödet... hab mich nur
irritieren lassen. Komisch, daß so ein Bug nicht sofort behoben wird,
das sollte ja wirklich nicht schwer sein :/
Jedenfalls vielen Dank für die Hilfe, die CTC-Takterzeugung funktioniert
jetzt einwandfrei und das Display akzeptiert sie mit einem 5cm-Kabel als
Takt!
Hi
> Komisch, daß so ein Bug nicht sofort behoben wird,>das sollte ja wirklich nicht schwer sein :/
Interessiert wahrscheinlich niemanden mehr. Dieses Simulatormodul wird
nur bei älteren, teilweise schon obsoleten, AVRs benötigt.
MfG Spess