$regfile = "m128def.dat" : $crystal = 16000000 $hwstack = 300 $swstack = 300 $framesize = 300 Config Adc = Single , Prescaler = Auto '---------------------------- Timer konfigurieren ---------------------------- '( Ungrade Pulslänge = 300 Us Grade Pulslänge = 700 - 1700 Us Timer 3 Startet Alle 27ms Einen Neuen Frame Timer 1 Ist Für Die Pulsweiten Zuständig Und Wird Je Nach Signal Neu Beschrieben ') Dim Pulslaenge(19) As Word Dim Ti As Byte Config Timer3 = Counter , Prescale = 1024 , Clear Timer = 1 On Oc3a Timer3_isr: Compare3a = 420 'ca 27ms Config Timer1 = Counter , Prescale = 8 , Clear Timer = 1 On Oc1a Timer1_isr Enable Oc1a Enable Oc3a '---------------------------- LCD Dispplay ----------------------------------- Dim ___lcdno As Byte 'umschaltung oberer/unterer Displaycontroller Config Lcd = 40 * 4 Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.5 , E2 = Portb.4 , Rs = Portb.6 ___lcdno = 1 'untere Displayhälfte Initlcd Cursor Off Noblink Cls ___lcdno = 0 'obere Displayhälfte Initlcd Cursor Off Noblink Cls '---------------------------- RS 232 für Duplex ------------------------------ Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 2 , Databits = 9 , Clockpol = 0 Config Serialin = Buffered , Size = 64 Baud 9600 Open "com1:" For Binary As #1 'Txd_pullup Alias Porte.1 'Rxd_pullup Alias Porte.0 'Rxd_enabled Alias Ucsrb.rxen 'Txd_enabled Alias Ucsrb.txen 'Config Porte = &B00000000 'Set Rxd_pullup 'Reset Txd_pullup 'Reset Txd_enabled 'Set Rxd_enabled '---------------------------- Konstanten ------------------------------------- Const Channels = 9 Const Funktionen = 30 ' Höhe / Seite / Quer usw '---------------------------- Variablen RX ----------------------------------- Dim Ri As Byte Dim Rx As Byte Dim Kalibrierwert(6) As Integer 'Steuerknüppel mittelstellung Dim Verstaerkung(6) As Integer 'Steuerknüppel weg Dim Mitte(channels) As Integer Dim Trimm(6) As Byte Dim Dualrate(channels) As Byte Dim Weg_rev_l(channels) As Byte Dim Weg_rev_r(channels) As Byte Dim Servonummer(channels) As Byte 'Zuordnung der Servos Dim Woelb_l(channels) As Byte Dim Woelb_r(channels) As Byte Dim Flap_l(channels) As Byte Dim Flap_r(channels) As Byte Dim Butterfly_l(channels) As Byte Dim Butterfly_r(channels) As Byte Dim Speichernr As Byte Dim Modellname As String * 10 Dim Funktion(30) As String * 20 ' Höhe / Seite / Quer usw Dim Woelbklappen As Integer Dim Festwert(channels) As Integer Dim Wert As Single Dim Help As Integer Dim Geberwert(channels) As Integer 'für Pulsweite Dim Geber(channels) As Byte 'Zuordnung der Geber Dim Volt As Word Dim Takt As Byte '------------ Hilfsvariablen ------------------------------------------------- Dim A As Byte Dim I As Word Dim X As Byte Dim R As Byte Dim T As Integer Dim Eprom As Integer Dim Jeti_d As Byte Dim Jeti As Byte Dim Jeti_text As String * 32 Dim Lcd_text As String * 40 Dim _rs_bufcountr0 As Byte '----------------------------------------------------------------------------- ' - - - - - - - - - E / A Konfiguration - - - - - - - - - - - - - - - - - - - Dual_hoehe Alias Pinc.0 Dual_seite Alias Pinc.1 Dual_quer Alias Pinc.2 Geber_g Alias Pinc.3 Memory Alias Pinc.4 Geber_h Alias Pinc.5 Geber_i_l Alias Pinc.6 'zwei Stufen Schalter Geber_i_r Alias Pinc.7 'zwei Stufen Schalter Config Portc = Input 'Port C als Eingang Portc = 255 'Interne Pullup einschalten Ppm_signal Alias Portd.7 Config Ppm_signal = Output Dreh1 Alias Portg.0 'Drehgeber Dreh2 Alias Portg.1 'Drehgeber Speaker Alias Portg.2 'Externer Buzzer Buzzer Alias Portd.6 'Interner Buzzer Config Dreh1 = Input Config Dreh2 = Input Config Speaker = Output Config Buzzer = Output Dim Keycode As Byte 'Tastaturmatric Config Kbd = Porta , Debounce = 20 , Delay = 10 '============================ Pulslänge vorbelegen =========================== For I = 1 To 19 Step 2 Pulslaenge(i) = 600 Pulslaenge(i + 1) = 2000 Next I For I = 1 To 6 Trimm(i) = 125 Servonummer(i) = I Geber(i) = I Next I For I = 1 To Channels Weg_rev_l(i) = 225 Weg_rev_r(i) = 225 Festwert(i) = 400 'erstmal festlegen Next I '---------------------- Geberauflösung aus EEprom lesen ----------------------- For I = 1 To 6 X = I * 2 Readeeprom Kalibrierwert(i) , X Next I Readeeprom Verstaerkung(1) , 14 Readeeprom Verstaerkung(2) , 16 Readeeprom Verstaerkung(3) , 18 Readeeprom Verstaerkung(4) , 20 Readeeprom Verstaerkung(5) , 22 Readeeprom Verstaerkung(6) , 24 '----------------------------------------------------------------------------- Jeti_text = "Transmitter TypeDuplex Tx >" Gosub Gebername 'Zuordnung der Gebernamen Gosub Eeprom_lesen 'Letztes Modell lesen Gosub Zeile1 'Standardanzeige LCD '---------------------------- Interrupts einschalten ------------------------- Start Timer2 Start Adc Enable Interrupts '**************************** Main ******************************************* '**************************** Main ******************************************* Do Keycode = Getkbd() If Keycode = 13 Then Gosub Menue If Keycode < 16 Then Gosub Trimmung '16 ohne Taste If Keycode = 16 And Takt > 250 Then Takt = 0 ___lcdno = 0 Locate 2 , 2 Lcd " " End If '-------------------------- LCD -------------------------------------------- Takt = Takt + 1 'Display nicht zu oft ansprechen If Takt = 50 Then Gosub Zeile1 If Takt = 100 Then 'Spannung des Akkus anzeigen ___lcdno = 0 Locate 1 , 21 Lcd_text = Str(volt) Lcd Left(lcd_text , 1) ; "," Lcd Right(lcd_text , 2) ; " V" End If If Takt = 150 Then Gosub Duplex 'Serial0charmatch ___lcdno = 1 Locate 1 , 1 : Lcd Left(jeti_text , 16) End If If Takt = 200 Then ___lcdno = 1 Locate 2 , 1 : Lcd Right(jeti_text , 16) End If Loop '***************************************************************************** Zeile1: ___lcdno = 0 Locate 1 , 1 Lcd "Sp." If Speichernr < 10 Then Lcd " " Lcd Speichernr ; " " Lcd Modellname ; " " Return '******************* Komunikation Duplex ************************************* Duplex: Lcd_text = "" For I = 1 To 64 Lcd_text = Lcd_text + Chr(_rs232inbuf0(i)) Next I Jeti_text = "" For I = 1 To 30 Jeti_text = Mid(lcd_text , I , 1) A = Asc(jeti_text) If A = 254 Then R = I + 1 A = R + 31 For X = R To A Jeti_text = Jeti_text + Mid(lcd_text , X , 1) Next X Return End If Next I Return '***************************************************************************** '---------------------------- Timer 3 ---------------------------------------- Timer3_isr: Ti = 1 Compare1a = Pulslaenge(ti) Start Timer1 Set Ppm_signal Volt = Getadc(0) Return '---------------------------- Timer 1 ---------------------------------------- Timer1_isr: If Ti < 19 Then Incr Ti Compare1a = Pulslaenge(ti) Toggle Ppm_signal Else Reset Ppm_signal Stop Timer1 Gosub Analogwerte End If Return '***************************************************************************** '---------------------------- Geberwerte lesen ------------------------------- Analogwerte: '--------- ADC 1 - 6 auslesen ------------------------------------------------ For Ri = 1 To 6 Geberwert(ri) = Getadc(ri) Geberwert(ri) = Geberwert(ri) - Kalibrierwert(ri) Geberwert(ri) = Geberwert(ri) * Verstaerkung(ri) Geberwert(ri) = Geberwert(ri) / 5 If Geber(ri) = 30 Then Geberwert(ri) = 0 '30 bedeutet ohne Zuweisung Next Ri '--------- Kanal 7 - 9 Festwerte zuweisen ------------------------------------ Geberwert(7) = 0 '30 bedeutet ohne Zuweisung If Geber_g = 0 And Geber(7) <> 30 Then Geberwert(7) = 1000 Else Geberwert(7) = -1000 End If Geberwert(8) = 0 '30 bedeutet ohne Zuweisung If Geber_h = 0 And Geber(8) <> 30 Then Geberwert(8) = 1000 Else Geberwert(8) = -1000 End If If Geber_i_l = 1 And Geber_i_r = 1 Then Geberwert(9) = 0 If Geber_i_l = 0 Then Geberwert(9) = 1000 If Geber_i_r = 0 Then Geberwert(9) = -1000 If Geber(9) = 30 Then Geberwert(9) = 0 '30 bedeutet ohne Zuweisung '***************************************************************************** '------------------------- Servozuordnung + Weg/Rev -------------------------- For Ri = 1 To Channels Help = 225 If Geberwert(servonummer(ri)) > 2 Then Help = Makeint(weg_rev_r(ri) , 0 ) If Geberwert(servonummer(ri)) < -2 Then Help = Makeint(weg_rev_l(ri) , 0 ) Help = Help - 125 '225 - 125 = +100% Wert = Geberwert(servonummer(ri)) * Help 'weg_rev Wert = Wert / 100 'Prozent '**************************************************************************** '--------------- Trimmung --------------------------------------------------- If Ri < 7 Then 'Analogwerte + Trimmung Wert = Wert + Trimm(servonummer(ri)) 'Trimmung Mitte = 125 Wert = Wert + Trimm(servonummer(ri)) '3 mal ergibt 375 Wert = Wert + Trimm(servonummer(ri)) 'für größeren Trimm-Weg End If Wert = Wert + 2025 '+1200 ms (- 375) If Wert > 3400 Then Wert = 3400 'max 1,7 ms If Wert < 1400 Then Wert = 1400 'min 0,7 ms Rx = Ri * 2 : Pulslaenge(rx) = Wert 'Zuordnung zum Kanal Next Ri Return '---------------------------- Tastenabfrage ---------------------------------- Trimmung: Select Case Keycode() Case 0: ' "D0 + D4" Case 1: ' "D1 + D4" Case 2: ' "D2 + D4" If Trimm(2) < 255 Then Incr Trimm(2) Case 3: ' "D3 + D4" If Trimm(2) > 0 Then Decr Trimm(2) Case 4: ' "D0 + D5" ___lcdno = 0 Locate 2 , 1 Takt = 0 Lcd Trimm(1) ; " " Lcd Trimm(2) ; " " Lcd Trimm(3) ; " " Lcd Trimm(4) ; " " I = 100 * Speichernr I = I + 10 : Writeeeprom Trimm(1) , I I = I + 1 : Writeeeprom Trimm(2) , I I = I + 2 : Writeeeprom Trimm(3) , I I = I + 3 : Writeeeprom Trimm(4) , I Goto Beenden Case 5: ' "D1 + D5" ___lcdno = 0 Locate 2 , 1 Takt = 0 Lcd Pulslaenge(2) ; " " Lcd Pulslaenge(4) ; " " Lcd Pulslaenge(6) ; " " Lcd Pulslaenge(8) ; " " Lcd Pulslaenge(10) ; " " Goto Beenden Case 6: ' "D2 + D5" If Trimm(1) < 255 Then Incr Trimm(1) Case 7: ' "D3 + D5" If Trimm(1) > 0 Then Decr Trimm(1) Case 8: ' "D0 + D6" Case 9: ' "D1 + D6" Case 10: ' "D2 + D6" If Trimm(4) > 0 Then Decr Trimm(4) Case 11: ' "D3 + D6" If Trimm(4) < 255 Then Incr Trimm(4) Case 12: ___lcdno = 0 Locate 2 , 1 Takt = 0 Lcd Verstaerkung(1) ; " " Lcd Verstaerkung(2) ; " " Lcd Verstaerkung(3) ; " " Lcd Verstaerkung(4) ; " " Lcd Verstaerkung(5) ; " " Lcd Verstaerkung(6) ; " " Goto Beenden Case 13: Case 14: If Trimm(3) < 255 Then Incr Trimm(3) Case 15: If Trimm(3) > 0 Then Decr Trimm(3) End Select ___lcdno = 0 Locate 2 , 1 Lcd Trimm(1) ; " " Lcd Trimm(2) ; " " Lcd Trimm(3) ; " " Lcd Trimm(4) ; " " Lcd Keycode() Waitms 50 Beenden: Return '--------------------------- Menue ------------------------------------------- Menue: ___lcdno = 1 : Cls Lcd "Servo Geber" Locate 2 , 1 Lcd "Speicher Extras" Gosub Wartenauftastelosgelassen Taste_menue: Keycode = Getkbd() If Keycode = 8 Then Gosub Menue_servo Goto Menue End If If Keycode = 1 Then Gosub Menue_geber Goto Menue End If If Keycode = 12 Then Gosub Menue_speicher Goto Menue End If If Keycode = 5 Then Gosub Menue_extras Goto Menue End If If Keycode = 13 Then ___lcdno = 1 : Cls : Lcd " *** Speichern ***" ___lcdno = 0 : Cls Gosub Eeprom_schreiben Gosub Wartenauftastelosgelassen ___lcdno = 1 : Cls Return End If Goto Taste_menue '----------------------------------------------------------------------------- Menue_servo: X = 1 : R = 1 : A = 1 ___lcdno = 0 : Cls Locate 1 , 1 Lcd " Weg Reverse " ___lcdno = 1 : Cursor On Blink : Cls Gosub Wartenauftastelosgelassen Menue_servo2: Locate 1 , 1 Lcd " Servo Nr. " ; X ; " " If A = 1 Then Lcd Funktion(geber(servonummer(x))) If A = 2 And Servonummer(x) = 3 Then Lcd "Woelbklappen" If A = 3 And Servonummer(x) = 3 Then Lcd "Flap " If A = 4 And Servonummer(x) = 3 Then Lcd "Butterfly " If A <> 1 And Servonummer(x) <> 3 Then Lcd "--- " If A = 1 Then T = Makeint(weg_rev_l(x) , 0) If A = 2 Then T = Makeint(woelb_l(x) , 0) If A = 3 Then T = Makeint(flap_l(x) , 0) If A = 4 Then T = Makeint(butterfly_l(x) , 0) T = T - 125 : Locate 2 , 2 : Lcd "L = " ; T ; "% " If A = 1 Then T = Makeint(weg_rev_r(x) , 0) If A = 2 Then T = Makeint(woelb_r(x) , 0) If A = 3 Then T = Makeint(flap_r(x) , 0) If A = 4 Then T = Makeint(butterfly_r(x) , 0) T = T - 125 : Locate 2 , 15 : Lcd "R = " ; T ; "% " If R = 1 Then Locate 1 , 12 'Servo angewählt If R = 2 Then Locate 2 , 2 'links angewählt If R = 3 Then Locate 2 , 15 'recht angewählt If R = 4 Then Locate 1 , 16 'Funktion Keycode = Getkbd() Gosub Wartenauftastendruck If Keycode = 8 Then R = 1 'Anwahl Servo If Keycode = 12 Then R = 2 'Anwahl links If Keycode = 5 Then R = 3 'Anwahl rechts If Keycode = 1 Then R = 4 'Anwahl Funktion If Keycode = 0 And R = 4 Then 'Funktionsauswahl + Incr A If A > 4 Then A = 1 End If If Keycode = 4 And R = 4 Then 'Funktionsauswahl - Decr A If A < 1 Then A = 4 End If '------------------------ Auswahl Servo 1 - 9 ---------------------------------- If Keycode = 0 And R = 1 Then 'Servoauswahl + Incr X If X > Channels Then X = 1 End If If Keycode = 4 And R = 1 Then 'Servoauswahl - Decr X If X < 1 Then X = Channels End If '------------------------- Allgemein ------------------------------------------------------ If Keycode = 0 And R = 2 And A = 1 And Weg_rev_l(x) < 250 Then '+ 1 Prozent links Incr Weg_rev_l(x) End If If Keycode = 4 And R = 2 And A = 1 And Weg_rev_l(x) > 0 Then '- 1 Prozent links Decr Weg_rev_l(x) End If If Keycode = 0 And R = 3 And A = 1 And Weg_rev_r(x) < 250 Then '+ 1 Prozent rechts Incr Weg_rev_r(x) End If If Keycode = 4 And R = 3 And A = 1 And Weg_rev_r(x) > 0then '- 1 Prozent rechts Decr Weg_rev_r(x) End If If Keycode = 9 And R = 2 And A = 1 Then 'Reverse T = Weg_rev_l(x) - 125 T = T * 2 Weg_rev_l(x) = Weg_rev_l(x) - T End If If Keycode = 9 And R = 3 And A = 1 Then 'Reverse T = Weg_rev_r(x) - 125 T = T * 2 Weg_rev_r(x) = Weg_rev_r(x) - T End If '------------------------- Woelb ------------------------------------------------------- If Keycode = 0 And R = 2 And A = 2 And Woelb_l(x) < 250 Then '+ 1 Prozent links Incr Woelb_l(x) End If If Keycode = 4 And R = 2 And A = 2 And Woelb_l(x) > 0 Then '- 1 Prozent links Decr Woelb_l(x) End If If Keycode = 0 And R = 3 And A = 2 And Woelb_r(x) < 250 Then '+ 1 Prozent rechts Incr Woelb_r(x) End If If Keycode = 4 And R = 3 And A = 2 And Woelb_r(x) > 0 Then '- 1 Prozent rechts Decr Woelb_r(x) End If If Keycode = 9 And R = 2 And A = 2 Then 'Reverse T = Woelb_l(x) - 125 T = T * 2 Woelb_l(x) = Woelb_l(x) - T End If If Keycode = 9 And R = 3 And A = 2 Then 'Reverse T = Woelb_r(x) - 125 T = T * 2 Woelb_r(x) = Woelb_r(x) - T End If '------------------------- Flap ------------------------------------------------------- If Keycode = 0 And R = 2 And A = 3 And Flap_l(x) < 250 Then '+ 1 Prozent links Incr Flap_l(x) End If If Keycode = 4 And R = 2 And A = 3 And Flap_l(x) > 0 Then '- 1 Prozent links Decr Flap_l(x) End If If Keycode = 0 And R = 3 And A = 3 And Flap_r(x) < 250 Then '+ 1 Prozent rechts Incr Flap_r(x) End If If Keycode = 4 And R = 3 And A = 3 And Flap_r(x) > 0 Then '- 1 Prozent rechts Decr Flap_r(x) End If If Keycode = 9 And R = 2 And A = 3 Then 'Reverse T = Flap_l(x) - 125 T = T * 2 Flap_l(x) = Flap_l(x) - T End If If Keycode = 9 And R = 3 And A = 3 Then 'Reverse T = Flap_r(x) - 125 T = T * 2 Flap_r(x) = Flap_r(x) - T End If '------------------------- Butterfly -------------------------------------------------- If Keycode = 0 And R = 2 And A = 4 And Butterfly_l(x) < 250 Then '+ 1 Prozent links Incr Butterfly_l(x) End If If Keycode = 4 And R = 2 And A = 4 And Butterfly_l(x) > 0 Then '- 1 Prozent links Decr Butterfly_l(x) End If If Keycode = 0 And R = 3 And A = 4 And Butterfly_r(x) < 250 Then '+ 1 Prozent rechts Incr Butterfly_r(x) End If If Keycode = 4 And R = 3 And A = 4 And Butterfly_r(x) > 0 Then '- 1 Prozent rechts Decr Butterfly_r(x) End If If Keycode = 9 And R = 2 And A = 4 Then 'Reverse T = Butterfly_l(x) - 125 T = T * 2 Butterfly_l(x) = Butterfly_l(x) - T End If If Keycode = 9 And R = 3 And A = 4 Then 'Reverse T = Flap_r(x) - 125 T = T * 2 Butterfly_r(x) = Butterfly_r(x) - T End If '---------------------------------------------------------------------------------------- If Keycode = 13 Then Cursor Off Noblink ___lcdno = 1 : Cls ___lcdno = 0 : Cls Gosub Wartenauftastelosgelassen Return End If Waitms 80 Goto Menue_servo2 Return '----------------------------------------------------------------------------- Menue_geber: Return '----------------------------------------------------------------------------- Menue_extras: ___lcdno = 0 : Cls Locate 1 , 1 Lcd " Zuordnung Servo/Geber" ___lcdno = 1 : Cls Locate 1 , 1 Lcd "Kalibrieren Zurueck" Locate 2 , 1 Lcd "Servo ZU Geber ZU" Gosub Wartenauftastelosgelassen Taste_extras: Keycode = Getkbd() If Keycode = 12 Then Gosub Menue_servo_zu Goto Menue_extras End If If Keycode = 5 Then Gosub Menue_geber_zu Goto Menue_extras End If If Keycode = 8 Then Gosub Kalibrieren Goto Menue_extras End If If Keycode = 13 Then ___lcdno = 0 : Cls ___lcdno = 1 : Cls Gosub Wartenauftastelosgelassen Return End If Goto Taste_extras '----------------------------------------------------------------------------- Menue_servo_zu: ___lcdno = 1 : Cls I = 1 : R = 1 : X = 0 Cursor Off Blink Locate 1 , 1 Lcd "Servo " Lcd I Lcd " steuert " Lcd Funktion(geber(servonummer(i))) Gosub Wartenauftastelosgelassen Menue_servo_zu2: Locate 2 , 1 Lcd Servonummer(1) ; " " Lcd Servonummer(2) ; " " Lcd Servonummer(3) ; " " Lcd Servonummer(4) ; " " Lcd Servonummer(5) ; " " Lcd Servonummer(6) ; " " Lcd Servonummer(7) ; " " Lcd Servonummer(8) ; " " Lcd Servonummer(9) Locate 1 , 7 Lcd I Locate 1 , 17 Lcd Funktion(geber(servonummer(i))) If X = 0 Then Locate 1 , 7 Else Locate 1 , 17 End If 'Taste_servo_zu: Gosub Wartenauftastendruck If Keycode = 8 Then X = 0 If Keycode = 1 Then X = 1 If Keycode = 0 And X = 0 Then Incr I : If I > Channels Then I = 1 'Servo 1-9 If Keycode = 4 And X = 0 Then Decr I : If I < 1 Then I = Channels If Keycode = 0 And X = 1 Then Incr Servonummer(i) : If Servonummer(i) > Channels Then Servonummer(i) = 1 'Kanal 1-9 If Keycode = 4 And X = 1 Then Decr Servonummer(i) : If Servonummer(i) < 1 Then Servonummer(i) = Channels If Keycode = 13 Then Cursor Off Noblink Cls Gosub Wartenauftastelosgelassen Return End If Gosub Wartenauftastelosgelassen Goto Menue_servo_zu2 '----------------------------------------------------------------------------- Menue_geber_zu: ___lcdno = 1 : Cls I = 1 : X = 0 Cursor On Blink Locate 1 , 1 Lcd "Geber " R = 64 + I : Lcd Chr(r) ' Geber A,B,C,D,E,F,G,H,I Lcd " steuert " Lcd Funktion(geber(i)) Lcd " " Gosub Wartenauftastelosgelassen Menue_geber_zu2: Locate 1 , 7 R = 64 + I : Lcd Chr(r) ' Geber A,B,C,D,E,F,G,H,I Locate 1 , 17 Lcd Funktion(geber(i)) If X = 0 Then Locate 1 , 7 Else Locate 1 , 17 End If 'Taste_geber: Gosub Wartenauftastendruck If Keycode = 8 Then X = 0 If Keycode = 1 Then X = 1 If Keycode = 0 And X = 0 Then Incr I : If I > Channels Then I = 1 If Keycode = 4 And X = 0 Then Decr I : If I < 1 Then I = Channels If Keycode = 0 And X = 1 Then Incr Geber(i) : If Geber(i) > 30 Then Geber(i) = 1 If Keycode = 4 And X = 1 Then Decr Geber(i) : If Geber(i) < 1 Then Geber(i) = 30 If Keycode = 13 Then Cursor Off Noblink Gosub Wartenauftastelosgelassen Cls Return End If Gosub Wartenauftastelosgelassen Goto Menue_geber_zu2 '----------------------------------------------------------------------------- Menue_speicher: ___lcdno = 1 : Cls Locate 1 , 1 : Lcd "Name kopieren" Locate 2 , 1 : Lcd "wechseln zurueck" Gosub Wartenauftastelosgelassen Taste_speicher: Gosub Wartenauftastendruck If Keycode = 1 Then Gosub Menue_kopieren Goto Menue_speicher End If If Keycode = 12 Then Gosub Menue_wechsel Goto Menue_speicher End If If Keycode = 8 Then Gosub Menue_name Goto Menue_speicher End If If Keycode = 13 Then Cls Gosub Wartenauftastelosgelassen Return End If Goto Taste_speicher '--------------------- Menue Speicher kopieren ------------------------------- Menue_kopieren: I = Speichernr R = Speichernr + 1 X = 1 ___lcdno = 0 : Cls Lcd "abrechen Kopieren" ___lcdno = 1 : Cls : Cursor Off Blink Lcd "von Speicher" Locate 2 , 2 Lcd "zu Speicher" Gosub Wartenauftastelosgelassen Keycode = 16 Menue_kopieren2: Locate 1 , 13 : Lcd I ; " " Eprom = I * 150 : Eprom = Eprom -100 Readeeprom Modellname , Eprom Modellname = Left(modellname , 10) Locate 1 , 17 : Lcd Modellname Locate 2 , 13 : Lcd R ; " " Eprom = R * 150 : Eprom = Eprom -100 Readeeprom Modellname , Eprom Modellname = Left(modellname , 10) Locate 2 , 17 : Lcd Modellname Locate X , 13 Taste_kopieren: Gosub Wartenauftastendruck If Keycode = 8 Then X = 1 If Keycode = 12 Then X = 2 If Keycode = 0 And X = 1 Then Incr I If Keycode = 4 And X = 1 Then Decr I If Keycode = 0 And X = 2 Then Incr R If Keycode = 4 And X = 2 Then Decr R If Keycode = 1 Then Cls : Lcd I ; " " Writeeeprom I , 0 Gosub Eeprom_lesen Lcd Modellname Locate 2 , 1 Lcd R ; " " Speichernr = R Lcd Modellname ___lcdno = 0 Locate 2 , 5 : Lcd "Bitte warten" Gosub Eeprom_schreiben Locate 2 , 5 : Lcd " " ___lcdno = 1 Goto Menue_kopieren End If If Keycode = 13 Then ___lcdno = 1 : Cls ___lcdno = 0 : Cls Eprom = Speichernr * 150 : Eprom = Eprom -100 Readeeprom Modellname , Eprom Modellname = Left(modellname , 10) Gosub Zeile1 Return End If Gosub Wartenauftastelosgelassen Goto Menue_kopieren2 Return '----------------------------------------------------------------------------- Menue_wechsel: ___lcdno = 1 : Cls Locate 1 , 1 : Lcd "Speicher wechseln + / -" ___lcdno = 0 : Cursor On Blink : Cls Menue_wechsel2: Gosub Zeile1 Locate 1 , 5 Taste_wechseln: Gosub Wartenauftastendruck If Keycode = 0 Then Incr Speichernr If Keycode = 4 Then Decr Speichernr If Speichernr < 1 Then Speichernr = 20 If Speichernr > 20 Then Speichernr = 1 If Keycode = 13 Then Writeeeprom Speichernr , 0 Gosub Eeprom_lesen ___lcdno = 0 : Cursor Off Noblink ___lcdno = 1 : Cls Gosub Wartenauftastelosgelassen Return End If I = 150 * Speichernr : I = I -100 Readeeprom Modellname , I Modellname = Left(modellname , 10) Gosub Wartenauftastelosgelassen Goto Menue_wechsel2 '----------------------------------------------------------------------------- Menue_name: ___lcdno = 1 : Cls Locate 2 , 1 : Lcd "Name aendern zurueck" Gosub Zeile1 Cursor On Blink I = 1 : R = I + 7 : Locate 1 , R Jeti_text = Mid(modellname , I , 1) X = Asc(jeti_text) If X = 255 Then X = 65 Gosub Wartenauftastelosgelassen Taste_name: Gosub Wartenauftastendruck If Keycode = 0 Then Incr X If X = 58 Then X = 65 If X = 91 Then X = 97 If X = 33 Then X = 48 End If If Keycode = 4 Then Decr X If X = 96 Then X = 90 If X = 47 Then X = 32 End If Mid(modellname , I , 1) = Chr(x) R = I + 7 : Locate 1 , R Lcd Mid(modellname , I , 1) Locate 1 , R If Keycode < 5 Then Gosub Wartenauftastelosgelassen Goto Taste_name End If If Keycode = 5 Then Incr I : If I > 10 Then I = 1 If Keycode = 12 Then Decr I : If I < 1 Then I = 10 Jeti_text = Mid(modellname , I , 1) X = Asc(jeti_text) If X = 255 Then X = 65 R = I + 7 : Locate 1 , R If Keycode = 13 Then Modellname = Left(modellname , 10) I = 150 * Speichernr : I = I -100 : Writeeeprom Modellname , I Cursor Off Noblink ___lcdno = 1 : Cls Gosub Wartenauftastelosgelassen Jeti_text = "Transmitter TypeDuplex Tx >" Return End If Gosub Wartenauftastelosgelassen Goto Taste_name '----------------------------------------------------------------------------- Wartenauftastelosgelassen: Keycode = Getkbd() : If Keycode <> 16 Then Goto Wartenauftastelosgelassen Return Wartenauftastendruck: Keycode = Getkbd() : If Keycode = 16 Then Goto Wartenauftastendruck Return '--------------------------- EEprom Schreiben -------------------------------- Eeprom_schreiben: Writeeeprom Speichernr , 0 Modellname = Left(modellname , 10) I = 150 * Speichernr : I = I -100 Writeeeprom Modellname , I '100 I = I + 10 : Writeeeprom Trimm(1) , I '110 Incr I : Writeeeprom Trimm(2) , I '111 Incr I : Writeeeprom Trimm(3) , I '112 Incr I : Writeeeprom Trimm(4) , I '113 For X = 1 To Channels Incr I Writeeeprom Dualrate(x) , I '114-122 Next X For X = 1 To Channels '123-131 Incr I Writeeeprom Weg_rev_l(x) , I Next X For X = 1 To Channels Incr I Writeeeprom Weg_rev_r(x) , I '132-140 Next X For X = 1 To Channels Incr I Writeeeprom Geber(x) , I '141-149 Next X For X = 1 To Channels Incr I Writeeeprom Servonummer(x) , I '150-158 Next X For X = 1 To Channels Incr I Writeeeprom Woelb_l(x) , I '159-167 Next X For X = 1 To Channels Incr I Writeeeprom Woelb_r(x) , I '168-177 Next X For X = 1 To Channels Incr I Writeeeprom Flap_l(x) , I '178-186 Next X For X = 1 To Channels Incr I Writeeeprom Flap_r(x) , I '187-195 Next X For X = 1 To Channels Incr I Writeeeprom Butterfly_l(x) , I '196-204 Next X For X = 1 To Channels Incr I Writeeeprom Butterfly_r(x) , I '205-213 Next X Return '---------------------------- Modell spezifische Daten ----------------------- Eeprom_lesen: Readeeprom Speichernr , 0 : If Speichernr = 255 Then Speichernr = 1 I = 150 * Speichernr : I = I -100 Readeeprom Modellname , I Modellname = Left(modellname , 10) I = I + 10 : Readeeprom Trimm(1) , I : If Trimm(1) = 255 Then Trimm(1) = 125 Incr I : Readeeprom Trimm(2) , I : If Trimm(2) = 255 Then Trimm(2) = 125 Incr I : Readeeprom Trimm(3) , I : If Trimm(3) = 255 Then Trimm(3) = 125 Incr I : Readeeprom Trimm(4) , I : If Trimm(4) = 255 Then Trimm(4) = 125 For X = 1 To Channels Incr I Readeeprom Dualrate(x) , I : If Dualrate(x) = 255 Then Dualrate(x) = 100 Next X For X = 1 To Channels Incr I Readeeprom Weg_rev_l(x) , I : If Weg_rev_l(x) = 255 Then Weg_rev_l(x) = 225 Next X For X = 1 To Channels Incr I Readeeprom Weg_rev_r(x) , I : If Weg_rev_r(x) = 255 Then Weg_rev_r(x) = 225 Next X For X = 1 To Channels Incr I Readeeprom Geber(x) , I If Geber(x) < 1 Or Geber(x) > Channels Then Geber(x) = X Next X For X = 1 To Channels Incr I Readeeprom Servonummer(x) , I : If Servonummer(x) = 255 Then Servonummer(x) = X Next X For X = 1 To Channels Incr I Readeeprom Woelb_l(x) , I : If Woelb_l(x) = 255 Then Woelb_l(x) = 125 Next X For X = 1 To Channels Incr I Readeeprom Woelb_r(x) , I : If Woelb_r(x) = 255 Then Woelb_r(x) = 125 Next X For X = 1 To Channels Incr I Readeeprom Flap_l(x) , I : If Flap_l(x) = 255 Then Flap_l(x) = 125 Next X For X = 1 To Channels Incr I Readeeprom Flap_r(x) , I : If Flap_r(x) = 255 Then Flap_r(x) = 125 Next X For X = 1 To Channels Incr I Readeeprom Butterfly_l(x) , I : If Butterfly_l(x) = 255 Then Butterfly_l(x) = 125 Next X For X = 1 To Channels Incr I Readeeprom Butterfly_r(x) , I : If Butterfly_r(x) = 255 Then Butterfly_r(x) = 125 Next X Return '------------------------- Akku Spannung ------------------------------------ '------------------------- LCD Anzeige -------------------------------------- 'Anzeige: ' If Lcd_zeile > 2 Then ' ___lcdno = 1 'untere Displayhaelfte ' Lcd_zeile = Lcd_zeile - 2 ' Else ' ___lcdno = 0 'obere Displayhaelfte ' End If 'Locate Lcd_zeile , Lcd_spalte 'Return '--------------------------- Kalibrieren ----------------------------------- ' Die Variable Volt wird hier einfach zweckentfremdet Kalibrieren: Stop Timer2 Stop Timer1 ___lcdno = 1 : Cls For I = 1 To 6 Cls Lcd I Lcd " alt= " Lcd Kalibrierwert(i) Kalibrierwert(i) = Getadc(i) Lcd " neu= " Lcd Kalibrierwert(i) Lcd " " '################################################ Wait 1 'Tastenabfrage fehlt noch '################################################ X = I * 2 Writeeeprom Kalibrierwert(i) , X Next I '---------------------------- Geberauflösung ----------------------------------- ___lcdno = 0 : Cls 'Zeile 1 + 2 Lcd "Bereich anlernen" For I = 1 To 6 Cls ___lcdno = 0 R = I + 64 Locate 2 , 1 : Lcd "Geber " ; Chr(r) ; " in Endstellung" Wait 3 'Tastenabfrage fehlt noch ___lcdno = 1 Cls Verstaerkung(i) = Getadc(i) - Kalibrierwert(i) Verstaerkung(i) = 5000 / Verstaerkung(i) Verstaerkung(i) = Abs(verstaerkung(i)) Locate 1 , 1 : Lcd " Verstaerkung = " ; Verstaerkung(i) Locate 2 , 1 : Lcd "Ja speichern Nein" Wait 3 'Tastenabfrage fehlt noch Next I Writeeeprom Verstaerkung(1) , 14 Writeeeprom Verstaerkung(2) , 16 Writeeeprom Verstaerkung(3) , 18 Writeeeprom Verstaerkung(4) , 20 Writeeeprom Verstaerkung(5) , 22 Writeeeprom Verstaerkung(6) , 24 ___lcdno = 0 : Cls ___lcdno = 1 : Cls Start Timer2 Keycode = 16 Cls Return '---------------------------- GeberNamezuordnung --------------------------- Gebername: Funktion(1) = "Seite " Funktion(2) = "Hoehe " Funktion(3) = "Quer " Funktion(4) = "Gas " Funktion(5) = "Woelb " Funktion(6) = "Butterfly" Funktion(7) = "Bremse " Funktion(8) = "Sonder1 " Funktion(9) = "Sonder2 " Funktion(10) = "Sonder3 " Funktion(11) = "Gyro " Funktion(12) = "Gyro Hoeh" Funktion(13) = "Gyro Quer" Funktion(14) = "V-Leit " Funktion(15) = "Flap " Funktion(16) = "HoehePlus" Funktion(17) = "Festwert1" Funktion(18) = "Festwert2" Funktion(19) = "Festwert3" Funktion(20) = "Festwert4" Funktion(21) = "Festwert5" Funktion(22) = "Festwert6" Funktion(23) = "Festwert7" Funktion(24) = "Festwert8" Funktion(25) = "Festwert9" Funktion(26) = "Festwer10" Funktion(27) = "Festwer11" Funktion(28) = "Festwer12" Funktion(29) = "Festwer13" Funktion(30) = "--- " Return