PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hirnblockade beim Kodierschalter auslesen



128er
22.06.2015, 19:40
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:


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

Searcher
22.06.2015, 21:00
Hoffentlich ist es was simples und ich hab den Wald vor lauter Bäumen nichtmehr gesehen . . .


Jtag abgeschaltet? Input 1 und 3 liegen nämlich bei Dir auf PortC.

Gruß
Searcher

128er
22.06.2015, 21:20
Alter Schwede, ich werde bekloppt. Vielen herzlichen Dank Searcher!

JTAG über Fusebits abgeschaltet und schon ist alles in Butter. Irgendwie war ich bisher damit noch nie konfrontiert.

DANKE!

Searcher
22.06.2015, 22:11
DANKE!
Aber gerne doch. Hätte ich mit meinen Tipps doch immer soviel Glück:pray:

Gutes Gelingen!
Searcher