Hallo zusammen, Phasen und Frequenz korrekte Pulsweitenmodulation. Was ist mit Phasenkorrekt gemeint ? Was wäre denn Phasenunkorrekt ? :-) Welche Phase überhaupt ? ======================================================================== === Was ist mit Frequenzkorrekt gemeint ? Welche Frequenz ist überhaupt gemeint ? Oder ist damit eher Systemtaktsynchron gemeint ? Bernd_Stein
Bernd Stein schrieb: > Hallo zusammen, Hallo alleine... > > Phasen und Frequenz korrekte Pulsweitenmodulation. > > Was ist mit Phasenkorrekt gemeint ? Dass die Mitte des Impulses immer dieselbe Stelle der Zeitachse trifft. der Impuls wird also vorn und hinten verändert. Siehe grafische Darstellung im Datenblatt. > > Was wäre denn Phasenunkorrekt ? :-) Wenn man nur das Ende des Impulses moduliert. Also Highspeed-PWM. > > Welche Phase überhaupt ? Die Phase der erzeugten Frequenz. > > ======================================================================== === > > Was ist mit Frequenzkorrekt gemeint ? Dass sich die Frequenz beim Verändern des Tastgrades nicht verändert. > > Welche Frequenz ist überhaupt gemeint ? Die Frequenz der erzeugten PWM. > > Oder ist damit eher Systemtaktsynchron gemeint ? Eher nicht. > > > Bernd_Stein Sieh den Unterschied erstmal so: High-Speed-PWM: Timer zählt hoch, PWM-Pin wird bei erreichen des Compare-Wertes ausgeschaltet und beim Timerüberlauf eingeschaltet (kann man auch umkehren). Es wird also das Impulsende moduliert. Phase-correct-PWM: Timer zählt hoch und wieder runter, ist der Zählerstand unter dem Compare-Wert, dann ist der PWM-Pin ein. Ist er drüber, dann ist er aus. Ein/Aus kann man natürlich auch umkehren. Es wird also Impulsanfang und Impulsende moduliert. ...
Hannes Lux schrieb: ... > > Sieh den Unterschied erstmal so: > > High-Speed-PWM: > Timer zählt hoch, PWM-Pin wird bei erreichen des Compare-Wertes > ausgeschaltet und beim Timerüberlauf eingeschaltet (kann man auch > umkehren). Es wird also das Impulsende moduliert. > > Phase-correct-PWM: > Timer zählt hoch und wieder runter, ist der Zählerstand unter dem > Compare-Wert, dann ist der PWM-Pin ein. Ist er drüber, dann ist er aus. > Ein/Aus kann man natürlich auch umkehren. Es wird also Impulsanfang und > Impulsende moduliert. > Danke für die komplette Beantwortung aller meiner Fragen, das alles muß ich erstmal verdauen. Bernd_Stein
Hi
>das alles muß ich erstmal verdauen.
In den Datenblätter findest du für jeden Timer einen Punkt 'Modes of
Operation'. Da gibt es Beschreibungen und Diagramme zu den PWM-Modes.
MfG Spess
So einfach wie Hannes es erklaert hat steht es aber nicht im Datenblatt. Ich erinnere mich noch daran wie lange ich das Datenblatt hoch und runtergescrollt habe bis ich das kapiert hatte was Hannes kurz und buendig erklaert hat. Wenn man lange genug und tief genug mit PWM vertraut ist, liest sich das Datenblatt einfach. Aber wenn man gerade damit auf Tuchfuehlung gehen will sieht das schon alles sehr verwirrend aus. Da hilft es viel Leute wie Hannes zu haben der es in ein paar Worten in der Muttersprache daherbringt. Ju
Juergen G. schrieb: > So einfach wie Hannes es erklaert hat steht es aber nicht im Datenblatt. > > Ich erinnere mich noch daran wie lange ich das Datenblatt hoch und > runtergescrollt habe bis ich das kapiert hatte was Hannes kurz und > buendig erklaert hat. > > Wenn man lange genug und tief genug mit PWM vertraut ist, liest sich das > Datenblatt einfach. Aber wenn man gerade damit auf Tuchfuehlung gehen > will sieht das schon alles sehr verwirrend aus. > Da hilft es viel Leute wie Hannes zu haben der es in ein paar Worten in > der Muttersprache daherbringt. > > Ju > em kann ich nur voll und ganz zustimmen. Bernd_Stein
Moin, mein erstes PWM-Register das ich gesehen habe stammt von einem TMS320F28335. Das hat wirklich ein paar Tage gedauert bis ich da durchgestiegen bin. Bis heute habe ich keine Ahnung wozu das Trip-Zone Register dient. :) Viel Spaß beim durcharbeiten der Doku! Viele Grüße Maik
Hi Die Erklärung von Hannes ist aber nur die halbe Miete. Du hattest nach dem Unterschied zwischen 'Phase Correct' und 'Phase & Frequency correct' gefragt. 'Phase correct' bedeutet, das die Umschaltzeitpunkte (H-L/L-H) im gleichen Abstand vor und hinter 0 bzw. Top des Timers liegen. Beide Modi unterscheiden sich in dem Zeitpunkt, in dem der OC-Wert und der Top-Wert vom Timer übernommen werden. Bei 'Phase correct' ist das beim erreichen des Top-Wertes. Da der Timer nach erreichen des Topwertes abwärts zählt, schaltet das PWM-Signal bei erreichen des OC-Wertes ein. Der Timer zählt dann bis Null und ab dann wieder aufwärts. Wenn der OC-Wert erreicht ist, geht das PWM-Signal wieder auf L. Bei 'Phase and Frequency correct' erfolgt die Übernahme von OC- und Top-Wert wenn der Zähler Null erreicht. Der Timer schaltet, aufwärts zählend, bei erreichen des OC-Wertes den Ausgang au L, zählt weiter bis zum Top-Wert und setzt, abwärts zählend, beim OC-Wert den Ausgang auf H. Da die L-Phase des PWM-Signals symmetrisch um den Top-Wert, der die PWM-Frequenz bestimmt, liegt kommt hier noch 'frequency correct' dazu. MfG Spess
spess53 schrieb: > Hi > > Die Erklärung von Hannes ist aber nur die halbe Miete. Du hattest nach > dem Unterschied zwischen 'Phase Correct' und 'Phase & Frequency correct' > gefragt. > ... Finde ich nicht, er hat schon beides beantwortet. > > Bei 'Phase and Frequency correct' erfolgt die Übernahme von OC- und > Top-Wert wenn der Zähler Null erreicht. Der Timer schaltet, aufwärts > zählend, bei erreichen des OC-Wertes den Ausgang au L, zählt weiter bis > zum Top-Wert und setzt, abwärts zählend, beim OC-Wert den Ausgang auf H. > Da die L-Phase des PWM-Signals symmetrisch um den Top-Wert, der die > PWM-Frequenz bestimmt, liegt kommt hier noch 'frequency correct' dazu. > Irgendwie seid ihr beide da unterschiedlicher Meinung. > > Was ist mit Frequenzkorrekt gemeint ? Hannes Lux schrieb: Dass sich die Frequenz beim Verändern des Tastgrades nicht verändert. Bernd_Stein
Bernd Stein schrieb: > spess53 schrieb: >> Hi >> >> Die Erklärung von Hannes ist aber nur die halbe Miete. Du hattest nach >> dem Unterschied zwischen 'Phase Correct' und 'Phase & Frequency correct' >> gefragt. >> > ... > Finde ich nicht, er hat schon beides beantwortet. Neenee, da hat Spess schon recht. >> >> Bei 'Phase and Frequency correct' erfolgt die Übernahme von OC- und >> Top-Wert wenn der Zähler Null erreicht. Der Timer schaltet, aufwärts >> zählend, bei erreichen des OC-Wertes den Ausgang au L, zählt weiter bis >> zum Top-Wert und setzt, abwärts zählend, beim OC-Wert den Ausgang auf H. >> Da die L-Phase des PWM-Signals symmetrisch um den Top-Wert, der die >> PWM-Frequenz bestimmt, liegt kommt hier noch 'frequency correct' dazu. >> > Irgendwie seid ihr beide da unterschiedlicher Meinung. Eigentlich nicht, denn soooo intensiv habe ich mich mit den verschiedenen PWM-Modi des 16-Bit-Timers nicht auseinandergesetzt, denn ich habe sie noch nicht gebraucht. Vom 16-Bit-Timer brauche ich bisher meist nur die beiden Compare-Einheiten (zum Generieren von Interrupts), und auch mal die ICP-Einheit zum Messen von Impulsbreiten, Impulsabständen oder Frequenzen. Zur Erzeugung von Hardware-PWM hat mir bisher immer ein 8-Bit-Timer gereicht, so konnte ich den 16-Bit-Timer für Interrupts nutzen. >> >> Was ist mit Frequenzkorrekt gemeint ? > Hannes Lux schrieb: > Dass sich die Frequenz beim Verändern des Tastgrades nicht verändert. Das war eine sehr grobe Feststellung, die von Spess präzisiert wurde. Ich gab Dir immer ganz bewusst Tipps, die Dich auf die Grundfunktionen lenken sollten. Die "Erbsenzählerei" (Erkundung der Zusatz-Features) fällt dann leichter, wenn man die Grundfunktionen verstanden hat. > > Bernd_Stein Maik K. schrieb: > mein erstes PWM-Register das ich gesehen habe stammt von einem > TMS320F28335. > Das hat wirklich ein paar Tage gedauert bis ich da durchgestiegen bin. Meine erste (Mikrocontroller-) PWM war auf dem Tiny12 in Software und alles Andere als befriedigend: http://www.hanneslux.de/avr/mobau/fr_t12/Fahrst3.html Hat aber etwas beim Verstehen der PWM-Einheiten der AVRs (andere Controller nutze ich nicht) geholfen. ...
Hi >Hier ist dies mal gut erklärt : >Youtube-Video "0x16 Timer - Fast und Phase-Correct PWM - Erzeugung, >Parameter, Unterschiede" Und wo ist da der Unterschied zwischen Phase-Correct PWM und Phase&Freuency-Correct PWM . Mal ehrlich. In >7 Jahren hättest du dir das bischen Englisch, das zum Verständnis der AVR-Datenblätter notwendig ist, problemlos selbst aneignen können. Was hast du eigntlich in dieser Zeit gemacht? Immer noch veraltete 'Lehrbücher' aus den 90ern durch gearbeitet? MfG Spess
Hier geht es um den Timer / Counter0 des ATmega88PA. Was will mir die gekennzeichnete Verbindung mitteilen ? Bernd_Stein
Hi
>Was will mir die gekennzeichnete Verbindung mitteilen ?
Das ist das Signal für die PWM-Modes die OCR0A für den Top-Wert
benutzen.
MfG Spess
spess53 schrieb: > Hi > >>Was will mir die gekennzeichnete Verbindung mitteilen ? > > Das ist das Signal für die PWM-Modes die OCR0A für den Top-Wert > benutzen. > > MfG Spess > Und wo liegt nun genau der Unterschied zu diesem Pfad ? Bernd_Stein
Hi
>Und wo liegt nun genau der Unterschied zu diesem Pfad ?
Ich muss mich korrigieren: Der Pfad im ersten Bild dürfte dürfte nur bei
CTC zum Einsatz kommen. Allerdings kann man ohne Kenntnis der genauen
Signale für die Umschalter nur vermuten.
Wozu willst du das eigentlich wissen?
MfG Spess
spess53 schrieb: > Ich muss mich korrigieren: Der Pfad im ersten Bild dürfte dürfte nur bei > CTC zum Einsatz kommen. >... > Wozu willst du das eigentlich wissen? > Nun ja, man arbeitet sich in etwas ein, sieht ein Blockschaltplan und versucht diesen zu verstehen. Habe da nämlich immer noch ein Problem mit dem TC0 Fast PWM Mode 7. Dies mal jedoch mit dem ATmega88PA. Werde dies jedoch erst schildern, wenn ich mehr Zeit dazu habe und Interesse besteht. Bernd_Stein
Hallo zusammen, es ist zwar der Phase Correct PWM-Mode - aber ist ja ähnlich. Wer kann hier schreiben, warum das PWM-Signal diese Aussetzer hat? Ich find den Fehler einfach nicht. Man muss schon auf mindestens 2ms bei der Sec/DIV Einstellung am Oszilloskop gehen, um den Fehler zu entdecken. Im Anhang ist ein ATMEL STUDIO 7 Assemblerprojekt. Bernd_Stein
:
Bearbeitet durch User
Bearbeiten ging nicht mehr deshalb ... Das ist ein einfaches Programm, also keine Angst wegen der 38KB.
1 | ; |
2 | .include "Header.inc" ;Label und Werte Zuweisungen |
3 | .include "Hardware.inc" ;Hardware Label Zuweisungen |
4 | ; |
5 | ;Programmstart nach RESET ( Interrupt Vektoren Tabelle ) |
6 | ; |
7 | .CSEG ;Was ab hier folgt kommt in den FLASH-Speicher |
8 | .ORG $0000 ;Programm beginnt an der FLASH-Adresse 0x0000.. |
9 | rjmp _reset ;..mit der RESET-Vectortabelle |
10 | |
11 | .include "IRQm88PA.inc" ;Restliche Interrupt Vektortabelle |
12 | |
13 | .ORG INT_VECTORS_SIZE ;Programmadresse nach den ganzen IRQ-Vektoren |
14 | ; |
15 | ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII |
16 | ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII |
17 | ;I Erstinitialisierungen |
18 | ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII |
19 | ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII |
20 | ; |
21 | ;Stapelzeiger initialisieren (fuer Unterprogramme und / oder Interrupts) |
22 | ; |
23 | _reset: |
24 | ldi a,High(RAMEND) ;RAMEND, also das Ende vom SRAM, ist in der.. |
25 | out SPH,a ;..Definitions-datei festgelegt |
26 | ldi a,Low (RAMEND) |
27 | out SPL,a |
28 | ; |
29 | ;Timer/Counter2: Phase Correct PWM-Mode ( 5 ) initialisieren, NON-INVERT, |
30 | ;ohne Vorteiler. Clear OC2B on Compare Match upcounting, set OC2B on Compare |
31 | ;Match downcounting. OC2B ist der PWM-Pin, da OCR2A ja den TOP-Wert enthält |
32 | ;Pin17/PB3 ( OC2A ) ist als normaler I/O-Pin konfiguriert. TOV2-Flag bei BOTTOM. |
33 | ; |
34 | ldi a,#pcpwm_freq ;5,5kHz an OC2B einstellen,.. |
35 | sts OCR2A,a ;.. |
36 | sts OCR2B,null ;Erstmal keine PWM sondern Low-Pegel |
37 | |
38 | ldi a,3 ;------------------------------------------------------------- |
39 | sts OCR2B,a ;-------------------------------------------------------------- |
40 | |
41 | ldi a,NINV2B ;Phase Correct PWM-Mode 5, Non Inverting.. |
42 | sts TCCR2A,a ;..Upcouting clear OC0B on Compare Match, Down-.. |
43 | ldi a,1<<CS20|1<<WGM22 ;...counting set OC0B on Compare Match, ohne Vor-.. |
44 | sts TCCR2B,a ;..teiler, Timer/Counter0 starten und.. |
45 | sbi PWM2B_DDR,pwm2b.oc2b ;..PWM-Portpin5/PD3 ( OC2B ) freigeben |
46 | |
47 | rjmp PC ;Endlosschleife ( PC = Program Counter ) |
Bernd_Stein
:
Bearbeitet durch User
Sieht softwareseitig okay aus, und ja, läuft folglich bei mir ohne Aussetzer. Bleibt also nur, die Hardware zu kontrollieren. Und übrigens steht da doch in ROT: "für neue Fragen einen neuen Beitrag erstellen".
S. Landolt schrieb: > Sieht softwareseitig okay aus, und ja, läuft folglich bei mir ohne > Aussetzer. Bleibt also nur, die Hardware zu kontrollieren. > Danke. Damit hast du mir sehr weiter geholfen. Hab gerade nur den Ausgang über einen Pull-Down von 15k dran, sieht aber bei mir immer noch so aus. Da muss wohl der µC defekt sein. Wie schaffe das nur immer? Poste die Tage mal ein Foto vom Aufbau. Bernd_Stein
PS & nur am Rande: Dieses null sieht zwar hübsch aus, hat aber mitnichten diesen Wert.
> Da muss wohl der µC defekt sein.
Also der Controller selbst käme bei mir ganz weit hinten in der Reihe
der Verdächtigen. Und es ließe sich ja sofort durch einen fabrikneuen
abklären.
S. Landolt schrieb: > PS & nur am Rande: > > Dieses null sieht zwar hübsch aus, hat aber mitnichten diesen Wert. > Ja stimmt, wird allerdings sofort überschrieben. Die Formatierung ist hier nicht ganz so wie ich es wollte, dann würde es besser ins Auge fallen. Bei mir ist nach 80 Zeichen schluss. Das Programm ist auf das wensentliche reduziert, um den Fehler finden zu können, da schleichen sich halt Sachen ein, die ich übersehen habe heraus zu nehmen. S. Landolt schrieb: > Also der Controller selbst käme bei mir ganz weit hinten in der Reihe > der Verdächtigen. Und es ließe sich ja sofort durch einen fabrikneuen > abklären. > Bei mir auch, mein µC Verschleiss ist zur Zeit wirklich ein Problem. Beitrag "ATmega16 irgendwie über JTAG abgeschossen" Bernd_Stein
Wieder mal unglaublich. Habe immer noch den Fehler mit einem nagelneuen µC. Wo der Widerstand ist und die rote Klemme, da messe ich den OC2B mit meinem DSO. Die Lila Verbindung ( EN ) zur anderen Schaltung ( L298N ) ist extra abgezogen. Hast du die Time-Base am Oszi richtig eingestellt? Vielleicht ist es bei dir ja erst bei 4ms, 8ms oder noch höher sichtbar. Hast du den gleichen µC ( ...88PA )? Werde den Aufbau so ändern das alles unnötige wegkommt. Am besten den µC in andere Löcher stecken, dann hab ich zwei Fliegen mit einer Klappe erschlagen. Ohne Erfolg :-( Bernd_Stein
:
Bearbeitet durch User
Ich habe nur einen ATmega88; irgendwo noch einen ATmega48PA, den müsste
ich aber erst suchen. Und kann mir beim besten Willen nicht vorstellen,
dass das ein Fehler der PA-Version sein soll, da hätten sich sicher
schon andere gemeldet.
> Werde den Aufbau so ändern das alles unnötige wegkommt.
Das ist sinnvoll. Anschließend bei der Messung mit dem Oszilloskop auch
noch die Betriebsspannung direkt am uC anschauen.
S. Landolt schrieb: > Das ist sinnvoll. Anschließend bei der Messung mit dem Oszilloskop auch > noch die Betriebsspannung direkt am uC anschauen. > Das Letzte was ich jetzt noch machen werde, aber für nicht Erfolgsversprechend halte ist, den µC gesockelt auf eine Lochstreifenrasterplatine zu löten. Also die Schaltung im Bild mit dem "alten" µC. Ich hatte damals die Breadboards verflucht, da ich damit stundenlang Fehler gesucht hatte, die auf mangelde Kontaktierung beruhten. Und dies ist so ein billig China Board. Für kleiner Schaltungen nehme ich BPS BB400 Boards ( BusBoardPrototypeSystems ), die allerdings auch in China fertigen lassen. Bernd_Stein
Also gut, ich grabe mal meinen ATmega48PA aus. Sie könnten derweil das .lst-File hier einstellen.
PS: GND auf Pin 20 anschließen wäre auch nicht schlecht.
Also, auch der ATmega48PA-PU (von 1024) verhält sich so wie er soll. Weiter kann ich nicht mehr helfen.
Bernd S. schrieb: > Also die Schaltung im Bild mit dem > "alten" µC. Was soll die Zenerdiode in der Versorgungsleitung? Da schlägt der BOR zu, würd ich mal raten. Auf welchen Level haste den den gestellt?
Ich dachte, das sei eine normale Schottky-Diode - und BOD ist doch gar nicht eingeschaltet?
Mal ein ganz blöde Frage. Ist die Abtastrate deines Oszis groß genug. Die sollte mindestens so groß sein, dass auch die schmalsten Pulse mindestens zweimal abgetastet werden. Es zählt nicht die maximale Abtastrate sondern die für den gewählten Zeitbereich der Anzeige. Mindestpulsbreite? Abtastrate des Oszilloskops in der gewählten Einstellung der Zeitbasis?
:
Bearbeitet durch User
S. Landolt schrieb: > Ich dachte, das sei eine normale Schottky-Diode - Schottky oder nicht, was macht die da? > und BOD ist doch gar > nicht eingeschaltet? Na dann.....?
S. Landolt schrieb: > PS: > GND auf Pin 20 anschließen wäre auch nicht schlecht. > Hast du das auch gemacht? Werde dann mal AVCC auch auf GND setzen. Interessant, das die Spannung dadurch herunter geht ( Siehe Screen Shot ). Die Frequenzangabe könnte wegen des falsch bzw. vorher eingestellten Triggerpegel falsch dargestellt sein. Warum bei der Spannungsversorgung ( Gelb ) eine Frequenz gemessen wird, kann ich nicht sagen. Danach habe ich AVCC & Aref jeweils über einen 100nF gegen GND geschaltet, aber das brachte auch nichts. Ist Reichelt-Ware, weiß jetzt nicht ob ich dort wieder bestellen soll? Die gesockelte und gelötete Variante bringt auch nichts, ( siehe Screen Shot ) @Helmut S. Das vermute ich langsam auch, weiß aber nicht wie ich so etwas einstellen soll. Habe das VOLTCRAFT DSO-1062D in der 200Mhz Variante ;-). Ach, hoffe mal die lss-Datei hoch geladen zu haben. Wie ich sehe, funktioniete das schon ohne die Datei zu zippen. Bernd_Stein
:
Bearbeitet durch User
Bernd S. schrieb: > Ach, hoffe mal die lss-Datei hoch geladen zu haben. Hast du. Und damit ist erstmal klar, was passiert. Es fehlt eine Endlosschleife nach der Initialisierung. Wenn das ein frischer AVR ist, wird das unweigerlich dazu führen, dass in regelmäßigen Abständen die Initialisierung erneut erfolgen wird. Wenn schon irgendwelcher alter Kram hinter dem Nutzcode im Flash steht, kann alles mögliche passieren. Übrigens: der Erwartungswert für das Programm wäre, dass überhaupt nix auf dem Oszi zu sehen ist. Im Gegensatz zu fast PWM gibt es bei phase-correct PWM nämlich keine Nadelimpulse bei einem der beiden Extremwerte, sondern stabil Low oder High, je nach gewählter Polarität der Ausgabe. Siehst du also nach Hinzufügen der Endlosschleife immer noch irgendwas, wäre die nächste Frage: hast du den Pin belastet? An einem unbelasteten Pin wirst du immer Spikes mit der Taktfrequenz sehen. Die könnte dein viel zu langsames Oszi dank der Alias-Effekte zu beliebigen hübschen Mustern aufbereiten.
c-hater schrieb: > Es fehlt eine Endlosschleife > nach der Initialisierung. > Freue mich von dir mal wieder ein konstruktives Posting zu erhalten. Die lss-Datei ist sehr aufschlussreich, nur verstehe ich nicht warum sie den letzten Befehl nicht anzeigt? Siehe hier am Ende : Beitrag "ATmega88PA: Phase Correct PWM" Werde jetzt mal die .EXIT Direktive hinzufügen. Habe ich gerade getan. Die lss-Datei ist nun vollständig, aber dass DSO zeigt immer noch diesen Mist an. Ist das alles seltsam, habe die Direktive per Semikolon wieder rausgenommen, aber die lss-Datei ist immer noch OK. So, jetzt würde ich gerne die Firmware aus dem µC holen und disamblieren, um zu sehen was da wirklich heruntergeladen wurde. Das AS7 dissambliert nur Dateien, deren Quellcode auch im Projekt ist, deshalb wäre ein Tipp für ein unabhängigen Disassembler für Win10 Pro gut. Bernd_Stein
:
Bearbeitet durch User
Bernd S. schrieb: > deshalb wäre ein Tipp für ein unabhängigen Disassembler für Win10 Pro > gut. ReAVR funktioniert auch unter Windows10.
c-hater schrieb: > ReAVR funktioniert auch unter Windows10. > Meinst du dies : https://www.johannes-bauer.com/mcus/avrdisas/ Bei mir blitz nur kurz ein Fenster auf. Ich habe zudem Win10 64-Pro Das hatte schon mal mit einem Disassemblerprogramm, war evtl. sogar das gleiche. Bernd_Stein
Bernd S. schrieb: > Meinst du dies : > > https://www.johannes-bauer.com/mcus/avrdisas/ Nein. Lustigerweise heisst auch der Verfasser von ReAVR Johannes. Allerdings mit Nachnamen "Assenbaum". Keine Ahnung, ob hier hier irgendwelche Namensverwirrung betrieben wurde oder nur Google diese betreibt. Ich hänge mal einen Screenshot des "About"-Fensters des Tools an, was ich hier habe.
c-hater schrieb: > Ich hänge mal einen Screenshot des "About"-Fensters des Tools an, was > ich hier habe. > Danke. Ich habe jetzt die 3.5.0 Version und es wurde wirklich die Endlosschleife mittels rjmp PC herunter geladen. Was ein Scheiss.
1 | ;----------------------* |
2 | ; pc=0x1A(0x34) |
3 | ; |
4 | _reset: |
5 | ; L001A: |
6 | ldi r16,k04 |
7 | out p3E,r16 |
8 | ldi r16,kFF |
9 | out p3D,r16 |
10 | ldi r16,k5C |
11 | sts D00B3,r16 |
12 | sts D00B4,r2 |
13 | ldi r16,k03 |
14 | sts D00B4,r16 |
15 | ldi r16,k21 |
16 | sts D00B0,r16 |
17 | ldi r16,k09 |
18 | sts D00B1,r16 |
19 | sbi p0A,b3 |
20 | L002D: |
21 | rjmp L002D |
22 | ; ----------- jump on last line |
23 | ; pc=0x2E(0x5C) |
24 | ; |
25 | .dw 0xFFFF ; pc=0x002E(0x005C) |
26 | .dw 0xFFFF ; pc=0x002F(0x005E) |
Bernd_Stein
> Es fehlt eine Endlosschleife
Wo, zum Teufel, ist im .lss-File die Zeile
1 | rjmp PC ;Endlosschleife ( PC = Program Counter ) |
geblieben?
S. Landolt schrieb: >> Es fehlt eine Endlosschleife > > Wo, zum Teufel, ist im .lss-File die Zeile rjmp PC ;Endlosschleife ( PC > = Program Counter ) > geblieben? > Wir sind schon etwas weiter ;-) Nee ist echt verhext bei mir hab noch einen ATmega168PA gefunden und was soll ich schreiben ... Weiß echt nicht mehr weiter und weil es bei dir klappt muss ja etwas mit meinem DSO nicht stimmen .., aber halt da war doch vor kurzem das hier und da sieht man das selbe Verhalten, aber ein wirkliches sinken der Kondensatorspannung, also muss dass DSO funktionieren. Versuche nachher mal ein paar ATmega88PA über iBäh zu beziehen. Beitrag "AVR8ASM-Projekte : PID-Reglung" Bernd_Stein
:
Bearbeitet durch User
Ich bin der Meinung, dass es mit diesem fehlenden 'rjmp pc' zusammenhängt, denn das Fehlerbild passt perfekt, wie c-hater ja bereits erklärt hat. Weitere Controller einsetzen oder am Oszilloskop herumdrehen wird nicht helfen.
Bernd S. schrieb: > Weiß echt nicht mehr weiter und weil es bei dir klappt muss ja etwas mit > meinem DSO nicht stimmen Nein, mit dem DSO ist alles in Ordnung. Dir fehlt nur die Kompetenz, es sinnvoll zu benutzen bzw. dessen Ergebnisse sinnvoll zu interpretieren. So hast du z.B. auf folgende Frage nicht geantwortet: > Siehst du also nach Hinzufügen der Endlosschleife immer noch irgendwas, > wäre die nächste Frage: hast du den Pin belastet?
Vorschlag: Statt des 'rjmp pc' einen gleichmäßigen Takt auf einem Pin ausgeben und per Oszilloskop kontrollieren:
1 | ; SLdt 191026 |
2 | ; fuer Bernd Stein: Aussetzer-Problem |
3 | |
4 | ; Kontroll-Pin mit gleichmaessigem Takt: D1 |
5 | |
6 | .include "m88PAdef.inc" |
7 | |
8 | .def tmp0 = r16 |
9 | |
10 | ;---------------------- |
11 | .macro put |
12 | .if @0 < $60 |
13 | out @0,@1 |
14 | .else |
15 | sts @0,@1 |
16 | .endif |
17 | .endmacro |
18 | ;---------------------- |
19 | .macro puti |
20 | ldi tmp0,@1 |
21 | put @0,tmp0 |
22 | .endmacro |
23 | ;---------------------- |
24 | |
25 | puti OCR2A,$5C ; original (was auch immer) |
26 | puti OCR2B,10 |
27 | puti TCCR2A,$21 ; original (was auch immer) |
28 | puti TCCR2B,$09 ; original (was auch immer) |
29 | sbi DDRD,3 ; OC2B |
30 | sbi DDRD,1 ; Kontrollpin |
31 | |
32 | loop: |
33 | sbi PIND,1 ; Kontrollpin |
34 | rcall wait7 |
35 | rcall wait7 |
36 | rcall wait7 |
37 | rcall wait7 |
38 | rjmp loop |
39 | |
40 | wait7: |
41 | ret |
Also bei mir läuft es auch. Der Aufbau sollte identisch sein, bis auf die Bat, wobei ich das auch versucht hatte und keine Änderung brachte. Fuses sind identisch, die Versorgung warscheinlich auch, 3.3V ?! In der Zip ist der Debugordner nicht das es an irgend welchen Compiler Einstellungen liegt. Kannst die Hex ja mal ausprobieren.
c-hater schrieb: > Nein, mit dem DSO ist alles in Ordnung. Dir fehlt nur die Kompetenz, es > sinnvoll zu benutzen bzw. dessen Ergebnisse sinnvoll zu interpretieren. > > So hast du z.B. auf folgende Frage nicht geantwortet: > >> Siehst du also nach Hinzufügen der Endlosschleife immer noch irgendwas, >> wäre die nächste Frage: hast du den Pin belastet? >> Geht das mit dir schon wieder los? Naja, vielleicht haben wir uns beim Schreiben ja überlappt Siehe und lese aufmerksam : Beitrag "Re: Was soll das bedeuten Phase and Frequency correct PWM" @S.Landolt: Bei mir sieht das Programm am DSO so aus ( siehe Screen Shot ). Musste SEC/DIV allerdings auf 4ms stellen um die unregelmäßigen Aussetzer besser erkennen zu können. Gelb -> Pin3 ( PD1 ) Cyan -> Pin5 ( PD3 ) mit 15k gegen GND @Holger L.: Kannst du deine Timebase nicht auf 2ms stellen? Kann mit Win10 Pro dieses ZIP-Format nicht entpacken und werde mir auch kein weiteres Programm hierzu downloaden. Holger L. schrieb: > Kannst die Hex ja mal ausprobieren. > Lade doch einfach diese HEX-Datei hoch, dann kann ich sie ja durch den ReAVR disamblieren lassen und der OUTPUT müsste ja so aussehen wie in meinem vorherigen Posting. Bei Unstimmigkeiten müsste ich mich aber erst mit diesem Programm auseinandersetzen, damit es wenigstens einigermaßen Vernüftiges anzeigt, wenn dies überhaupt möglich ist. Bernd_Stein
Es ist einfach nur zum kotzen. Wollte das Ganze dann einfach mal für den Timer0 machen, da passiert seltsamerweise am Pin11 ( PD5 bzw. OC0B ) nichts. Wollte nun mit dem Simulator gucken was da wie passiert. Der Scheiß AS7 Simulator macht alles beim Timer2 und beim Timer0 streikt er. Bernd_Stein
> Wollte das Ganze dann einfach mal für den Timer0 machen ...
Und wie sieht die Port-Freigabe genau aus? Der Kommentar ist ja falsch.
Bernd S. schrieb: > Der Scheiß AS7 Simulator macht alles beim Timer2 und beim Timer0 streikt > er. > Man muss ihn nur mit OUT anstatt STS füttern, dann geht auch alles. Trotzdem auch beim Timer0 hab ich das Problem : Gelb -> OC0B ( Pin11/PD5 ) Cyan -> OC2B ( Pin5 /PD3 ) mit 15k Pulldown Der eine µC der noch nicht mit DebugWire gelaufen ist stammt aus TAIWAN und kommt aus 1620, was wohl bedeutet 16te Woche und Jahr 2000. Hab gerade noch mal beim Landolt nachgeschaut : Wohl eher 2016 & 20igste Woche > >Und wie sieht die Port-Freigabe genau aus? Der Kommentar ist ja falsch. > Stimmt Kommentar ist Falsch. Kommt halt von COPY/PASTE und schusselig sein. Bernd_Stein
:
Bearbeitet durch User
Habe ich das jetzt richtig verstanden - es ist nur dieser eine ATmega88PA betroffen, auf dem ATmega168PA ist alles in Ordnung? "1620" heißt übrigens Kalenderwoche 20 von 2016.
> Man muss ihn nur mit OUT anstatt STS füttern, dann geht auch alles.
Sehen Sie, und genau deshalb hatte ich Ihnen das macro put angeboten.
S. Landolt schrieb: > Habe ich das jetzt richtig verstanden - es ist nur dieser eine > ATmega88PA betroffen, auf dem ATmega168PA ist alles in Ordnung? > > "1620" heißt übrigens Kalenderwoche 20 von 2016. > N E I N. Alle drei machen den Mist ( 2x Mega88 ). Der 168 stammt ebenfalls aus TAIWAN aus 1726. Weil Reichelt mir den Gefallen nicht tut, warte ich auf Rückmeldung von ELPRO.org und werde ggf. dort meine µC her beziehen. Beitrag "Reichelt Wishlist im µC.net" > >Sehen Sie, und genau deshalb hatte ich Ihnen das macro put angeboten. > Ich hab gar nicht gerafft was da bezüglich des MACROS passiert und dann einfach das Programm assembliert und den µC geflashed. Werde mich mal bei Gelegenheit und Lust mit MACROS befassen. Bernd_Stein
:
Bearbeitet durch User
Bernd S. schrieb: > N E I N. > Alle drei machen den Mist ( 2x Mega88 ). > .... Heißt das jetzt, alle Prozessoren sind defekt?
Also im Augenblick bin ich ratlos, tut mir leid.
Hallo Bernd. Stell doch mal dein Oszilloskop auf Spitzenerfassung. Handbuch https://produktinfo.conrad.com/datenblaetter/100000-124999/122485-an-01-de-VOLTCRAFT_DSO_1062D_DIGITAL_OSZILLOSKOP.pdf Datenerfassung Wenn Sie ein Analogsignal erfassen, dann wandelt das Oszilloskop dieses in ein Digitalsignal um.Es gibt zwei Erfassungsarten: Echtzeiterfassung und Äquivalentzeiterfassung. Es gibt drei Arten der Echtzeiterfassung: Normal, Spitzenwert erfassen und Mittelwert. Die Erfassungsrate hängt von der Einstellung der Zeitbasis ab. Normal, Spitzenwert erfassen und Mittelwert. Die Erfassungsrate hängt von der Einstellung der Zeitbasis ab. Normal: Bei dieser Erfassungsart tastet das Oszilloskop das Signal in gleichmäßigen Abständen ab, um die Signalform zu erstellen. Bei dieser Methode werden die Signale meistens sehr präzise dargestellt. Jedoch kann man bei dieser Methode keine schnellen Schwankungen im Analogsignal erfassen, die eventuell zwischen zwei Abtastungen auftreten können, welches zu einem Aliasingfehler und zum Auslassen schmaler Impulse führen kann. In diesen Fällen sollten Sie den Spitzenerfassungsmodus zur Datenerfassung wählen. Spitzenerfassung: Bei dieser Erfassungsart erhält das Oszilloskop die maximalen und minimalen Werte des Eingangssignals jedes Abtastinvervalls und verwendet diese Werte, um die Signalform anzuzeigen. Auf diese Weise kann das Oszilloskop die schmalen Impulse erfassen und anzeigen, die ansonsten im Normalmodus verloren gegangen wären. Allerdings kann es bei dieser Methode zu stärkerem Rauschen kommen.
:
Bearbeitet durch User
Also ich habe jetzt extra einen ATmega168PA (Taiwan, 1703) aus einem Datenschreiber ausgebaut und mit Ihrem Programm getestet: auf meinem alten HM604-Analogoszilloskop sehe ich keine Aussetzer.
S. Landolt schrieb: > Also im Augenblick bin ich ratlos, tut mir leid. > Ohne eure Anmerkungen und Bemühungen hätte ich den Fehler wohl nie gefunden. @Helmut S. Ja, DSO hatte ich dann auch im Verdacht, nachdem es ja bei Landolt funktionierte und die µC aus verschiedenen Jahren kamen. Es hat mit der eingestellten Speichertiefe zu tun die man unter ACQUIRE einstellen kann. Es war auf die kleinste eingestellt ( 4k ) je höher der Wert desto träger reagiert dass DSO auf die Bediendrehknöpfe, deshalb ist es wohl Werksseitig so eingestellt gewesen. Mit 40k ist bei 2ms bis 8ms alles OK, allerdings dann bei der nächsten möglichen Einstellung ab Sec/DIV 20ms kommt es wieder zum Fehlverhalten des DSO, sowie dies ebenfalls ab einer Einstellung von 400ms auch bei 512k passiert, wo die Bedienung schon sehr, sehr träge reagiert. Danke nochmals an Alle, die hier mitgewirkt haben und dies ausnahmslos konstruktiv. Bernd_Stein
Stell halt bei 20ms auf mindestens 120k Speichertiefe. Dann wird es wieder richtig dargestellt.
:
Bearbeitet durch User
Helmut S. schrieb: > Stell halt bei 20ms auf mindestens 120k Speichertiefe. Dann wird es > wieder richtig dargestellt. > Hab ja nur das zur Verfügung was unter Aquire bereitgestellt wird. Übrigens geht es auch mit 4k wenn Aquire -> Peak, wie du geschrieben hast eingestellt wird ( siehe Screen Shot ). Und nun ist Schluss für mich mit diesem Kapitel ;-) Bernd_Stein
Hallo Bernd, danke für die Messungen. Auf das Problem mit den "verschluckten" schmalen Pulsen werden noch viele stoßen. Gruß Helmut
Dieser µC besitzt ja :
1 | -Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode |
2 | -Four 16-bit Timer/Counters with Separate Prescaler, Compare- and Capture Mode |
3 | – Real Time Counter with Separate Oscillator |
4 | – Four 8-bit PWM Channels |
5 | – Six/Twelve PWM Channels with Programmable Resolution from 2 to 16 Bits |
6 | (ATmega1281/2561, ATmega640/1280/2560) |
Die beiden 8-Bit Zeitgeber / Zähler sind T/C 0 & T/C 2. Die vier 16-Bit Zeitgeber / Zähler sind T/C 1, 3, 4 und 5. Der Real Time Counter ist nicht extra, sondern nutzt dann den T/C 2. Vier 8-Bit PWM-Kanäle ergeben sich aus jeweils 2 für jeden 8-Bit T/C. Sechs bzw. zwölf PWM-Kanäle mit Auflösungen von 2 bis 16 Bit. Da muss ich etwas überlegen. OC0A teilt sich mit OC1C den PORT B7. OC0 = 2 PWM-Kanäle, wenn OC1C nicht genutzt wird ( T/C0 ). OC1 = 3 PWM-Kanäle, wenn OC0A nicht genutzt wird ( T/C1 ). OC2 = 2 PWM-Kanäle ( T/C2 ). OC3 = 3 PWM-Kanäle OC4 = 3 PWM-Kanäle OC5 = 3 PWM-Kanäle Also stehen einem maximal zwölf 16-Bit PWM-Kanäle und drei 8-Bit PWM Kanäle, oder elf 16-Bit PWM-Kanäle und vier 8-Bit PWM-Kanäle zur Verfügung. Ok, das war jetzt erst einmal ein grober Überblick. Ich brauch 5 Rechtecksignale mit in etwa gleichen An,- und Auszeiten, wo die Frequenz möglichst einen weiten Bereich abdeckt. Fragen dazu folgen noch. Klar ist erstmal, dass nur die 16-Bit PWM-Kanäle dafür in Frage kommen. Bernd_Stein
:
Bearbeitet durch User
Wenn ich alles richtig verstanden habe, habe ich vier Möglichkeiten ein symetrisches Rechtecksignal zu erzeugen.
1 | 1. Normal Mode 0 |
2 | Hier muss man einen Timer Overflow Interrupt benutzten. |
3 | In der zugehörigen ISR ist immer wieder der Wert im Timer Count Register |
4 | ( TCNTx ) neu zu schreiben, sowie der Portpin zu toggeln. |
5 | |
6 | 2. CTC-Mode 4 "1" Clear Timer on Compare Match. |
7 | Hierbei wird dass Output Compare Register A ( OCRxA ) _einmalig_ |
8 | mit einem Wert geladen. |
9 | Außerdem muss man den Timer x Compare Interrupt A ( TIMERx COMPA ) |
10 | benutzen. |
11 | In der zugehörigen ISR ist noch der Portpin zu toggeln. |
12 | |
13 | 3. CTC-Mode 12 "2" Clear Timer on Compare Match. |
14 | Hierbei wird dass Input Capture Register ( ICRx ) _einmalig_ |
15 | mit einem Wert geladen. |
16 | Außerdem muss man den Timer x Capture Event ( TIMERx CAPT ) |
17 | Interrupt benutzen. |
18 | In der zugehörigen ISR ist noch der Portpin zu toggeln. |
19 | |
20 | 4. CTC-Mode 4 "3" Clear Timer on Compare Match. |
21 | Hierbei wird dass Output Compare Register A ( OCRxA ) _einmalig_ |
22 | mit einem Wert geladen. |
23 | Jetzt wird jedoch im Timer/Couter Control Register A ( TCCRxA ) dass |
24 | Bitpärchen COMxA1 & COMxA0 auf Toggeln gestellt. |
25 | Hinzu ist unbedingt der OCxA-Pin auf Ausgang zu konfigurieren. |
Die Variante 4, halte ich für die beste, da weder ein Interrupt benötigt wird noch ein Portpin getoggelt werden muss. Nachteilig ist unter Umständen, wenn der entprechende OCxA-Pin nicht zur Verfügung steht. Wie seht ihr das ? Bernd_Stein
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.