Wie ein paar von euch schon wissen bin ich so gut wie fertig mit meinem Projekt, aber die letzten beiden Probleme bekomm ich einfach nicht gelöst.
1. Die Programme sollen solange ausgeführt werden bis der Befehl für ein anderes erfolg. (Siehe Wait_and_get Subroutine) Leider funktioniert das mit dem last_ir_command so nicht, warum weiß ich leider nicht.
2. "Programmr" soll nur die rote Led dauerhaft anschalten. (Portd.6)
Problem ist das der Port nicht einfach geschaltet werden kann, da der Timer0 für die RGB PWM ja im Hintergrund läuft.
Hier der Code:
Ich wäre euch sehr dankbar für eure Hilfe da ich mittlerweile echt dran verzweifelCode:$regfile = "m16def.dat" $framesize = 32 $swstack = 32 $hwstack = 40 $crystal = 16000000 $baud = 9600 Waitms 50 'Einschwingzeit '//////////Ports Konfigurieren\\\\\\\\\\ Config Porta = Output 'M1 Config Portc = Output 'M2 Config Portd.6 = Output 'RGB-Rot Config Portd.3 = Input 'TSOP Porta.4 = 1 'Enable1 active = low Portc.4 = 1 Enable1 Alias Porta.4 Enable2 Alias Portc.4 Portd.6 = 1 'RGB Led ausschalten Portc.7 = 1 Portc.6 = 1 '//////////Timer konfigurieren, Vorteiler auf 1\\\\\\\\\\ Config Timer0 = Timer , Prescale = 1 '//////////RC5 konfigurieren mit Timer 2\\\\\\\\\\ Config Rc5 = Pind.3 , Timer = 2 '/////////Sub Deklarieren\\\\\\\\\\\\\ Declare Sub Wait_and_get(byval Ms As Byte) '//////////Definiere den Interrupthandler\\\\\\\\\\ On Ovf0 Tim0_isr Enable Interrupts Enable Timer0 'Timer einschalten Dim R1 As Byte ' In diese Variablen muss man Dim G1 As Byte ' im Hauptprogram die gewünschten Dim B1 As Byte ' Ausgabewerte laden Dim Z As Word 'Zähler Dim Ri1 As Byte 'Hilfsregister Dim Gi1 As Byte Dim Bi1 As Byte '//////////Variablen für Hauptprogramm\\\\\\\\\\ Dim A As Byte 'Schleifenvariable RGBs Z = 0 G1 = 0 R1 = 0 B1 = 0 Dim I As Byte 'Schleifenvariable Lauflicht Dim I2 As Byte 'Schleifenvariable Lauflicht Dim I3 As Byte 'Schleifenvariable Lauflicht Dim Freilauf As Byte Dim Ir_address As Byte Dim Ir_command As Byte Dim Last_ir_command As Byte Last_ir_command = 0 Dim Programm As Byte 'Programmauswahl Programm = 0 'Erst nix machen 'EEPROM Variablen 'Dim R_save As Eram Byte 'Dim G_save As Eram Byte 'Dim B_save As Eram Byte Wait 1 '//////////Einstellungen\\\\\\\\\\ Freilauf = 20 'Lauflicht Freilaufzeit 'Normaldurchlauf = 2 'Anzahl der Standarddurchläufe '//////////Hauptprogramm <Start>\\\\\\\\\\ Waitms 200 Print "Starte Hauptprogramm" Do Call Wait_and_get(1) 'bisschen Däumchen drehen und warten bis was gedrückt wird ;) Loop '//////////Hauptprogramm <Ende>\\\\\\\\\\ 'Programm1: RGB LEDs Programm1: 'Rot For A = 0 To 254 R1 = R1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 R1 = R1 - 1 Waitms 1 Next 'Grün For A = 0 To 254 G1 = G1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 G1 = G1 - 1 Waitms 1 Next 'Blau For A = 0 To 254 B1 = B1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 B1 = B1 - 1 Waitms 1 Next 'Blau/Grün For A = 0 To 254 B1 = B1 + 1 G1 = G1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 B1 = B1 - 1 G1 = G1 - 1 Waitms 1 Next 'Blau/Rot For A = 0 To 254 B1 = B1 + 1 R1 = R1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 B1 = B1 - 1 R1 = R1 - 1 Waitms 1 Next 'Grün/Rot For A = 0 To 254 G1 = G1 + 1 R1 = R1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 G1 = G1 - 1 R1 = R1 - 1 Waitms 1 Next 'Grün/Rot/Blau For A = 0 To 254 G1 = G1 + 1 R1 = R1 + 1 B1 = B1 + 1 Waitms 1 Next Waitms 10 For A = 0 To 254 G1 = G1 - 1 R1 = R1 - 1 B1 = B1 - 1 Waitms 1 Next Return 'Programm2: Lauflicht Programm2: For I = 0 To 15 Porta = I Enable1 = 0 Waitms Freilauf Enable1 = 1 Next I For I = 0 To 11 Portc = I Enable2 = 0 Waitms Freilauf Enable2 = 1 Next I Call Wait_and_get(0) Return 'Programm3: Lauflicht2 Programm3: For I = 0 To 15 Porta = I Enable1 = 0 Waitms 10 Enable1 = 1 Next I For I = 0 To 11 Portc = I Enable2 = 0 Waitms 10 Enable2 = 1 Next I Call Wait_and_get(0) Return Programmr: 'R1 = 255 Disable Timer1 Portd.6 = 0 Waitms 100 Portd.6 = 1 Call Wait_and_get(0) 'R1 = 0 Return '/////////////////Funktion zum RC5 empfangen und warten\\\\\\\\\\\\\\\ Sub Wait_and_get(byval Ms As Byte) Getrc5(ir_address , Ir_command) 'Empfangen 'Wenn was empfangen dann reagieren If Ir_address <> 255 Then Ir_command = Ir_command And &B01111111 'Togglebit entfernen 'Hier die Codes an die Fernbedienung anpassen Print "IR Befehl: " + Str(ir_command) If Ir_command = 255 Then 'wenn nichts emfangen wird, Ir_command = Last_ir_command 'dann akt. Programm weiter Else 'ausführen If Ir_command = 17 Then Gosub Programm1 If Ir_command = 18 Then Gosub Programm2 If Ir_command = 19 Then Gosub Programm3 If Ir_command = 20 Then Gosub Programmr End If End If Waitms Ms 'warten End Sub '//////////Interupthandler Timer0 <Start>\\\\\\\\\\ Tim0_isr: If Z = 0 Then 'Gewünschte Ausgabewerte an Ri1 = R1 'Hilfsregister übergeben Gi1 = G1 Bi1 = B1 Z = 255 End If Z = Z - 1 'PWM Kanäle 'RGB LEDs If Ri1 > 0 Then Portd.6 = 0 Else Portd.6 = 1 End If Ri1 = Ri1 - 1 If Ri1 = 255 Then Ri1 = 0 If Gi1 > 0 Then Portc.7 = 0 Else Portc.7 = 1 End If Gi1 = Gi1 - 1 If Gi1 = 255 Then Gi1 = 0 If Bi1 > 0 Then Portc.6 = 0 Else Portc.6 = 1 End If Bi1 = Bi1 - 1 If Bi1 = 255 Then Bi1 = 0 Return '//////////Interupthandler Timer0 <Ende>\\\\\\\\\\![]()







Zitieren


Lesezeichen