Fehler im Programm Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
|
|
|
BID = 444756
Peo Gesprächig
  
Beiträge: 181 Wohnort: Baden-W.
|
|
Hallo,
ich habe ein Programm geschrieben, um mit einem PIC 12F508 durch das Betätigen eines Tasters zwei Relais abwechselnd zu schalten, um damit einen Weichenantrieb zu steuern.
Leider "spinnt" der PIC nach jedem 4. Schaltvorgang, da er plötzlich beide LED und beide Relais anschaltet.
Den Schaltplan habe ich angefügt. Der Wechselstrom kommt vom Trafo, die 5 V von einem 9 V Block über einen 78L05.
Ich habe den Fehler im Code nicht gefunden. Kann mir vielleicht jemand helfen?
Danke im Voraus
Peo
| Code : |
list p=12F508 ; list directive to define processor
#include <p12F508.inc> ; processor specific variable definitions
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
temp EQU 0x07 ;example variable definition
;**********************************************************************
ORG 0x1FF ; processor reset vector
start
; Variablen festlegen ab 10h
cblock 0x10
loops
loops2
Flags
endc
#define Tastendruck Flags,0
#define RelaisL GPIO,0
#define RelaisR GPIO,1
; #define LEDT GPIO,2
#define LEDL GPIO,5
#define LEDR GPIO,4
;*******************************************************
; Beginn des Programmcodes
org 0x0000
movwf OSCCAL ; Oszillator kalibrieren
movlw b'11011111'
OPTION
movlw b'00001100' ; GP2 und GP3 werden INPUT PINS
tris GPIO
; bcf CMCON0,CMPON ; Comparator off nur bei 10F204/206
bcf RelaisL
bcf RelaisR
HAUPT
btfsc GPIO,2
goto RICHTUNG ; Fragt ab, in welche Richtung die Weiche zu stellen ist
call HAUPT
RICHTUNG
btfss Flags,0 ;Wenn die LEDs für ausgeschaltet sind, wird die Weiche
goto NACHRECHTS ;nach rechts gestellt, ansonsten
goto NACHLINKS ;nach links
NACHRECHTS
bsf Tastendruck
bsf RelaisR ;RElais für rechts wird geschlossen
bsf LEDR ;LED für rechts wird geschlossen
call WAIT
call WAIT
call WAIT
call WAIT
call WAIT
call WAIT
bcf RelaisR ;Releis für rechts wird geöffnet
bcf LEDL ;LED für links wird ausgeschaltet
goto HAUPT
NACHLINKS
bcf Tastendruck
bsf RelaisL ;RElais für links wird geschlossen
bsf LEDL ;LED für links wird geschlossen
call WAIT
call WAIT
call WAIT
call WAIT
call WAIT
call WAIT
bcf RelaisL ;Releis für links wird geöffnet
bcf LEDR ;LED für rechts wird ausgeschaltet
goto HAUPT
WAIT
movlw .150
movwf loops
top movlw .250
movwf loops2
top2 nop
decfsz loops2, F
goto top2
decfsz loops, F
goto top
retlw .0
end
|
|
[ Diese Nachricht wurde geändert von: Peo am 21 Jul 2007 22:16 ]
[ Diese Nachricht wurde geändert von: Peo am 21 Jul 2007 22:17 ]
[ Diese Nachricht wurde geändert von: Peo am 21 Jul 2007 22:18 ] |
|
BID = 444760
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Als erstes solltest du mal einen keramischen oder Folienkondensator von etwa 100nF direkt an den GND und +5V Pins des Prozessors anschliessen.
Dann ist der Taster falsch angeschlossen!
Der Pullup-Widerstand gehört zwischen I/O-Pin und +5V und der Schalter schliesst die Spannung dann nach Masse kurz.
Programmtechnisch solltest du dann die Abfrage umdrehen.
Evtl. kannst du auf den Pullup-Widerstand verzichten, aber dann musst du dafür sorgen, daß eine "1" im zugehörigen Datenlatch steht.
Das hier:
Zitat :
|
btfsc GPIO,2
goto RICHTUNG ; Fragt ab, in welche Richtung die Weiche zu stellen ist
call HAUPT
| ist auch falsch. Du musst die Hauptschleife mit GOTO abschliessen. Mit dem Call ohne zugehörigen Return produzierst du einen Stacküberlauf.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
[ Diese Nachricht wurde geändert von: perl am 22 Jul 2007 0:00 ] |
|
BID = 444761
Mr.Ed Moderator
      
Beiträge: 36334 Wohnort: Recklinghausen
|
Und Freilaufdioden könnten auch nicht schaden.
_________________
-=MR.ED=-
Anfragen bitte ins Forum, nicht per PM, Mail ICQ o.ä. So haben alle was davon und alle können helfen. Entsprechende Anfragen werden ignoriert.
Für Schäden und Folgeschäden an Geräten und/oder Personen übernehme ich keine Haftung.
Die Sicherheits- sowie die VDE Vorschriften sind zu beachten, im Zweifelsfalle grundsätzlich einen Fachmann fragen bzw. die Arbeiten von einer Fachfirma ausführen lassen.
|
BID = 444814
Peo Gesprächig
  
Beiträge: 181 Wohnort: Baden-W.
|
Danke für die Hinweise. Das mit dem GOTO habe ich übersehen.
Den Anschluss des Tasters werde ich umdrehen.
Die Freilaufdiode ist im Relais integriert. Das hatte ich vergessen, zu erwähnen.
mfg
Peo
|
BID = 445387
ffeichtinger Schreibmaschine
    
Beiträge: 1050 Wohnort: Traunkirchen im Salzkammergut
|
Hallo
Wenn du ohnehin nur Weichen schalten willst, kannst du auch DC nehmen, und dir die Relais sparen.
_________________
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 9 Beiträge im Durchschnitt pro Tag heute wurden bisher 17 Beiträge verfasst © x sparkkelsputz Besucher : 191174543 Heute : 24481 Gestern : 29142 Online : 767 13.4.2026 16:26 84 Besucher in den letzten 60 Sekunden alle 0.71 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.160863876343
|