Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > Hallo ihr Lieben, > > > > da ich für mein Programm allerlei "Schipsel" aus diesem Forum geklaut habe, möchte > > ich natürlich auch meinen Code zum Räubern hier vorstellen; evtl. kann ja jemand was > > davon brauchen :-) > > Der Vorverstärker hat auf der Front einen Ein-Taster, 4 Taster zum Auswählen der > > Quelle, einen Empfänger für die Ferbedienung, ein Motorpoti für die Lautstärke sowie > > ein Display. > > > > Gruß Siggi > > > > > > > > > > Dim LCD_Text(16) As Char > > Dim rc5_data As Word > > Dim a As Integer ' Merker Taste > > Dim b As Integer ' Merker Mute > > Dim Merker_Ein As Integer ' Merker Ein/Aus Zustand > > Dim minute, hour As Byte > > Dim sec, last_sec As Byte > > > > Dim DCF_Buffer(59) As Byte 'Buffer für einzelne DCF Bits > > Dim DCF_Mode As Byte 'Merker für jeweiligen DCF_Mode > > Dim CheckCounter As Byte 'Zähler für DCF Erkennung > > Dim BitCounter As Integer 'Zähler für DCF Datenarraybuffer > > Dim Firstflag As Byte 'Entscheidungsbit ob eine DCF 1 anliegt > > Dim dcf_durchlaufen As Byte 'Merker für Display Reset > > Dim DCF_minute As Byte 'DCF Data > > Dim DCF_hour As Byte 'DCF Data > > Dim freeCount As Integer 'Zähler DCF Parität > > > > Dim counter As Integer 'Zähler für Cursor-Position > > > > #define DCF_Port 40 > > #define Hell 27 > > > > > > Sub LCD_Reset() > > LCD_Init() > > LCD_ClearLCD() > > LCD_CursorOff() > > End Sub > > > > > > > > Sub Event_Ein_Aus() > > Port_WriteBit (Hell,1) > > Port_ToggleBit(20) > > If Merker_Ein= 0 Then Merker_Ein= 1 > > Else Merker_Ein= 0 > > End If > > LCD_ClearLCD() > > If Merker_Ein= 0 Then > > LCD_Text= "Aus..." > > Port_Write(PortC,255) > > AbsDelay(100) > > Port_WriteBit (Hell,0) > > Else > > LCD_Text= "Ein..." > > End If > > LCD_Locate(1,1) > > LCD_WriteText(LCD_Text) > > AbsDelay(1000) > > LCD_ClearLCD() > > If (a= 19) And Merker_Ein= 1 Then Event_Taste1() > > End If > > If (a= 17) And Merker_Ein= 1 Then Event_Taste2() > > End If > > If (a= 16) And Merker_Ein= 1 Then Event_Taste3() > > End If > > If (a= 18) And Merker_Ein= 1 Then Event_Taste4() > > End If > > End Sub > > > > > > > > Sub Taster_Beginn() > > Port_WriteBit (Hell,1) > > Port_Write(PortC,239) ' Kein Eingangsrelais, Mute EIN > > AbsDelay(400) > > LCD_ClearLCD() > > End Sub > > > > > > Sub Taster_End() > > LCD_Locate(1,1) > > LCD_WriteText(LCD_Text) > > AbsDelay(400) > > Port_ToggleBit(a) ' Auswhl Eingangsrelais > > AbsDelay(400) > > Port_ToggleBit(23) ' Mute AUS > > LCD_ClearLCD() > > Port_WriteBit (Hell,0) > > End Sub > > > > > > > > > > Sub Event_Taste1() > > Taster_Beginn() > > a= 19 > > LCD_Text= "DVD <-" > > Taster_End() > > End Sub > > > > > > Sub Event_Taste2() > > Taster_Beginn() > > a= 17 > > LCD_Text= "Fernseher <-" > > Taster_End() > > End Sub > > > > > > Sub Event_Taste3() > > Taster_Beginn() > > a= 16 > > LCD_Text= "Aux <-" > > Taster_End() > > End Sub > > > > > > Sub Event_Taste4() > > Taster_Beginn() > > a= 18 > > LCD_Text= "Quelle_4 <-" > > Taster_End() > > End Sub > > > > > > Sub Event_Lauter() > > Port_WriteBit (Hell,1) > > LCD_ClearLCD() > > LCD_Text= "Lauter" > > LCD_Locate(1,1) > > LCD_WriteText(LCD_Text) > > Do While (rc5_data= 13328 Or rc5_data= 15376) > > Port_ToggleBit(21) > > AbsDelay(200) > > Port_ToggleBit(21) > > AbsDelay(200) > > rc5_data = RC5_Read() > > End While > > AbsDelay(400) > > LCD_ClearLCD() > > Port_WriteBit (Hell,0) > > End Sub > > > > > > Sub Event_Leiser() > > Port_WriteBit (Hell,1) > > LCD_ClearLCD() > > LCD_Text= "Leiser" > > LCD_Locate(1,1) > > LCD_WriteText(LCD_Text) > > Do While (rc5_data= 13728 Or rc5_data= 15776) > > Port_ToggleBit(22) > > AbsDelay(200) > > Port_ToggleBit(22) > > AbsDelay(200) > > rc5_data = RC5_Read() > > End While > > AbsDelay(400) > > LCD_ClearLCD() > > Port_WriteBit (Hell,0) > > End Sub > > > > > > Sub Event_Mute() > > Port_WriteBit (Hell,1) > > Port_ToggleBit(23) > > LCD_ClearLCD() > > LCD_Text= "Mute..." > > LCD_Locate(1,1) > > LCD_WriteText(LCD_Text) > > AbsDelay(1000) > > Do While Port_ReadBit(0)= 1 And b= 1 > > rc5_data = RC5_Read() > > If rc5_data <> 0 Then > > If (rc5_data= 13325 Or rc5_data= 15373) Then b= 0 > > End If > > If (rc5_data= 13328 Or rc5_data= 15376) Then b= 0 > > End If > > If (rc5_data= 13728 Or rc5_data= 15776) Then b= 0 > > End If > > If (rc5_data= 13324 Or rc5_data= 15372) Then b= 0 > > End If > > End If > > AbsDelay(50) > > End While > > LCD_ClearLCD() > > AbsDelay(500) > > Port_ToggleBit(23) > > b= 1 > > Port_WriteBit (Hell,0) > > End Sub > > > > > > > > > > Sub RCF_Routine() 'INT Routine, welche alle 10ms angesprungen wird > > Dim irqcnt As Integer > > DCF_Start() 'einzelne DCF Routinen aufrufen, welche aber nur > > DCF_Puls() 'abhängig vom DCF-Mode ausgeführt werden > > DCF_Datastart() > > DCF_Collect() > > DCF_Calc() > > irqcnt = Irq_GetCount(INT_TIM2COMP) 'INT Abarbeitung bestätigen > > End Sub > > > > > > Sub DCF_Start() > > If DCF_Mode = 0 Then 'wenn DCF inaktiv check auf Uhrzeit > > If Clock_GetVal(2) = 4 And Clock_GetVal(1)= 58 Then > > DCF_Mode = 1 'Uhrzeit wird um 04:58 gestellt, dann wird DCF_Mode 1 > > CheckCounter = 0 > > End If > > End If > > End Sub > > > > Sub DCF_Puls() 'hier wird auf Vorhandensein eines DCF Signals geprüft > > If DCF_Mode = 1 Then > > If Port_ReadBit(DCF_Port)= 1 Then > > CheckCounter++ 'wenn Signal High Counter erhöhen > > Else > > CheckCounter = 0 'wenn nicht, Counter zurück setzen > > End If > > If CheckCounter = 3 Then 'wenn 3 mal (30ms) HIGH Signal > > DCF_Mode = 2 'dann wird auf DCF_Mode 2 geschaltet > > CheckCounter = 0 'Counter zurücksetzen für andere Routinen > > End If > > End If > > End Sub > > > > Sub DCF_Datastart() 'hier wird auf die lange Pause im DCF_Signal getriggert > > If DCF_Mode = 2 Then ' MODE2 bedeutet: Warten auf 59te Sekunde > > If Port_ReadBit(DCF_Port)= 0 Then > > CheckCounter++ 'wenn kein Signal (0) dann Counter erhöhen > > Else > > CheckCounter = 0 'sonst Counter zurück setzen > > End If > > If CheckCounter > 120 Then > > DCF_Mode = 3 'wenn Signal mindestens 1200ms auf Low > > CheckCounter = 0 'dann DCF_Mode 3 einschalten und Counter auf 0 > > End If > > End If > > End Sub > > > > Sub DCF_Collect() > > If DCF_Mode = 3 Then > > Port_WriteBit(52,Port_ReadBit(DCF_Port ) ) 'DCF Signal auf LED darstellen > > If Port_ReadBit(DCF_Port)= 1 Then 'Wenn wieder eine 1 kommt > > CheckCounter++ 'dann incr Counter und setze > > Firstflag = 1 'setze das Flag für ersten Impuls > > Else 'sonst wird der letzte Impuls nach Länge ausgewertet > > If Firstflag = 1 Then 'wenn tatsächlich ein Impuls vorhanden WAR > > If CheckCounter < 15 Then 'schauen ob kürzer als 15x10ms > > DCF_Buffer(BitCounter) = 0 'und in diesem Fall den Buffer mit 0 beschreiben > > CheckCounter = 0 > > Firstflag = 0 'Flag für vorhandenes DCF Signal löschen > > BitCounter++ 'Counter für Buffer Array incrementieren > > Else > > DCF_Buffer(BitCounter) = 1 'sonst BufferArray mit 1 beschreiben > > CheckCounter = 0 > > Firstflag = 0 'Flag für vorhandense DCF Signal löschen > > BitCounter++ 'Counter für Buffer Array incrementieren > > End If > > End If > > End If > > If BitCounter = 59 Then 'wenn 59 Bits gesammelt wurden > > DCF_Mode = 4 'DCF_Mode schalten auf Auswertung > > BitCounter = 0 'DCF Arraybufferzähler löschen > > End If > > End If > > End Sub > > > > Sub DCF_Calc() > > Dim a As Integer > > Dim ParMin As Integer > > Dim ParHour As Integer > > ParMin = 0 > > ParHour = 0 > > If DCF_Mode = 4 Then 'wenn DCF_Mode auf Auswertung > > 'in diesem Block werden aud den jeweiligen BufferBits die tatsächlichen > > 'Werte errechnet und in die DCF Uhrzeit Variablen geschoben > > DCF_minute = DCF_Buffer(21)*1 + DCF_Buffer(22)*2 + DCF_Buffer(23)*4 + DCF_Buffer(24)*8 > > +DCF_Buffer(25)*10 +DCF_Buffer(26)*20 +DCF_Buffer(27)*40 > > > > DCF_hour = DCF_Buffer(29)*1 + DCF_Buffer(30)*2 + DCF_Buffer(31)*4 + DCF_Buffer(32)*8 > > +DCF_Buffer(33)*10 +DCF_Buffer(34)*20 > > > > For freeCount = 21 To 27 'Parität für Minuten berechnen > > ParMin = ParMin Xor DCF_Buffer(freeCount) > > Next > > For freeCount = 29 To 34 'Parität für Stunden berechnen > > ParHour = ParHour Xor DCF_Buffer(freeCount) > > Next > > > > > > If ParMin = DCF_Buffer(28) And ParHour = DCF_Buffer(35) Then > > Do While 1 > > If Port_ReadBit(DCF_Port ) = 1 Then 'wenn Prüfung positiv war, dann wird die > > 'interne Uhr genau dann gestellt, wenn > > 'das DCF Signal auf 1 wechselt > > 'und dann die While Schleife verendet;-) > > Clock_SetTime(DCF_hour,DCF_minute,0,0 ) > > Exit > > End If > > End While > > DCF_Mode = 0 'DCF-Mode wird auf 0 gestellt > > Else > > DCF_Mode = 1 'sonst wird auf Mode 1 geschaltet (Check DCF Signal) > > End If > > End If > > End Sub > > > > > > Sub DCF_Abfrage() > > sec= Clock_GetVal(CLOCK_SEC) > > If sec <> last_sec Then > > LCD_ClearLCD() ' Clear display > > LCD_Locate(1,counter) ' Set LCD Cursor position > > LCD_Text= "*" > > LCD_WriteText(LCD_Text) ' Print string Line1 > > counter= counter + 1 > > LCD_Locate(2,1) > > LCD_Text= "DCF..." ' Set LCD Cursor position > > LCD_WriteText(LCD_Text) ' Print string Line1 > > If counter > 16 Then counter= 1 > > End If > > End If > > last_sec=sec > > dcf_durchlaufen= 1 > > If Clock_GetVal(1)= 01 Then ' Nach 3 Minuten DCF-Suche abbrechen > > DCF_Mode= 0 > > End If > > End Sub > > > > > > > > Sub Zeit_Anzeige() > > If dcf_durchlaufen= 1 Then > > LCD_ClearLCD() > > dcf_durchlaufen= 0 > > DCF_Mode = 0 > > End If > > sec= Clock_GetVal(CLOCK_SEC) > > If sec <> last_sec Then > > hour=Clock_GetVal(CLOCK_HOUR) > > minute=Clock_GetVal(CLOCK_MIN) > > If sec Mod 2 = 0 And Merker_Ein= 1 Then > > Str_Printf(LCD_Text, "%2d %02d", hour, minute) > > Else > > Str_Printf(LCD_Text, "%2d:%02d", hour, minute) > > End If > > LCD_Locate(1,6) > > LCD_WriteText(LCD_Text) > > last_sec= sec > > End If > > End Sub > > > > > > /*------------------------------------------------------------------------------ > > description: Hauptprogram > > ------------------------------------------------------------------------------*/ > > Sub main() > > Port_DataDir(PortC,255) ' Port C als Ausgänge > > Port_Write(PortC,255) ' Alle ausgeschaltet > > > > Port_DataDir(PortA,0) ' Port A als Eingänge > > Port_Write(PortA,255) ' PullUp für Eingang > > > > Port_DataDirBit (Hell,1) ' Port PD3, Ausgang für LCD-Beleuchtung > > Port_WriteBit (Hell,0) ' helle Beleuchtung auf Aus > > > > RC5_Init(7) ' Port PA7 für IR-Fernbedienung > > > > Merker_Ein= 0 ' Am Anfang: Gerät "Aus" > > b= 1 ' Merker "Mute" > > a= 19 ' Merker Eingangsrelais > > > > Clock_SetTime(14,57,30,00) > > last_sec=Clock_GetVal(CLOCK_SEC) > > LCD_Reset() > > > > Port_DataDirBit(DCF_Port,0 ) ' DCF Port als Eingang > > Port_WriteBit(DCF_Port,1 ) ' PullUp für Eingang > > DCF_Mode = 0 ' DCF Modus auf 0 (Grundeinstellung) > > BitCounter = 0 ' und weitere Grundwerte setzen > > Firstflag = 0 > > counter= 1 > > dcf_durchlaufen= 0 > > Irq_SetVect(INT_TIM2COMP,RCF_Routine) ' Int Routine definieren > > > > > > Do While True ' Schleife Hauptprogramm > > If DCF_Mode <> 0 Then DCF_Abfrage() > > Else > > Zeit_Anzeige() > > rc5_data = RC5_Read() > > If rc5_data <> 0 Then > > Msg_WriteWord(rc5_data) > > Msg_WriteChar(13) > > End If > > If (rc5_data= 13324 Or rc5_data= 15372 Or Port_ReadBit(4)= 0) Then Event_Ein_Aus() > > End If > > If (rc5_data= 13695 Or rc5_data= 15743 Or Port_ReadBit(3)= 0) And a<>19 And Merker_Ein= 1 Then Event_Taste1() > > End If > > If (rc5_data= 13359 Or rc5_data= 15407 Or Port_ReadBit(1)= 0) And a<>17 And Merker_Ein= 1 Then Event_Taste2() > > End If > > If (rc5_data= 13341 Or rc5_data= 15389 Or Port_ReadBit(0)= 0) And a<>16 And Merker_Ein= 1 Then Event_Taste3() > > End If > > If (rc5_data= 13368 Or rc5_data= 15416 Or Port_ReadBit(2)= 0) And a<>18 And Merker_Ein= 1 Then Event_Taste4() > > End If > > If (rc5_data= 13328 Or rc5_data= 15376) And Merker_Ein= 1 Then Event_Lauter() > > End If > > If (rc5_data= 13728 Or rc5_data= 15776) And Merker_Ein= 1 Then Event_Leiser() > > End If > > If (rc5_data= 13325 Or rc5_data= 15373) And Merker_Ein= 1 Then Event_Mute() > > End If > > End If > > End While > > End Sub > > > > > > ' EOF > > > > > > > Hi, mach doch ein ZIP-File daraus und lade in unter "Programm" hoch. >