Gast
#650125
Hallo zusammen,
ich habe ein Problem. Ich habe ein Programm für eine Feuerwehrsteuerung
geschrieben - Modellbau, Car System. Das Ganze funktioniert in meinem
STK500 Board auch einwandfrei. Wenn ich es aber nun mit meiner Platine
nutze will funkioniert es sind. Die internen Pullups sind ausgeschaltet.
Den Schaltplan meiner Platine habe ich mal als Dateianhang mit
beigefügt. Woran könnte das liegen ?
Zum Programm sei noch erwähnt, dass K... die Kontakte und S... die
Stoppstellen sind.
Würde mich sehr über Eure Hilfe freuen. Ich weiß echt nicht mehr weiter
...
Hier mal das komplette Programm:
------------------------------------------------------------------------
; Die Anschüsse:
; PA0 =
; PA1 =
; PA2 =
; PA3 =
; PA4 =
; PA5 =
; PA6 =
; PA7 =
; PB0 = Taster "Alarm"
; PB1 =
; PB2 =
; PB3 =
; PB4 =
; PB5 =
; PB6 =
; PB7 =
; PC0 = K1 - PC komplett Eingang
; PC1 = K2
; PC2 = K3
; PC3 = K4
; PC5 = K5
; PC6 = K6
; PC7 = K7
; PD0 = S1 PD komplett Ausgang
; PD1 = S2
; PD2 = S3
; PD3 = S4
; PD4 = S5
; PD5 = W1
; PD6 = W2
; PD7 = W3
.include "8515def.inc"
.def CntLoop1 = r17
.def CntLoop2 = r18
.def CntLoop3 = r19
.def Hugo = r20
ldi Hugo, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, Hugo
ldi Hugo, HIGH(RAMEND) ; HIGH-Byte der obersten
RAM-Adresse
out SPH, Hugo
; Festlegen der Ein- und Ausgänge:
ldi r16, 0b11111111
out DDRA, r16
ldi r16, 0b11111110 ; PB1 auf Eingang, der Rest auf Ausgang
out DDRB, r16
ldi r16, 0b00000000 ; Alle PC auf Eingang
out DDRC, r16
ldi r16, 0b11111111 ; Alle PD auf Ausgang
out DDRD, r16
; Alle Ausgänge ausschalten
ldi r16, 0b11111111
out PortD, r16
; Interne Pull Up´s
ldi r16, 0b11111111
out PortA, r16
ldi r16, 0b11111110
out PortB, r16
ldi r16, 0b00000000
out PortC, r16
Alarm: ; Nun beginnt das Hauptprogramm
sbic PINB, 0 ; Wird Taster "Alarm" betätigt, überspringe nächsten Befehl
rjmp Alarm
cbi PortD, 0 ; Stopstelle S1 ein - Fahrzeug bleibt stehen
cbi PortD, 1 ; Stopstelle S2 ein - Fahrzeug bleibt stehen
rcall Pause ; Rufe Unterporgramm "Pause" auf
cbi PortD, 2 ; Parkplatz 1 ein - Fahrzeug fährt los
Abfrage1:
sbic PINC, 5 ; Wird Reedkontakt K6 betätigt, überspringe nächsten Befehl
rjmp Abfrage1
sbi PortD, 2 ; Parkplatz 1 aus - Fahrzeug bleibt stehen
cbi PortD, 3 ; Parkplatz 2 ein - Fahrzeug fährt los
Abfrage2:
sbic PINC, 6 ; Wird Reedkontakt K7 betätigt, überspringe nächsten Befehl
rjmp Abfrage2
sbi PortD, 3 ; Parkplatz 2 aus - Fahrzeug bleibt stehen
cbi PortD, 4 ; Parkplatz 3 ein - Fahrzeug fährt los
Abfrage3:
sbic PINC, 7 ; Wird Reedkontakt K8 betätigt, überspringe nächsten Befehl
rjmp Abfrage3
sbi PortD, 4 ; Parkplatz 3 aus - Fahrzeug bleibt stehen
rcall Pause ; Rufe Unterprogramm "Pause" auf
sbi PortD, 0 ; Stopstelle S1 aus - Fahrzeug fährt wieder
sbi PortD, 1 ; Stopstelle S2 aus - Fahrzeuge fährt wieder
; Nun kehren die Fahrzeuge vom Einsatz zurück
rcall weiche
Abfrageweiche1:
sbic PINC, 4 ; Ist Reedkontakt K5 betätigt, überspringe nächsten Befehl
rjmp Abfrageweiche1
cbi PortD, 5 ; Weiche 1 auf Abzweig
rcall Weiche
Abfrageweiche2:
sbic PINC, 3 ; Ist Reedkontakt K4 betätigt, überspringe nächsten Befehl
rjmp Abfrageweiche2
sbi PortD, 5 ; Weiche 1 auf Gerade
cbi PortD, 6 ; Weiche 2 auf Abzweig
rcall Weiche
Abfrageweiche3:
sbic PINC, 2 ; Ist Reedkontakt K3 betätigt, überspringe nächsten Befehl
rjmp Abfrageweiche3
sbi PortD, 6 ; Weiche 2 auf Gerade
rjmp Alarm
; Unterprogramme
Pause:
Loop1:
inc CntLoop1
cpi CntLoop1, 255
brcc Loop2
rjmp Pause
Loop2:
inc CntLoop2
cpi CntLoop2, 255
brcc Loop3
rjmp Loop1
Loop3:
inc CntLoop3
cpi CntLoop3, 20
brcc EndLoop
clr CntLoop1
rjmp Pause
EndLoop:
clr CntLoop1
clr CntLoop2
clr CntLoop3
ret
; Unterprogramm Weiche
Weiche:
sbic PINC, 0
rjmp Weiche
cbi PortD, 7 ; Weiche auf Abzweigstellen
weichenpause:
sbic PINC, 1
rjmp weichenpause
sbi PortD, 7 ; Weiche auf Gerade stellen
ret
------------------------------------------------------------------------
-