![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 |