Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: PWM Takt 100 bzw. 200Hz statt 50Hz Kategorie: Programmierung Basic (von Joe - 11.10.2009 17:29)
 Als Antwort auf PWM Takt 100 bzw. 200Hz statt 50Hz von Joe - 9.10.2009 18:30
Joe nutzt:  CC1-M-Unit V1.1, CC1-Station V2.0, Micro, Open-Micro
Hallo OMICRO Anwender,

Hier die Lösung, welche ich nun gefunden habe. Bei den von mir verwendeten Programmen mit rel. geringer Komplexität und einem Umfang unter 516Bytes hat es nun einwandfrei funktioniert.

Folgenden Hinweise von Rene Stadler möchte ich hier noch anführen:
Natürlich könnte man die Frequenz höher setzen, aber dann bleibt bei der OM schnell keine Rechenleistung mehr für andere Sachen übrig (und man müste vor allem die Interrupts ausschalten, um auch einen technischen Hintergrund zu geben).


Freundliche Grüße

Joe Fenk

####  Beispielprogramm  #######################
' ---MY_PWMD2.BAS  vom So. 11.10.2009
' Testversion um die PWM2 Wiederholrate von 50Hz, 100, 200, 400, 800. 1600 u. 3200 Hz zu testen
' Diese Version ist von Josef Fenk und basiert auf der Orginialversion von Rene Stadler
' Original Ausgangsbasis
' --- PWM-Demoprogramm 1 fuer OCBASIC ---------------------------------------
' --- (c) 2005 Rene Stadler, rene@stadlerhome.de ----------------------------
' --- von mir JF am 07.10.2009 geaendert auf Port 2/Pin6 Ausgang

' Hardware:
' Kontroll-LED an Port[2]

' Software:
' In dem Demo wird nur Port 2/Pin6 eingeschaltet und langsam
' von 0 bis 255 erhoeht. Danach wird von 255 bis auf 0
' abgesenkt. Dieser Vorgang wird immer wieder wiederholt bis das Programm
' beendet wird.
' Die Wiederholrate betraegt ca. 50Hz (bei der CC1 knapp 2kHz). Es sind nur
' 250 veschiedene Stufen möglich - Werte ueber 250 werden wie 255 behandelt.
' Bei Verwendung von "pwm_aus" kann es zu einem (Phasen-)Fehler auf dem anderen
' Kanal kommen. Bei entsprechend empfindlicher Hardware sollte darauf verzichtet
' werden, oder zumindest darauf geachtet werden, da der andere Kanal "0" oder
' "255" ist, da der Phasenfehler dann nur zu einer Verlaengerung der Impulse
' fuehrt. Nach dem Einschalten ist der Port immer auf "0" initialisiert.
' ---------------------------------------------------------------------------


' --- Betriebssystem konfigurieren ------------------------------------------
include "OM.DEF"          ' versuchsweise von mir JF eingefgt, funktioniert nun mit Compiler-Version 1.05

pullupa = &b00111101      ' Schaltet die internen Pull-Up-Widerstaende von
                          ' Port1 und Port2 aus
' ---------------------------------------------------------------------------

' --- Definition der Variablen ----------------------------------------------
'define TSC IVAR [161]     ' TIM Status und Control Register
define tmp byte           ' Hilfsvariable
' ---------------------------------------------------------------------------


' ---------------------------------------------------------------------------
' --- Hauptprogramm ---------------------------------------------------------
' ---------------------------------------------------------------------------
pwm2_ein                  ' PWM-Routine Port2 einschalten

#endlos
'*** Einfügung, um das TIM Status und Control Register auf verschidene Prescalerfaktoren zu setzen
'TSC=&b01000110      ' ./.64;==> 50Hz PWM Takt;muss nicht gesetzt werden da dies die Grundeinstellung der Prescaler select bits ist im Speicherplatz $0020 bei der OMICRO
'TSC=&b01000101      ' ./.32;==> 100Hz PWM Takt; Prescaler select bits im Speicherplatz $0020
'TSC=&b01000100      ' ./.16;==> 200Hz PWM Takt; Einstellung der Prescaler select bits im Speicherplatz $0020
'TSC=&b01000011      ' ./.8; ==> 400Hz PWM Takt; Einstellung der Prescaler select bits im Speicherplatz $0020
'TSC=&b01000010      ' ./.4; ==> 800Hz PWM Takt; Einstellung der Prescaler select bits im Speicherplatz $0020
'TSC=&b01000001      ' ./.2; ==> 1600Hz PWM Takt; Einstellung der Prescaler select bits im Speicherplatz $0020
TSC=&b01000000      ' ./.1; ==> 3200Hz PWM Takt; Einstellung der Prescaler select bits im Speicherplatz $0020

for tmp=0 to 255          ' PWM-Port 2 hochzaehlen
 Print "PWM2=";tmp
 pwm2 tmp                 ' Datenzuweisung PWM-Port2
 pause 10                  ' 0,1 Sekunden warten
next

for tmp=255 to 0 step -1  ' PWM-Port 2 runterzaehlen
 Print "PWM2=";tmp
 pwm2 tmp                 ' Datenzuweisung PWM-Port2
 pause 10                  ' 0,1 Sekunden warten
next

goto endlos

' ---------------------------------------------------------------------------
end

' ---------------------------------------------------------------------------
' --- PWM-Routinen für Port2 ------------------------------------------------
' ---------------------------------------------------------------------------
TABLE pwm2_ein byte    ' PWM Port2 einschalten
  &h12 &h06
  &h1a &h20 &h18 &h20 &h3f &h29 &h3f &h2a &ha6 &h1a &hb7 &h28 &h1b &h20 &h81
TABEND
' ---------------------------------------------------------------------------
TABLE pwm2 byte        ' PWM Port2 setzten - Uebergabe als Argument
  &h12 &h06
  &had &h13 &ha1 &hfa &h25 &h03 &h10 &h28 &h81 &h5f &h48 &h59 &h48 &h59 &hbf &h29
  &hb7 &h2a &h11 &h28 &h81 &hae &h01 &h83
TABEND
' ---------------------------------------------------------------------------
TABLE pwm2_aus byte     ' PWM Port2 ausschalten
  &h12 &h06
  &h1a &h20 &h18 &h20 &h3f &h28 &h1b &h20 &h81
TABEND
' ---------------------------------------------------------------------------

 Antwort schreiben

Bisherige Antworten: