Hallo!
Du musst jedes LED nach Einschalten mit BSF PORTA,RAX auch mit BCF PORTA,RAX Ausschalten. Siehe dazu: http://rn-wissen.de/wiki/index.php?t...erste_Programm.
Hallo,
ich bin noch ziemlicher Anfänger in der PIC Controller Programmierung.
Mein Projekt ist ein Lauflicht welches 12 LED's ansteuern soll, mit einem 16F628A.
Dabei klappt das Grundsätzlich schon sehr gut, nur der Port A ist etwas komisch.
Plan ist das Ansteuren der LED's sequentiell, ich meine also die LED's nacheinander einschalten und dann von vorn beginnend nacheinander wieder ausschalten.
Dabei verwende ich folgenden Code für PortA
Dabei werden die LED's aber nicht nacheinander ein sondern immer eine an dann die nächste an, dabei geht aber die vorherige aus?Code:CLRF PORTA BANKSEL TRISA ; wählt PortA MOVLW b'10110100' ; MOVWF TRISA ; PORTA beschreiben BANKSEL PORTA ; wechselt PortA ; LED's nacheinander einschalten mit RA0 beginnen BSF PORTA,RA0 ; BSF S steht für Set setzt PortA0 auf 1 -> sonst BCF C steht für Clear würde den PortA auf 0 setzen call _delay_2s ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 BSF PORTA,RA1 ; setzt LED 2 call _delay_2s BSF PORTA,RA3 ; setzt LED 3 call _delay_2s BSF PORTA,RA6 ; setzt LED 4 call _delay_2s
Im Debugger zeigt der Code genau das gewünschte Verhalten, in der Realität aber leider nicht, hat jemand eine Idee?
Der Port B wird auf gleiche Weise angesteuert und klappt wunderbar.
Gruß Reiner
Hallo!
Du musst jedes LED nach Einschalten mit BSF PORTA,RAX auch mit BCF PORTA,RAX Ausschalten. Siehe dazu: http://rn-wissen.de/wiki/index.php?t...erste_Programm.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Was ist komisch?
Was macht PORTA denn konkret?
Bei "komischem" Verhalten schaue ich immer im Datenblatt des PIC nach, ob die Portpins irgendwelchen Peripheriemodulen zugeordent sein könnten. Im Fall von PortA könnte es vielleicht der Comparator sein. Es gibt im PIC16F628A Datenblatt ein Stück Beispielcode zur Initialisierung von PORTA mit Abschaltung der Comparatorfunktion der PORTA Pins.
Hier im RN gibt es einen alten Thread über diese und ähnliche PIC Fallen.
Hallo PICTure,
den gleichen Zweig für das ausschalten der LED's gibt es natürlich auch noch einmal als BCF Routinen.
Hier geht es aber darum das die LED's zuerst mal alle nacheinander eingeschaltet werden sollen. Im Code sollte das deutlich werden.
Im Debugger wird es auch genauso dargestellt, wenn der Code aber im Controller läuft, dann geht RA0 an, nächster Schritt RA1 geht an, aber im gleichen Moment geht RA0 aus, ohne das ein BCF für RA0 aufgerfuen wird, dann so weiter?
Ich hoffe so wird die Erklärung deutlicher.
Danke und Gruß Reiner
- - - Aktualisiert - - -
Hallo witkatz,
in der Antwort an PICture habe ich noch einmal erklärt was da seltsam ist.
Ansonsten ist mir bewußt das die Port's mehrfach Funktionen haben können. Die Comperatoren sind zuvor abgeschaltet. Ich habe deshalb auch nicht 0,1,2,3 genommen sondern 0,1,3,6. Da war ich mir sicherer das nicht andere Funktionen auf dem Ausgang stören.
Danke Gruß Reiner
Poste bitte den betreffenden Ausschnitt deiner Initialisierungssequenz, oder prüfe, ob CMCON wirklich auf 7 gesetzt wird.
Beim Setzen des Portpins werden die aktuellen Zustände aller(!) Pins des Ports gelesen und erneut gesetzt (read-modify-write). Es scheint, dass beim Setzen von RA1, RA0 als 0 zurückgelesen wird. Entweder sind die Pins RA0, RA1, RA3 immer noch über CMCON als Analogeingang konfiguriert oder so überlastet, dass die Spannung am Ausgangspin in die Knie geht bzw. nicht schnell genug ansteigt und als 0 detektiert wird.
Geändert von witkatz (23.01.2017 um 12:47 Uhr)
Hallo witkatz,
Danke für deine Antwort.
Ich denke das mit CMCON 7 wird es aber sein.
Da schau ich heute Abend mal rein.
Aber weshalb eigentlich 7 ich dachte nur die Pins 2 und 3 also RA3 und RA4 können auch als Comperator geschaltet werden?
Die habe ich deshalb nicht genutzt.
Das die Spannung zusammenbricht schließe ich eigentlich aus, weil alle anderen 8 Ausgänge von PortB an bleiben.
Gruß Reiner
Teilweise richtig, RA3 und RA4 können über CMCON als Comparatorausgang konfiguriert werden.
Bei RA0-RA3 ist aber der Analog-Input-Mode, den man für digitale Funktion ebenfalls per CMCON abschalten muss. Wenn die Pins als Comparatoreingänge konfiguriert sind, werden sie bei BSF digital als 0 zurückgelesen. Lese dir vielleicht etwas zu read-modify-write ein, zum Verständnis, wie BCF und BSF funktionieren. In dem Datenblatt findest du auch eine kurze Erklärung über die Funktion der Portpins in diesem Zusammenhang.
-> s. Kap. 5.3 I/O Programming Considerations
Geändert von witkatz (23.01.2017 um 14:55 Uhr)
Hallo witkatz,
vielen Dank für deine Hinweise.
Ich hatte zwar schon alles korrekt initialisiert
aber an der falschen Stelle, nämlich vor der Main RoutineCode:CLRF CCP1CON ;Turn CCP module off CCP1 auschalten, sonst leuchtet RB3 nicht ; 16F628 alle Comparatoreingänge auf Digital umschalten ; alles in der Bank 0 auf Digital umschalten BSF CMCON, CM0 BSF CMCON, CM1 BSF CMCON, CM2
Ist eben immer gut wenn man mal drüber spricht (schreibt).
Danke und Gruß Reiner
Lesezeichen