'************************************************************************* '* MAX4358 Videokreuzschienen Steuerung * '* * '*-- Version V01c * '* - erste Version mit 2x8 LCD * '* - fürs Internet kommentiert * '************************************************************************* '************************************************************************* '*Allgemeine Definitionen '************************************************************************* $regfile = "M8def.dat" $crystal = 8000000 '************************************************************************* '* LCD-Einstellungen '************************************************************************* Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 Config Lcdbus = 4 Config Lcd = 40 * 2 Config Portd = &B1110_0000 ' Pin 5 - 2 output, Rest input 'PC2 ist drehschalter Masse 'PC1 ist Drucktaster 'PC3,4 ist auf/ab Config Portc = &B0000_0100 ' Pin 2 output, Rest input Taste Alias Pinc.1 Auf Alias Pinc.3 Ab Alias Pinc.4 'Pullups einschalten Portc = &B0111_1011 'Masse für Testbetrieb Config Portb = &B1111_1111 ' Pin 5 - 2 output, Rest input Ce Alias Portb.6 ' Update Alias Portb.7 ' Sclk Alias Portd.5 Din Alias Portd.6 Maxmode Alias Portd.7 ' Aout Alias Portd.2 'Rückmeldung, daß Addreese OK = 0 Deflcdchar 0 , 32 , 4 , 12 , 31 , 12 , 4 , 32 , 32 ' replace ? with number (0-7) '************************************************************************* '* Variable '************************************************************************* Dim A As String * 1 Dim I As Byte Dim B As Byte Dim 7bitdaten As Byte Dim Dummy As Word Dim Ausgang(16) As Byte Dim Outnr As Byte Dim Old_outnr As Byte Dim Innr As Byte Dim Old_innr As Byte Dim Lastauf As Bit Dim Lastab As Bit Dim Mab As Bit Dim Mauf As Bit Dim Mtaste As Bit Dim Quelle_ausgang As Bit Dim Wechsel As Bit '************************************************************************* ' Konstanten '************************************************************************* Const Max_addr = &B0000 '************************************************************************* '* Initialisierung: '************************************************************************* Cls Lcd "Init V1c" 'Sag Hallo zum Anwender Wait 1 'wart 1s daß man es lesen kann Gosub Init '************************************************************************* '* Hauptprogramm: '************************************************************************* Do Gosub Tastenschleife 'Drehschalter Abfrage If Wechsel = 1 Then Gosub Auf_ab 'wenn was passiert ist dann tu was Loop '************************************************************************* '* Auswertung '************************************************************************* Auf_ab: If Mtaste = 1 Then Toggle Quelle_ausgang 'Wenn Taste gedrückt, dann zwischen Quelle und Senke umschalten If Quelle_ausgang = 0 Then ' If Mab = 1 Then Outnr = Outnr -1 ' Senkenauswahl abwärts If Outnr < 1 Then Outnr = 16 If Mauf = 1 Then Outnr = Outnr + 1 ' Senkenauswahl aufwärts If Outnr > 16 Then Outnr = 1 If Old_outnr <> Outnr Then ' hat sich was geändert ? Old_outnr = Outnr ' aktualisieren und Gosub Lcd_ausgabe ' anzeigen End If Locate 2 , 8 Lcd " " ' Pfeil entfernen Locate 1 , 8 Else If Mab = 1 Then Innr = Innr -1 ' Quellenauswahl abwärts If Innr < 1 Then Innr = 32 If Mauf = 1 Then Innr = Innr + 1 ' Quellenauswahl aufwärts If Innr > 32 Then Innr = 1 If Old_innr <> Innr Then ' hat sich was getan ? Old_innr = Innr ' aktualisieren und Ausgang(outnr) = Innr ' anzeigen Writeeeprom Ausgang(outnr) , Outnr ' Änderung ab ins EEPROM Gosub 112bitausgabe ' An Chip schicken Gosub Lcd_ausgabe_2 ' anzeigen End If Locate 1 , 8 Lcd " " ' Pfeil entfernen Locate 2 , 8 End If ' Pfeil anzeigen Lcd Chr(0) If Mtaste = 1 Then Waitms 200 ' Taste entprellen Return '************************************************************************* '* LCD Ausgabe '************************************************************************* Lcd_ausgabe: Locate 1 , 6 If Outnr < 10 Then Lcd " " Lcd Outnr Lcd_ausgabe_2: Locate 2 , 6 If Ausgang(outnr) < 10 Then Lcd " " Lcd Ausgang(outnr) Innr = Ausgang(outnr) ' Zähler aktualisieren Old_innr = Innr ' Zähler aktualisieren Return '************************************************************************* '* Tastenschleife: '************************************************************************* Tastenschleife: ' Drehgeberauswertung Mtaste = 0 Mauf = 0 Mab = 0 Wechsel = 0 If Auf = 0 And Lastauf = 1 Then Lastauf = 0 Mauf = 1 Wechsel = 1 End If If Lastauf = 0 And Auf = 1 Then Lastauf = 1 End If If Ab = 0 And Lastab = 1 Then Lastab = 0 Mab = 1 Wechsel = 1 End If If Lastab = 0 And Ab = 1 Then Lastab = 1 End If If Taste = 0 Then Mtaste = 1 Wechsel = 1 End If If Wechsel = 1 Then Waitms 20 Return '************************************************************************* '* 112 Bit Ausgabe '************************************************************************* 112bitausgabe: Ce = 0 Update = 1 Maxmode = 1 For I = 16 To 1 Step -1 ' nacheinander alle Werte 7bitdaten = Ausgang(i) - 1 Shift 7bitdaten , Left , 1 Reset 7bitdaten.6 'Verstärkung =1 Set 7bitdaten.7 'Ausgang anschalten Shiftout Din , Sclk , 7bitdaten , 0 , 7 'MSB wenn Clk = 0 Next Update = 0 Maxmode = 1 Ce = 0 Return '************************************************************************* '* Initialisierung: '************************************************************************* Init: Ce = 0 Update = 0 Maxmode = 0 Lastab = 0 Lastauf = 0 Outnr = 1 For I = 1 To 16 Readeeprom Ausgang(i) , I Next Gosub 112bitausgabe Cls Home Lcd "OUT: " Locate 2 , 1 Lcd "IN: " Gosub Lcd_ausgabe Locate 1 , 8 Lcd Chr(0) Return '************************************************************************* '* Eepromdaten '************************************************************************* $eeprom Data 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 31 $data