Hallo zusammen!
Ich habe ein kleines Projekt gebaut wo ich drei LED Module über Konstantstromtreiber ansteuere. Jedes Modul kann über einen externen digitalen Eingang angesteuert werden. Zusätzlich kann über Kodierschalter ausgewählt werden, ob nun jedes Modul einzeln ansteuerbar ist, oder ob man z.Bsp. über einen Eingang mehrere Module gleichzeitig einschalten kann.
Nun hatte ich den Code angefangen und wollte zuerstmal das Einlesen der Kodierschalter testen, anstatt alles auf einmal zu schreiben. Ich wollte mit den Schaltern erstmal nur die Helligkeit der LED Module ändern. Nun verzweifele ich aber schon mehrere Tage daran, dass nur der Kodierschalter für Eingang 2 richtig funktioniert. Die Kodierschalter für Eingang 1 und 3 werden irgendwie vollkommen falsch ausgewertet, obwohl die Codeblöcke praktisch die selben sind. Wenn ich am zweiten Kodierschalter drehe, wird auch das zweite Module mit jeder Stellung heller. Bei Kodierschalter 3 passiert garnichts und bei Nr. 2 spring die Helligkeit beliebig. Und so langsam bin ich etwas ratlos weil ich alles x-mal überprüft habe (Layout, Schaltplan, Code, Platine Anschluss der Kodierschalter). Nun bräuchte ich mal ein zweites paar Augen (oder ruhig auch mehr).
Hier zuerst einmal der Schaltplan:
http://fs1.directupload.net/images/150622/8j989etz.png
http://fs1.directupload.net/images/150622/uzj7rl3x.png
Hier ist der Code:
Code:$regfile = "m16def.dat" $crystal = 1000000 $hwstack = 10 $swstack = 10 $framesize = 10 Config Adc = Single , Prescaler = Auto , Reference = Avcc '#### EINGÄNGE DEFINIEREN FÜR KODIERSCHALTER I/O-FUNKTIONEN / PULLUPS AKTIVIEREN / ALIAS VERGEBEN ####' '#############################################################################' '### KODIERSCHALTER INPUT 1 / MODUL 1 ###' Config Pinc.0 = Input 'BCD1 Config Pinc.2 = Input 'BCD2 Config Pinc.3 = Input 'BCD4 Config Pinc.1 = Input 'BCD8 Portc.0 = 1 'Pullup aktivieren Portc.2 = 1 'Pullup aktivieren Portc.3 = 1 'Pullup aktivieren Portc.1 = 1 'Pullup aktivieren In1bcd1 Alias Pinc.2 'Alias vergeben In1bcd2 Alias Pinc.0 'Alias vergeben In1bcd4 Alias Pinc.3 'Alias vergeben In1bcd8 Alias Pinc.1 'Alias Vergeben Dim Funktin1 As Byte 'Bytevariable, Eingelesen wird der Zustand des Kodierschalters für Input 1 '### KODIERSCHALTER INPUT 2 / MODUL 2 ###' Config Pina.4 = Input 'BCD1 Config Pina.6 = Input 'BCD2 Config Pina.5 = Input 'BCD4 Config Pina.7 = Input 'BCD8 Porta.4 = 1 'Pullup aktivieren Porta.6 = 1 'Pullup aktivieren Porta.5 = 1 'Pullup aktivieren Porta.7 = 1 'Pullup aktivieren In2bcd1 Alias Pina.4 'Alias vergeben In2bcd2 Alias Pina.6 'Alias vergeben In2bcd4 Alias Pina.5 'Alias vergeben In2bcd8 Alias Pina.7 'Alias vergeben Dim Funktin2 As Byte 'Bytevariable, Eingelesen wird der Zustand des Kodierschalters für Input 2 '### KODIERSCHALTER INPUT 3 / MODUL 3 ###' Config Pinc.4 = Input 'BCD1 Config Pinc.6 = Input 'BCD2 Config Pinc.7 = Input 'BCD4 Config Pinc.5 = Input 'BCD8 Portc.4 = 1 'Pullup aktivieren Portc.6 = 1 'Pullup aktivieren Portc.7 = 1 'Pullup aktivieren Portc.5 = 1 'Pullup aktivieren In3bcd1 Alias Pinc.4 'Alias vergeben In3bcd2 Alias Pinc.6 'Alias vergeben In3bcd4 Alias Pinc.7 'Alias vergeben In3bcd8 Alias Pinc.5 'Alias vergeben Dim Funktin3 As Byte 'Bytevariable, Eingelesen wird der Zustand des Kodierschalters für Input 3 '#### TIMER KONFIGURIEREN FÜR PWM AUSGÄNGE / VARIABLEN DEFINIEREN ####' '#####################################################################' Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 'OC1A = PWM Signal Modul 2 'OC1B = PWM Signal Modul 1 Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 8 'OC2 = PWM Signal Modul 3 Dim Ai1 As Word Dim Ai2 As Word Dim Ai3 As Word Ai1 = Getadc(0) Ai2 = Getadc(1) Ai3 = Getadc(2) '#### STATUSABFRAGE VON LED TREIBERN DEFINIEREN ####' '######################################## ' Config Pinb.3 = Input 'Status, LED Treiber Modul 1 Config Pinb.4 = Input 'Status, LED Treiber Modul 2 Config Pinb.2 = Input 'Status, LED Treiber Modul 3 Statusmod1 Alias Pinb.3 'Statusbit Treiber Modul 1 Statusmod2 Alias Pinb.4 'Statusbit Treiber Modul 2 Statusmod3 Alias Pinb.2 'Statusbit Treiber Modul 3 '#### MODULEINGÄNGE DEFINIEREN ####' '##################################' 'Digitaleingang Modul 1 Config Pind.0 = Input 'Digitaleingang Modul 2 Config Pind.1 = Input 'Digitaleingang Modul 3 Config Pind.2 = Input Modul1in Alias Pind.0 Modul2in Alias Pind.1 Modul3in Alias Pind.2 Enable Interrupts Start Adc '###################################################################################################' '###################################################################################################' '############################################# - - - - PROGRAMM - - - - ######################################' '###################################################################################################' '###################################################################################################' Funktin1 = &B00000000 'Zustandsvariable für Kodierschalter 1 initialisieren/rücksetzen Funktin2 = &B00000000 'Zustandsvariable für Kodierschalter 2 initialisieren/rücksetzen Funktin3 = &B00000000 'Zustandsvariable für Kodierschalter 3 initialisieren/rücksetzen Do '#### ZUSTAND DES KODIERSCHALTERS FÜR INPUT 1 IN VARIABLE EINLESEN ####' '#####################################################################' Select Case In1bcd1 'SET/RESET Bit 0 in Zustandsvariable Funktin1 Case 1 : Reset Funktin1.0 Case 0 : Set Funktin1.0 End Select Select Case In1bcd2 'SET/RESET Bit 1 in Zustandsvariable Funktin1 Case 1 : Reset Funktin1.1 Case 0 : Set Funktin1.1 End Select Select Case In1bcd4 'SET/RESET Bit 2 in Zustandsvariable Funktin1 Case 1 : Reset Funktin1.2 Case 0 : Set Funktin1.2 End Select 'SET/RESET Bit 3 in Zustandsvariable Funktin1 Select Case In1bcd8 Case 1 : Reset Funktin1.3 Case 0 : Set Funktin1.3 End Select '#### ZUSTAND DES KODIERSCHALTERS FÜR INPUT 2 IN VARIABLE EINLESEN ####' '#####################################################################' Select Case In2bcd1 'SET/RESET Bit 0 in Zustandsvariable Funktin2 Case 0 : Reset Funktin2.0 Case 1 : Set Funktin2.0 End Select Select Case In2bcd2 'SET/RESET Bit 1 in Zustandsvariable Funktin2 Case 0 : Reset Funktin2.1 Case 1 : Set Funktin2.1 End Select Select Case In2bcd4 'SET/RESET Bit 2 in Zustandsvariable Funktin2 Case 0 : Reset Funktin2.2 Case 1 : Set Funktin2.2 End Select 'SET/RESET Bit 3 in Zustandsvariable Funktin2 Select Case In2bcd8 Case 0 : Reset Funktin2.3 Case 1 : Set Funktin2.3 End Select '#### ZUSTAND DES KODIERSCHALTER FÜR INPUT 3 IN VARIABLE EINLESEN ####' '#####################################################################' Select Case In3bcd1 'SET/RESET Bit 0 in Zustandsvariable Funktin3 Case 0 : Reset Funktin3.0 Case 1 : Set Funktin3.0 End Select Select Case In3bcd2 'SET/RESET Bit 1 in Zustandsvariable Funktin3 Case 0 : Reset Funktin3.1 Case 1 : Set Funktin3.1 End Select Select Case In3bcd4 'SET/RESET Bit 2 in Zustandsvariable Funktin3 Case 0 : Reset Funktin3.2 Case 1 : Set Funktin3.2 End Select 'SET/RESET Bit 3 in Zustandsvariable Funktin3 Select Case In3bcd8 Case 0 : Reset Funktin3.3 Case 1 : Set Funktin3.3 End Select '################################ TEST DER EINZELNEN MODULE ############################', '########################### HELLIGKEIT MIT KODIERSCHALTER ÄNDERN ######################' '#######################################################################################' Select Case Funktin1 Case &B00001111 : Ocr1b = 250 Case &B00001110 : Ocr1b = 240 Case &B00001101 : Ocr1b = 230 Case &B00001100 : Ocr1b = 220 Case &B00001011 : Ocr1b = 210 Case &B00001010 : Ocr1b = 200 Case &B00001001 : Ocr1b = 190 Case &B00001000 : Ocr1b = 180 Case &B00000111 : Ocr1b = 170 Case &B00000110 : Ocr1b = 160 End Select Select Case Funktin2 Case &B00001111 : Ocr1a = 250 Case &B00001110 : Ocr1a = 240 Case &B00001101 : Ocr1a = 230 Case &B00001100 : Ocr1a = 220 Case &B00001011 : Ocr1a = 210 Case &B00001010 : Ocr1a = 200 Case &B00001001 : Ocr1a = 190 Case &B00001000 : Ocr1a = 180 Case &B00000111 : Ocr1a = 170 Case &B00000110 : Ocr1a = 160 End Select Select Case Funktin3 Case &B00001111 : Ocr2 = 250 Case &B00001110 : Ocr2 = 240 Case &B00001101 : Ocr2 = 230 Case &B00001100 : Ocr2 = 220 Case &B00001011 : Ocr2 = 210 Case &B00001010 : Ocr2 = 200 Case &B00001001 : Ocr2 = 190 Case &B00001000 : Ocr2 = 180 Case &B00000111 : Ocr2 = 170 Case &B00000110 : Ocr2 = 160 End Select Loop
Hoffentlich ist es was simples und ich hab den Wald vor lauter Bäumen nichtmehr gesehen . . .
Danke für eure Hilfe!







Zitieren

Lesezeichen