www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Atmega8515


Autor: Sven Löffler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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


------------------------------------------------------------------------ 
-

Autor: Sven Löffler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch was... Wenns im STK500 einwandfrei funktioniert hat, muss es wohl 
ein Hardwarefehler sein ;)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieleicht hast du vergessen auf INT-RC Osci umzufusen.

Autor: Sven Löffler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Magnus Müller (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven Löffler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Sven Löffler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.