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!
Lesezeichen