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
------------------------------------------------------------------------
-
Irgendwie klappt das mit dem Hochladen der Datei nicht. ich habe die Grafik des Schaltplans mal auf meinen Webspace gestellt: http://www.mikromodelle.de/bilder/Feuerwehrsteuerung.jpg
1. Was genau funktioniert bei deiner Platine nicht? Rührt sich da gar nix? 2. Poste Deinen Code mal als Anhang und OHNE ALL DIE UNNÖTIGEN LEERZEILEN !!! So wie du den Code hier geposted hast kann man ihn sich ja unmöglich ansehen... :( Gruß, Magnetus [Edit] Das mit dem Anhängen funktioniert schon. Du darfst nur nicht den Fehler machen, nach der Definition des Dateianhanges auf "Vorschau" zu klicken... dann isser nämlich weg. By the way... @Andreas Schwarz: Könntest du diesen Bug nicht mal beheben?
Noch was... Wenns im STK500 einwandfrei funktioniert hat, muss es wohl ein Hardwarefehler sein ;)
Hallo zusammen, Nach dem Einschalten leuchten ganz kurz S1 und S2 auf, sofort danach kommt S3 und S1 und S2 gehen aus. Das ist schon falsch. Normalerweise darf garnichts eingeschaltet werden. Erst nach betätigen des Taster "Alarm" dürfen S1, S2 und ca. 5 Sek. später S3 angehen .... Ich kann mir eigentlich auch nur vorstellen, dass es irgendwie mit der Hardware zusammen hängt. Die vielen Leerzeilen bitte ich zu entschuldigen. Ich habe das komplette Programm nochmal in eine zusammengepackte Textdatei als Anhang beigefügt. Auf INT-RC Osci habe ich gestellt.
> Ich kann mir eigentlich auch nur vorstellen, dass es irgendwie mit der > Hardware zusammen hängt. Das vermute ich auch. > Die vielen Leerzeilen bitte ich zu entschuldigen. Ich habe das komplette > Programm nochmal in eine zusammengepackte Textdatei als Anhang > beigefügt. Uuaaaaah (schauder) das kann man ja immer noch nicht lesen... Ich hab den Code mal ein klein wenig bearbeitet (nur Leerzeilen rausgenommen und die Formatierung verbessert - Code ist unverändert) und nochmal angehängt. Vielleicht finden sich dann auch andere Forenteilnehmer, die sich (wenn nötig) den Code ansehen und kommentieren können. Ich selbst hab mir Assembler noch nicht angetan ;) Ich werde gerade noch mal einen flüchtigen Blick auf die Schaltung werfen... Bis denne, Magnetus
Der Fehler liegt wohl sowohl an der Hard- als auch an der Software. Deine "Meldeeingänge" (PB0 und PC0...PC7) sind vermutlich mit Reedkontakten verbunden. Die Leitungen zwischen Controller und Reed gehen bestimmt über lange Strecken quer über eine EMV-verseuchte Modellbahnanlage. Die Internen PullUps hast du (warum eigentlich?) nicht aktiviert und externe PullUps hast du auch nicht drangehängt. In diesem Falle wären bestimmt auch kleine Kondensatoren (~22nF ?) zwischen den Eingängen und GND angebracht. Du kannst vorerst mal versuchen, die PullUps für deine Eingänge zu aktivieren und uns dann mitteilen ob es was gebracht hat. Gruß, Magnetus
Hallo Magnetus, die Schaltung ist nur für kleine Module 70 x 50 cm gedacht. Geschaltet wird über Reedkontakte, richtig. Die Leitungen sind max. 20 cm lang. Ich denke mal das ist noch im vertretbaren Rahmen. Zum Testen habe ich es aber direkt an der Platine probiert. Also ohne Reedkontakte. Externe PullUps habe ich doch eingebaut. Das sind die 10 kOhm im Mittleren Teil des Schaltplans. Daher habe ich auch die internen PullUps ausgeschaltet.
> aber direkt an der Platine probiert. Also ohne Reedkontakte. Externe > PullUps habe ich doch eingebaut. Das sind die 10 kOhm im Mittleren Teil > des Schaltplans. Daher habe ich auch die internen PullUps ausgeschaltet. Quatsch mit Soße... Die 10k sind Längswiderstände und keine PullUps. Die 10K müssen nach VCC (+5V) geschaltet werden. Muss jetzt ins Bett.... die Regierung ruft grins
Wollte euch nur kurz berichten, dass alles funktioniert. Erstmal habe ich die internen PullUps eingeschaltet. Der größe Fehler war aber, dass ich die Ausgänge falsch geschaltet habe. Da ich mit Transistoren arbeite, muß ich die Ausgänge Ausschalten um eine Funktion zuschalten. Naja, Hauptsache es funktioniert ! Vielen Dank nochmal für eure Hilfe ! :o) Viele Grüße Sven
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.