PWM Ändern

TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

PWM Ändern

 · 
Posted: 18.06.2015 - 08:59  ·  #1
Moin,
In mein Programm habe ich einen PWM Aktiviert
PWMres1 = 10;
PWMpresc1 = 8;
PWMmode1 = slow;

Und dieses kann ich bei Laufzeit nicht mehr ändern.
Ich habe schon im Sim. gesucht, nur finde ich nichts.
Das kann man doch mit
asm;
asm end;
ändern ? oder ?

Wenn jmd Lust und Laune hat würde ich mich über Hilfe freuen.

PS. Habe einen Atmega 32 TQFP
Brauche 10Bit / 8 T < auf > 8Bit / 8T


Gruß Frank
Harald_K
 
Avatar
 
Subject:

Re: PWM Ändern

 · 
Posted: 18.06.2015 - 17:16  ·  #2
Machs doch so:

1. den einen PWM-Mode per defines einstellen, das Programm übersetzen und dann in der IDE auf Datei/Öffnen .. und die <programmname>.asm öffnen.

Dort guckst du unter system.reset was da mit "pwmInit" kommentiert an asm-code steht ...
aufschreiben bzw. ausschneiden und in deinem programm ne procedure pwm_int_mode1 draus machen mit asm; endasm

2. jetzt die defines ändern auf deinen 2tem Wunschmodus, nochmal übersetzen, (die IDE lädt die neu erzeugte asm-Datei automatisch nach), reingucken und den gleichen Codeschnipsel rauskopieren.

gibt dann die procedure pwm_init_mode2 ..

so - schon kannst du zur Laufzeit durch passende Aufrufe der init-prozeduren umschalten.

letztlich wird sich das ganze wohl nur in ein, zwei Bit eines Registers unterscheiden, aber du solltest trotzdem die komplette Sequenz übernehmen.

außerdem ist es sinnvoll, den pwmwert selbst vor dem Verkleinern der Auflösung passend zu stellen, sonst passiert am PWMout was komisches, was evtl. angeschlossene Hardware kosten kann ... beim Hochsetzen der Auflösung ist das unkritisch. Geht darum, daß du z.B Werte über 255 bei ner 8Bit-Auflösung nicht mehr erreichst und dann der out nicht mehr schaltet - je nachdem was du schaltest brennt dann vielleicht was ab.
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: PWM Ändern

 · 
Posted: 18.06.2015 - 17:55  ·  #3
Hallo Halard, super danke dir, das ist genau das was ich gesucht habe.
Und es ist klar wenn ich umschalte werde ich mir am besten ein Boolean
setzen und den PWM max wert auch dazu.

Danke... :3some:


Code

                        ; >> PWMport1 Init <<
                        SBI       DDRD, 5
                        CLR       _ACCA
                        OUT       tcnt1h, _ACCA
                        OUT       tcnt1l, _ACCA
                        OUT       ocr1ah, _ACCA
                        OUT       ocr1al, _ACCA
                        LDI       _ACCA, 083h
                        OUT       tccr1a, _ACCA
                        LDI       _ACCA, 2
                        STS       tccr1b, _ACCA

TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: PWM Ändern

 · 
Posted: 18.06.2015 - 18:09  ·  #4
Ähmmm noma ne Frage... ich habe gerade die Proceduren geschrieben und habe gesehen
das sie schon in der asm Datei steht obwohl ich sie noch nicht im Programm aufgerufen habe.

Wird sie dann schon in der hex mit Kompiliert ?


Code

Procedure Set_PWM_10_8;
Begin
asm;
  SBI       DDRD, 5
  CLR       _ACCA
  OUT       tcnt1h, _ACCA
  OUT       tcnt1l, _ACCA
  OUT       ocr1ah, _ACCA
  OUT       ocr1al, _ACCA
  LDI       _ACCA, 083h
  OUT       tccr1a, _ACCA
  LDI       _ACCA, 2
  STS       tccr1b, _ACCA
endasm;
end Set_PWM_10_8;


Procedure Set_PWM_8_1;
Begin
asm;
  SBI       DDRD, 5
  CLR       _ACCA
  OUT       tcnt1h, _ACCA
  OUT       tcnt1l, _ACCA
  OUT       ocr1ah, _ACCA
  OUT       ocr1al, _ACCA
  LDI       _ACCA, 081h
  OUT       tccr1a, _ACCA
  LDI       _ACCA, 1
  STS       tccr1b, _ACCA
endasm;
end Set_PWM_8_1;

Harald_K
 
Avatar
 
Subject:

Re: PWM Ändern

 · 
Posted: 18.06.2015 - 21:07  ·  #5
na logo werden die mit übersetzt - lediglich nicht genutzte Bibliotheksfunktionen werden teilweise weggelassen ...

das Nullen des Vergleichsregisters wird auch schon gemacht (ocr1ah/l gelöscht), ebenso das Löschen des Zählerregisters (tcnt1h/l)
das Setzen des DDRD-Bit5 (OCR1A-Pin) kannst du dir sparen. wenn du den Port nicht im Betrieb umprogrammierst.

würde allerdings vor dem Zugriff noch ein
CLI ;disable INTs

und dahinter ein

SEI ; enable INTs

einfügen, damit beim Laden der PWM-Register nix dazwischenfunkt - beim system init ist ja der INT noch disabled.
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: PWM Ändern

 · 
Posted: 19.06.2015 - 05:49  ·  #6
Moin Harald, danke noma für den Tipp, jo das ist mir jetzt auch klar das
CLI ;disable INTs
und dahinter ein
SEI ; enable INTs

das noch mit rein muss.



Gruß Frank
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: PWM Ändern

 · 
Posted: 19.06.2015 - 16:06  ·  #7
HI,
auf einen Mega solltest du lieber

Code

  ...
  NoInts;
  asm;
   ...
  endasm;
  RestoreInts;


benutzen, da hier das IntFlag mitgeführt wird.
An dieser Stelle ist das egal aber ....

Gruß
miparo
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   123   137 · Page-Gen-Time: 0.0228s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI