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: Tiptastensteuerung für LEDs und PWM Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Andreas - 6.04.2009 22:04)
 Als Antwort auf Re: Tiptastensteuerung für LEDs und PWM von Andreas - 30.03.2009 19:45
Andreas nutzt:  Open-Micro, Open-Mini
Es ist vollbracht. Das Programm lĂ€uft nun fehlerfrei und wie gewĂŒnscht.
define allleds_a byteport[1]               ' Sammelfestlegung aller LEDs an Port a
define allleds_b byteport[2]               ' Sammelfestlegung aller LEDs an Por

ist keine so gute Idee gewesen. Damit wurden alle Ports auf Ausgang geschaltet und die EingÀnge waren wirkungslos. (vielen Dank an André).
Der Rest waren teilweise Reihenfolgesortierungen im Ablauf bei den Abfragen und ein hardwareseitig verkehrt verdrahteter Anschlussport. LED-Port auf Taste und umgekehrt.

Vielen Dank noch mal fĂŒr die UnterstĂŒtzung bei diesem nicht ganz einfachen Projekt

Andreas

und fĂŒr die, die das Programm interessiert, der komplette Code

' ---------------------------------------------------------------------------
'
' Heizgriffsteuerung fĂŒr MotorrĂ€der o.Ă€. Anwendungen V 1.0 von A. Rutenberg
'
' ---------------------------------------------------------------------------
' Die ganze Schaltung besteht im Wesentlichen aus zwei Tasten und einer 10er LED-Zeile und einer
' MOS-FET-Stufe. FĂŒr die LEDs sind Treiber eingebaut.
'
' --- Betriebssystem konfigurieren ------------------------------------------
include "om.def"           ' Definitionen fuer Betriebssystem
option openmini
pullupa = 0
pullupb = 0
ClockDis = on
' ---------------------------------------------------------------------------

RunOnErr = on                      ' bei Fehler Programm neu starten
define PWM_Port            port[1] ' 1. PWM Ausgang
define spannung            AD[2]   ' Spannungskontrollport
define Led1                port[4]
define Led2                port[5]
define Led3                port[6]
define Led4                port[9] ' Die Open-Mini besitzt wie die Open-Micro
define Led5                port[10]' den PORTA und zusĂ€tzlich den PORTB.
define Led6                port[11]
define Led7                port[12]
define Led8                port[15]
define Tasterauf           port[13]' Taste höher
define Tasterunter         port[14]' Taste niedriger
define blank               port[16]' zum halbhell/dunkelsteuern der Ă€ußersten LEDs
define Bit81_88            byte[11]' byte 11 (statische Bits 81 bis 88)
define Flanke1             Bit[81] ' Flankenbit Taste rauf
define Flanke2             Bit[82] ' Flankenbit Taste runter
define taste1              Bit[87] ' Tastenbit Taste rauf
define taste2              Bit[88] ' Tastenbit Taste runter
define tmp                 byte    ' Hilfsvariable fĂŒr PWM
define a                   byte    ' ZĂ€hlervariable
define t                    byte    ' ZĂ€hlervariable
define x                   byte    ' Timervariable
define y                   byte    ' ZĂ€hlervariable Ende-Timer


'   Die Pinbelegung der
'    Open-Mini (QY4)
'              _____    _____
'             |     \__/     |
'            [  VDD      GND  ]       VDD = 4.6 bis 5.5 Volt
'             |              |
' blank      [  PTB7    PTB0  ]       LED 4
'             |              |
' LED 8      [  PTB6    PTB1  ]       LED 5
'             |              |
' LED 3      [  PTA5    PTA0  ]       PWM1
'             |              |
' LED 2      [  PTA4    PTA1  ]       PWM2
'             |              |
' Tasterauf  [  PTB5    PTB2  ]       LED 6
'             |              |
' Tasterunter[  PTB4    PTB3  ]       LED 7
'             |              |
' LED 1      [  PTA3    PTA2  ]       host/run
'             |______________|
'

' ---Initialisierung---------------------------------------------------------

#init
tmp = 0
a = 1
t = 0                                      ' Variable fĂŒr ZĂ€hler
x = 0                                      ' Variable fĂŒr Timer
y = 0                                      ' Variable fĂŒr Ende-Timer
if Tasterauf then goto setz1                  ' Taste gedrĂŒckt? Ja, dann setze EIN-Flanke
Flanke1 = 0                                ' FlankenBit off setzen
if Tasterunter then goto setz2                  ' Taste gedrĂŒckt? Ja, dann setze EIN-Flanke
Flanke2 = 0                                ' FlankenBit off setzen
goto initend                               ' Reset Ein-Flanke (bei NichtbetĂ€tigung der Taste)
#setz1
if Flanke1 then goto error                 ' Ein-Flanke gesetzt? Ja, dann Ende
Flanke1 = on                               ' Setze Ein-Flanke (Sperre fĂŒr weiteres Setzen)
goto init
#setz2
if Flanke2 then goto error                 ' Ein-Flanke gesetzt? Ja, dann Ende
Flanke2 = on                               ' Setze Ein-Flanke (Sperre fĂŒr weiteres Setzen)
goto init
#initend
                                           'weiter gehts
' ---Hauptprogramm-----------------------------------------------------------

#start
' Beginn mit PrĂŒfung auf Unterspannung und nachfolgendem Vorheizen der Griffe
if spannung < 175 then goto unterspannung  ' PrĂŒfung auf Unterspannung der Batterie <11 Volt
if Tasterauf then goto setz3               ' Taste gedrĂŒckt? Ja, dann setze EIN-Flanke
Flanke1 = 0                                ' FlankenBit off setzen
if Tasterunter then goto setz4             ' Taste gedrĂŒckt? Ja, dann setze EIN-Flanke
Flanke2 = 0                                ' FlankenBit off setzen
goto start                                 ' Reset Ein-Flanke (bei NichtbetĂ€tigung der Taste)
#setz3
if Flanke1 then goto vorheizen             ' Ein-Flanke gesetzt? Ja, dann Ende
Flanke1 = on                               ' Setze Ein-Flanke (Sperre fĂŒr weiteres Setzen)
goto start
#setz4
if Flanke2 then goto vorheizen             ' Ein-Flanke gesetzt? Ja, dann Ende
Flanke2 = on                               ' Setze Ein-Flanke (Sperre fĂŒr weiteres Setzen)
goto start                                 ' RĂŒcksprung zu start

#start1
' Startpunkt des laufenden Programms
x = Timer                                  ' setzt x auf Timerabfrage (Timer zĂ€hlt automatisch hoch)
#start2
if spannung < 175 then goto unterspannung1 ' PrĂŒfung Unterspannung <11 Volt Lichtmaschine
if Tasterauf then goto rauf                
Flanke1 = 0
if Tasterunter then goto runter
Flanke2 = 0
if Timer = (x + 200) then goto start3      ' 4 Sekunden bis off der LEDs - TastenbetĂ€tigung ist möglich
goto start2
#start3
led1 = 0                                   ' alle LEDs ausschalten
led2 = 0                                   ' alle LEDs ausschalten
led3 = 0                                   ' alle LEDs ausschalten
led4 = 0                                   ' alle LEDs ausschalten
led5 = 0                                   ' alle LEDs ausschalten
led6 = 0                                   ' alle LEDs ausschalten
led7 = 0                                   ' alle LEDs ausschalten
led8 = 0                                   ' alle LEDs ausschalten
blank = 0                                  ' Grenz-LEDs ausschalten
goto start1                                ' RĂŒcksprung zum Start

' ---Unterprogramme---------------------------------------------------------

#vorheizen
' signalisiert durch hochlaufende LEDs ĂŒber 30 Sekunden
pwm1_ein                              ' PWM-Routine Port1 einschalten
tmp = 250                             ' Verbraucher mit 100% vorheizen
pwm1 tmp                              ' Datenzuweisung fĂŒr PWM
for t = 0 to 5                        ' ZĂ€hler fĂŒr 6 DurchlĂ€ufe ergibt zusammen 30 Sekunden
x = Timer                             ' setzt Timerzeit auf 0, Timer zĂ€hlt automatisch hoch
y = Timer                             ' setzt Ende-Timerzeit auf 0, Timer zĂ€hlt automatisch hoch
#schleife
blank = on                            ' Grenz-LEDs einschalten
if Timer = x then led1 = on           ' LED einschalten
if Timer = x + 5 then led2 = on       ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 10 then led3 = on      ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 15 then led4 = on      ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 20 then led5 = on      ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 25 then led6 = on      ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 30 then led7 = on      ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 35 then led8 = on      ' nĂ€chste LED nach 0,1 Sekunden
if Timer = x + 40 then led1 = off     ' LED ausschalten
if Timer = x + 40 then led2 = off     ' LED ausschalten
if Timer = x + 40 then led3 = off     ' LED ausschalten
if Timer = x + 40 then led4 = off     ' LED ausschalten
if Timer = x + 40 then led5 = off     ' LED ausschalten
if Timer = x + 40 then led6 = off     ' LED ausschalten
if Timer = x + 40 then led7 = off     ' LED ausschalten
if Timer = x + 40 then led8 = off     ' LED ausschalten
if Timer = x + 50 then x = Timer      ' 0,2 Sekunden vergangen dann Sprung zu start1
if Timer = y + 250 then goto weiter   ' prĂŒfen ob alle DurchlĂ€ufe absolviert sind
goto schleife
#weiter
if t = 5 then tmp = 72                ' Sollwert PWM auf 29% setzen
pwm1 tmp
a = 3
if t = 5 then goto start1             ' nach Ablauf der Schleifen RĂŒcksprung zum start1
next                                  ' nĂ€chster Schritt

#rauf
' erhöhen der Tastendruck-ZÀhlers um 1 bis zum Maximum
if Flanke1 then goto rauf1            ' Ein-Flanke gesetzt? Ja, dann Ende
Flanke1 = on                          ' Setze Ein-Flanke (Sperre fĂŒr weiteres Setzen)
if a = 8 then goto start1             ' Wenn der ZĂ€hler = 8 ist wird das Unterprogramm verlassen
a = a + 1                             ' Erhöhung des ZĂ€hlers um 1
#rauf1
goto anzeige

#runter
' erniedrigen des Tastendruck-ZĂ€hlers um 1 bis Minimum
if Flanke2 then goto runter1          ' Taste gedrĂŒckt? Ja, dann setze EIN-Flanke
Flanke2 = on                          ' Reset Ein-Flanke (bei NicthbetĂ€tigung der Taste)
if a = 1 then goto start1             ' Wenn der ZĂ€hler = 0 ist wird das Unterprogramm verlassen
a = a - 1                             ' Erniedrigung des ZĂ€hlers um 1
#runter1
goto anzeige

#anzeige
' signalisiert durch jeweils leuchtende LED
blank = on                 ' schaltet die beiden Ă€ußersten LEDs auf halbe Helligkeit
if a = 1 then led1 = on    ' LED1 an
if a = 1 then tmp = 0      ' PWM Port 0%
if a = 1 then led2 = 0     ' wenn LED 1 on ist, dann kann LED2 nicht on sein
if a = 2 then led2 = on    ' LED2 an
if a = 2 then tmp = 36     ' PWM Port 14%
if a = 2 then led1 = 0     ' wenn LED 2 on ist, dann kann LED1 nicht on sein
if a = 2 then led3 = 0     ' wenn LED 2 on ist, dann kann LED3 nicht on sein
if a = 3 then led3 = on    ' LED3 an
if a = 3 then tmp = 72     ' PWM Port 29%
if a = 3 then led2 = 0     ' wenn LED 3 on ist, dann kann LED2 nicht on sein
if a = 3 then led4 = 0     ' wenn LED 3 on ist, dann kann LED4 nicht on sein
if a = 4 then led4 = on    ' LED4 an
if a = 4 then tmp = 108    ' PWM Port 43%
if a = 4 then led3 = 0     ' wenn LED 4 on ist, dann kann LED3 nicht on sein
if a = 4 then led5 = 0     ' wenn LED 4 on ist, dann kann LED5 nicht on sein
if a = 5 then led5 = on    ' LED5 an
if a = 5 then tmp = 144    ' PWM Port 58%
if a = 5 then led4 = 0     ' wenn LED 5 on ist, dann kann LED4 nicht on sein
if a = 5 then led6 = 0     ' wenn LED 5 on ist, dann kann LED6 nicht on sein
if a = 6 then led6 = on    ' LED6 an
if a = 6 then tmp = 180    ' PWM Port 72%
if a = 6 then led5 = 0     ' wenn LED 6 on ist, dann kann LED5 nicht on sein
if a = 6 then led7 = 0     ' wenn LED 6 on ist, dann kann LED7 nicht on sein
if a = 7 then led7 = on    ' LED7 an
if a = 7 then tmp = 216    ' PWM Port 86%
if a = 7 then led6 = 0     ' wenn LED 7 on ist, dann kann LED6 nicht on sein
if a = 7 then led8 = 0     ' wenn LED 7 on ist, dann kann LED8 nicht on sein
if a = 8 then led8 = on    ' LED8 an
if a = 8 then tmp = 250    ' PWM Port 100%
if a = 8 then led7 = 0     ' wenn LED 8 on ist, dann kann LED7 nicht on sein
pwm1 tmp                   ' Datenzuweisung PWM-Port1
goto start1                ' RĂŒcksprung in das Hauptprogramm start1

#error
' signalisiert durch LED 4 und 5 blinkend
blank = on                 ' Grenz-LEDs an
led4 = on                  ' LED4 einschalten
led5 = on                  ' LED5 einschalten
pause 12                   ' 1/4 Sekunde Pause
blank = 0                  ' Grenz-LEDs aus
led4 = 0                   ' LED4 ausschalten
led5 = 0                   ' LED5 ausschalten
pause 12                   ' 1/4 Sekunde Pause vor dem RĂŒcksprung
goto init                  ' RĂŒcksprung zu init

#unterspannung
' signalisiert durch schnell blinkende LED 1 und 8
pwm1_aus                   ' PWM-Routine Port1 ausschalten
blank = on                 ' Grenz-LEDs an
led1 = on                  ' LED1 an
led8 = on                  ' LED8 an
pause 6                    ' 1/8 Sekunde Pause
blank = 0                  ' Grenz-LEDs aus
led1 = 0                   ' LED1 aus
led8 = 0                   ' LED8 aus
pause 6                    ' 1/8 Sekunde Pause vor dem RĂŒcksprung
goto start                 ' RĂŒcksprung zum start

#unterspannung1
' signalisiert durch schnell blinkende LED 1 und 8
a = 1
blank = on                 ' Grenz-LEDs an
led1 = on                  ' LED1 an
led8 = on                  ' LED8 an
pause 6                    ' 1/8 Sekunde Pause
blank = 0                  ' Grenz-LEDs aus
led1 = 0                   ' LED1 aus
led8 = 0                   ' LED8 aus
pause 6                    ' 1/8 Sekunde Pause vor dem RĂŒcksprung
goto anzeige               ' RĂŒcksprung zur anzeige
end                        ' Programmende

' ---------------------------------------------------------------------------
' --- PWM-Routinen fĂŒr Port1 ------------------------------------------------
' ---------------------------------------------------------------------------
TABLE pwm1_ein byte    ' PWM Port1 einschalten
  &h12 &h06
  &h1a &h20 &h18 &h20 &h3f &h26 &h3f &h27 &ha6 &h1a &hb7 &h25 &h1b &h20 &h81
TABEND
' ---------------------------------------------------------------------------
TABLE pwm1 byte        ' PWM Port1 setzten - Uebergabe als Argument
  &h12 &h06
  &had &h13 &ha1 &hfa &h25 &h03 &h10 &h25 &h81 &h5f &h48 &h59 &h48 &h59 &hbf &h26
  &hb7 &h27 &h11 &h25 &h81 &hae &h01 &h83
TABEND
' ---------------------------------------------------------------------------
TABLE pwm1_aus byte    ' PWM Port1 ausschalten
  &h12 &h06
  &h1a &h20 &h18 &h20 &h3f &h25 &h1b &h20 &h81
TABEND
' --------------------------------------------------------------------------

 Antwort schreiben

Bisherige Antworten: