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: