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: Programmierung der D/A Ports? Kategorie: C-Control I V1.1 (von Laika - 21.06.2007 18:18)
 Als Antwort auf Re: Programmierung der D/A Ports? von Klaus - 16.06.2007 14:42
Hallo Klaus,

tut mir leid, hat etwas gedauert, würde mein Programm gerne als Datei schicken, habe es schon mal hier folgend beigelegt. Die zugehörige Schaltung ist mehr eine Bastelsache, müsste ich noch einscannen.

Gruss
laika


'*************************************************************************
' Spannungsregler - Führt die beiden Analogausgänge einem Analogeingang nach
'                   Dabei ist AA1 für positive, AA2 für negative Spannungen gedacht
'
' Erstellung: 18.12.03
' Änderungen:

define version 02    'Versionsnr. und
define tag     28    '  Datum/Uhrzeit für
define monat   12    '  die Ausgabe am PC
define jahr    03    '  beim Start und Auftrag "Hilfe";
define stunde  16    '  CControl sendet die Daten dann an den PC.
define minute_ 00    '    'minute_', da 'minute' Schlüsselwort ist!!

'**********************************************************************************
' Ports, Variablen und Konstanten
'**********************************************************************************

'*** Ports --------------------------------------------------------------------

define da_vor    port[1]    'steuert nur die grüne LED an
define da_rue    port[2]    'steuert die rote LED und das Umschaltrelais an
define de_quitt  port[3]

define ae_ein    ad[1]      'Eingangsspg.
define ae_ausspg ad[5]      'Kurzschlussüberwachung über Ausgangsspg.
define ae_ausstr ad[6]      'Kurzschlussüberwachung über Emitterstrom

define aa_aus    da[1]      'Ausgangsspg.

'Konstanten --------------------------------------------------------------------
define HI     -1            'HIGH/LOW-Werte für
define LO     0             '   Digitalein-/-ausgaben

define MITTE     127         'Trennung vor-/rückwärts
define AE_MAX    255         'Achsenabschnitt rückwärts
define TOTZONE    20         'Zone um die MITTE herum, wo Fahrtspg. = 0
define SCHWELLE   50         'Rohwert, auf den die Ausgangsspg. an der TOTZONE springt
define KURZSCHLUSS_STR 100   'Rohwert Emitterstrom, der zusammen mit dem
define KURZSCHLUSS_SPG 200   '  Rohwert der Ausgangsspg. als Kurzschluss gewertet wird
define KURZSCHLUSS_ZAEHLER_MAX 50

'Variablen --------------------------------------------------------------------
define kurzschluss_bit bit[1]
define bit_wort word   'das ist nur zur Belegung des "Bitwortes" definiert,
                       '  sonst liegt da die folgende Byte- oder Word-Definition drauf !!
define b1 byte
define b2 byte

define i1 word
define i2 word

define a word       'Geradenparameter:
define b_pos word   ' y = a*x + b
define b_neg word   '
define kurzschluss_zaehler word   'Zähler, der verhindert, dass sofort Kurzschluss gemeldet wird

'=== Programm ==========================================================

print
gosub print_version

'Parameter ausgeben
print "TOTZONE  = "; TOTZONE, "SCHWELLE = "; SCHWELLE
print "KURZSCHLUSS_SPG = "; KURZSCHLUSS_SPG, "KURZSCHLUSS_STROM = "; KURZSCHLUSS_STR

'Geradenparameter berechnen und ausgeben
a = (255 - SCHWELLE)*100 / (127 - TOTZONE)
b_pos = SCHWELLE*100 - (127 + TOTZONE)*a
b_neg = AE_MAX * 100
print "a * 100 = "; a
print "b_pos * 100 = "; b_pos
print "b_neg * 100 = "; b_neg

'Alles rücksetzen und Startton ausgeben
aa_aus = 0
da_vor = LO
da_rue = LO
kurzschluss_bit = LO
kurzschluss_zaehler = 0
gosub hui

#endlos

   'zyklische Ausgabe an PC (wenn nicht angeschlossen, macht's nix, geht einfach ins Leere)
   print ae_ein, ae_ausspg, ae_ausstr,
   if kurzschluss_bit then print "Kurzer !!" else print

   'Kurzschluss prüfen
   if ae_ausspg > KURZSCHLUSS_SPG and ae_ausstr > KURZSCHLUSS_STR then goto kurzschluss
   if not de_quitt then goto kein_kurzschluss_mehr
   if kurzschluss_bit then goto kurzschluss

   'Fahrtrichtung prüfen
   if ae_ein <= 127 - TOTZONE then goto rueckwaerts
   if ae_ein > 127 - TOTZONE and ae_ein < 127 + TOTZONE then goto stillstand
   'ae_ein >= 127 + TOTZONE ist vorwärts

   #vorwaerts
      aa_aus = (a*ae_ein + b_pos)/100 - 1
      da_vor = HI
      goto aa_setzen

   #stillstand
      aa_aus = 0
      da_vor = LO
      da_rue = LO
      goto aa_setzen

   #rueckwaerts
      aa_aus = (-a*ae_ein + b_neg)/100
      da_rue = HI
      goto aa_setzen

   #kurzschluss
      kurzschluss_zaehler = kurzschluss_zaehler + 1
      if kurzschluss_zaehler < KURZSCHLUSS_ZAEHLER_MAX then goto kurzschluss_ende
         kurzschluss_bit = HI
         aa_aus = 0
         da_vor = LO
         da_rue = LO
         gosub k_ton
      #kurzschluss_ende
      goto aa_setzen

   #kein_kurzschluss_mehr
      kurzschluss_bit = LO
      kurzschluss_zaehler = 0
      gosub hui
      goto aa_setzen

   #aa_setzen

goto endlos

#ende
print "Spannungsregler: Ende"

end

'=== Subroutinen =======================================================

'Versionsnummer, Erstellungsdatum und -uhrzeit an den PC senden
#print_version
   print "Spannungsregler - V"; version; " - "; tag; "."; monat; "."; jahr;
   print " "; stunde; ":"; minute_; " Uhr"
return
'-----------------------------------------------------------------------
table TOENE 1250 884 625 442 313 221 156 110 78 55 39
tabend
define TOENE_ANZ  10

#hui
   for b1 = 0 to TOENE_ANZ
      looktab TOENE, b1, i1
      beep i1, 2, 0
   next
return
'-----------------------------------------------------------------------
#k_ton
   beep 750, 20, 0
   beep 400, 30,0
return
'-----------------------------------------------------------------------
'-----------------------------------------------------------------------

 Antwort schreiben

Bisherige Antworten:

Re: Programmierung der D/A Ports? (von Klaus - 22.06.2007 1:12)
    Re: Programmierung der D/A Ports? (von Laika - 22.06.2007 10:24)
        Re: Programmierung der D/A Ports? (von Klaus - 27.06.2007 22:08)