PIC12F683 2 LED auf ON

OP #6939193
Lesenswert?

Hallo an alle,

ich habe zwar schon oft hier gelesen, aber jetzt habe ich ein Problem zu 
dem ich keine Antwort gefunden habe.
Der von mir benutzte PIC12F683 soll 2 LED naheinander einschalten, die 
dann aber auch aktiv bleiben sollen.
Ich kenne das vom 16F628A, da ist es kein Problem wenn ich z.B.
    BSF PORTB,RB1  ; LED1
    BSF PORTB,RB2  ; LED2
ausführe, dann wird eine LED nach der anderen auf ON gesetzt.
Das gleiche, denke ich tue ich beim 12F683 mit
    BSF GPIO, GP2
    BSF GPIO, GP5
aber das funktioniert nicht, ich kann GP5 nur auf ON setzen, wenn ich 
zuvor GP2 auf OFF setze?

Gibt es dafür eine Erklärung, ich habe keine.

Danke vorab, Gruß Reiner
Gast #6939199
Lesenswert?

Nein, ist .... sollte identisch sein.
Funst da nicht auch die Makroexpansion?! Wenn ja, sieh dir halt mal an 
was da dahinter steckt.
Evtl. sitzt Du da dem Read-Modivied-Error auf.
Das heißt die LED zieht den Pin auf Lowpegel und da erst mal der gesamte 
Port eingelesen wird, wird da auch eine null gelesen und auch wieder 
zurückgeschrieben. Die LED löscht sich quasi selbst.... Hast Du da evtl. 
keinen VRs an den LEDs?!
Gast #6939226
Lesenswert?

Könnte wie bereits beschrieben ein Konfigurationsproblem sein.
Überprüfe genau: Komparator abgeschaltet?
UND:
Wenn zwei bsf-Befehle unmittelbar hintereinander stehen kann es immer 
Probleme geben. (read-modify-write)
Durch kapazitive Belastung des Portpins dauert es ein wenig bis wirklich 
ein neuer Pegel anliegt. Ist der nächste Befehl schneller da, dann 
gibt's "Fehlfunktionen".
Teste einmal, 1 od. 2 "nop" zwischen den bsf-Befehlen. (So mach ich das 
fast immer.)
Einige "PIC-Fallen" sind bei sprut.de gut beschrieben:
https://www.sprut.de/electronic/pic/fallen/fallen.html
#6939307
Lesenswert?

Die beiden genannten PIC haben keine extra Adresse für das Output-Latch, 
d.h. Bitbefehle lesen erst den Eingang ein (von hinten durch die Brust 
ins Auge). Da das einen Zyklus dauert, ist der Wert bei aufeinander 
folgenden Befehlen veraltet, der erste Bitbefehl wird daher ignoriert.
Steht aber auch im Datenblatt:
"5.3.2 SUCCESSIVE OPERATIONS ON I/O PORTS
...
When in doubt, it is better to separate these instructions with a NOP or 
another instruction not accessing this I/O port."

Neuere PIC16/18 haben extra Output-Register, damit tritt das Problem 
nicht mehr auf.
Gast #6939448
Lesenswert?

Hallo an Alle und vielen Dank für die vielen Informationen.

Ich versuche mal alle Hinweise, soweit ich sie verstehe abzuarbeiten.
1. ANSEL wird im Startbereich ausgeführt, sollten also alle Ports auf 
Digital I/O stehen, ich kann die LED ja auch direkt einzeln schalten 
On/Timer/Off.

2. Komparator abgeschaltet? Kann ich nur beatworten wenn der Befehl 
dafür genannt wid, dann prüfe ich das. Ich denke ja.

3. Mit NOP zwischen den beiden Befehlen habe ich es noch nicht versucht, 
aber ich hatten schon eine Zeitschleife von 0.5 Sewkunden dazwischen, 
das ändert nichts. Kann sein das da NOP besser ist. Das Problem hatte 
ich aber beim 16F628 noch nicht. Da kann ich direkt, wie oben 
dargestellt, zwei oder mehr LED's nacheinander einschalten und der 
Status bleibt auch erhalten, bis der nächste BCF-Befehl für die LED 
kommt?

Leider kann ich erst heute Abend prüfen was ihr so geschrieben habt.
Wie würde denn der Befehl für(2.) aussehen?

Danke und Gruß Reiner
OP #6939492
Lesenswert?

Ja, vielen Dank bingo, wo es steht wüßte ich schon, habe es eben auch 
noch mal versucht zu lesen, aber mein Englisch ist nicht so toll, ich 
verstehe also eigentlich nur Bahnhof.
Könnte mir aber auch vorstellen das ich es in Deutsch eben so wenig 
verstehen würde.
Deshalb brauche ich die Infos für totale Blindgänger ;-).

Gruß Reiner
Gast #6939508
Lesenswert?

Teo hat auch schon gefragt wie stark der Ausgang für die LED belastet 
wird.
Bei zu hoher Last sinkt der Spannungspegel am Pin möglicherweise so weit 
ab, dass read-modify-write falsche Ergebnisse liefert!
Pin hat bei HI grösseren Innenwiderstand als bei LOW. Daher schalte ich 
LEDs meistens nach LOW=ON. Bei kleinen Betriebsspannungen (z.B. 3V) des 
PIC steigt der Innenwiderstand der Portpins stark an!
Gast #6939517
Lesenswert?

Reiner L. schrieb:
> Deshalb brauche ich die Infos für totale Blindgänger ;-).

benutze im PDF-Dokument mal die Suchfunktion und suche nach 'comparator 
off', wenn Du dann immer noch nicht durchblickst, melde Dich nochmal und 
erläutere, was Du da nicht verstehst.

Keine Angst, hier wird Dich geholfen (neue Version von hier wirst Du 
geholfen :) )
Gast #6939521
Lesenswert?

> Pin hat bei HI grösseren Innenwiderstand als bei LOW.

Das war bei vielen TTL im letzten Jahrtausend so.

Ein PIC hat komplementaere CMOS-Treiber am Ausgang.
Der kann LO genauso viel "sinken", wie HI "sourcen".
Schreib dir das auf, wenn du dir das nicht merken kannst.
OP #6939540
Lesenswert?

OK, ich vermute mal das dies die Info ist, die ich benötige:
Zitat Sprut ->
Damit ein Ausgangspin auch als Ausgangspin funktioniert, muss das 
zugehörige Bit im TRIS-Register des Ports auf 0 gesetzt werden.
Ich werde das also heute Abend mal prüfen.

Ich meine aber das ich im TRIS-Register alles auf 0 setze?

Danke dafür, Gruß Reiner
Gast #6939546
Lesenswert?

> Es muss nicht unbedingt sein, dass push-pull-Ausgänge bzgl.
> sink-source symmetrisch sein

Naja, mit steigenden Geschwindigkeiten ist das eher schon
ein unumgaenglices Erfordernis, wenn man impedanzkontrolliert
Teile von Schaltungen verbinden will.
Wie will man eine "Leitung" seriell richtig terminieren, wenn
der Ausgangstreiber je nach Logikpegel seine Quellimpedanz
aendert.
Gast #6939548
Lesenswert?

Cartman schrieb:
> Der kann LO genauso viel "sinken", wie HI "sourcen"

Ja, das ist richtig ABER:
Ich hab Datenblätter, die Grafiken enthalten und darin die Spannungen am 
Pin gegenüber der Strombelastung darstellen. Da gibt's eine f. HI u. 
eine f. LO und die zeigen unterschiedliche Spannungsverluste.
Besonders dann, wenn die Betriebsspannung klein ist.
Allerdings hab ich das niemals nachgemessen.
Gast #6939559
Lesenswert?

bei Sprut steht u.a. der Satz (12F675 und 12F683 sind da identisch)
; 12F675 alle Comparator-/ADC-Eingänge auf Digital umschalten

Im Datenblatt steht bei der Beschreibung von CMCON0:
111 = CIN pins are configured as I/O, COUT pin is configured as I/O, 
Comparator output disabled, Comparator off.

D.h. Du musst Bit 0-2 des CMCON0 auf 1 setzen.
Gast #6939595
Lesenswert?

Hans B. schrieb:
> Cartman schrieb:
>> Der kann LO genauso viel "sinken", wie HI "sourcen"

Nachtrag zu meinen möglicherweise missverstandenen Hinweisen zum 
Innenwiderstand der Portpins. Was gemeint war ist:
Auf der beiliegenden Grafik (bei 5V Betriebsspannung) kann man die 
typischen Pinspannungen bei Belastung entnehmen.
zB. HI mit 20 mA belastet:  ca. 3 V zu erwarten  (2V Spannungsverlust)
    LO mit 20 mA            ca. 0,5 V            (ca. 0,5V Verlust)

Wie man sehen kann wird bei 20mA HI der Logik-HI-Pegel möglicherweise 
nicht mehr erreicht. (5mA sollten immer OK sein)
bei 3 V Betriebsspannung sieht's noch deutlich schlechter aus.
Ob das bei allen PIC-Familien so ist hab ich nicht nachgesehen - da 
müsste man die die "alles" umfassenden Datenblätter ansehen.
(PICmicro Mid-Range MCU Family Reference Manual?)
Angehängte Dateien:
OP #6939918
Lesenswert?

Hallo, ich konnte jetzt meinen Code auf Eure Hinweise prüfen und bin der 
Meinung, der passt.

Um euch aber einen besseren Einblick zu geben, eine kurze Beschreibung, 
was soll das Projekt tun, gefolgt vom gesamten Code.

Es handelt sich um einen Öffner für Tore die mit einem Elektromagneten 
verriegelt sind.
Das hatte ich zuerst in konventioneller Elektronik umgesetzt, aber die 
Relais zicken ab und zu mal rum, deshalb sollten jetzt mehr 
elektronische Komponenten zum Einsatz kommen.

Also für die Logik der Microcontroller, die Relais werden durch LR7843 
oder soetwas ersetzt.

Ein Tastenfeld gibt nach Freigabe die 12V auf die Steuerung. Ein 
Spannungsregler stellt daraus die 5V bereit. Es gibt 2 LED Taster, für 
rechtes- und linkes Tor, die nach anliegen der 5V blinken sollen. Das 
betätigen eines Tasters soll dann über einen Optokoppler den jeweiligen 
LR7843 ansteuern und für ca. 5-6 Sekunden das Magnetschloss entriegeln.
Das betätigen des Tasters soll die jeweilige LED dann leuchten lassen 
und gleichzeitig die LED des Optokopplers ansteuern. Nach den 5-6 
Sekunden soll zumindest die LED des Optokopplers abfallen, die andere 
könnte weiter leuchten, weil nach ca 10 Sekunden das Nummernfeld den 
Strom weg nimmt.

Grundsätzlich funktioniert der Code so wie ich in jetzt erstellt habe.
Aktuell habe ich mir dahingehend geholfen, dass nach betätigen eines 
Tasters die zugehörige LED für ca. 1 Sekunde leuchtet und dann ausgeht, 
dann nach ca. 0,5 Sekunden die LED für den Optokoppler für die 5-6 
Sekunden angestuert wird, dansch wieder für 1 Sekunde die Taster LED 
leuchtet.
Ich hoffe ich konnte das einigermaßen verständlich schreiben.

Hier dann der vollständige Code für den PIC:
1
; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR
2
; PIC12F863 Configuration Bit Settings
3
;
4
; ::RL220105 - Opener for Transit Bike Garage:
5
;   bei Betätigung eines Tasters jeweils rechtes und linkes Tor
6
;   soll ein Relais und eine LED für ca. 5-6 Sek. angesprochen werden
7
;
8
; als Taktgeber wird der intern Takt von 4MHz genutzt, dazu __CONFIG _FOSC_INTOSCIO ....
9
; bei externen Takt __CONFIG _FOSC_XT ...... setzen
10
; Assembly source line config statements
11

12
; PIC12F683 Configuration Bit Settings
13

14
; Assembly source line config statements
15

16
#include "p12f683.inc"
17
;#include <p12F683.inc>  ;auch gültige Schreibweise
18
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF)
19
     
20
;Variablendefinition im Block 
21
CBLOCK 0x20
22
    d1
23
    d2
24
    d3
25
ENDC 
26

27
     org 0                ; Start at flash address 0
28
     
29
delay  res  1
30
counter  res  1
31
  
32
Start:
33
     bsf    STATUS,RP0    ; Select Registers at Bank 1
34
     movlw  0x70
35
     movwf  OSCCON        ; Set the internal clock speed to 8 Mhz
36
     movlw  0x07
37
     movwf  CMCON0        ; Turn off Comparator (GP0, GP1, GP2)
38
     clrf   ANSEL         ; Make all ports as digital I/O
39
     MOVLW b'00011000'    ; GP5=Out, GP4 und GP3=In, GP3 und GP2=Out, GP0=Out
40
     movwf  TRISIO        ; TRISIO = 0x38
41
     bcf    STATUS,RP0    ; Back to Registers at Bank 0
42

43
MainLoop:
44
     ;die LED's aus
45
     BCF GPIO, GP0
46
     BCF GPIO, GP1
47
     BCF GPIO, GP2
48
     BCF GPIO, GP5
49
     
50
     CALL BLINK
51
     
52
    goto   MainLoop      ; Goto MainLoop
53
     
54
BLINK   
55
    ;prüfen ob ein Taser gedrückt wurde?
56
    BTFSS GPIO, GP3    ;wenn GP3 offen = 0 (GP3 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen
57
    goto   NOTPRESS
58
    BTFSS GPIO, GP4    ;wenn GP4 offen = 0 (GP4 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen
59
    goto   NOTPRESS
60
    ;ab hier Blinkroutine ausführen
61
    BSF GPIO, GP1  ; BSF S steht für Set setzt GP1 auf 1  -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen
62
    call _delay_0_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 = ca. 1 Sekunde
63
    BCF GPIO, GP1     ; BCF S steht für Set setzt GP2 auf 0  -> schaltet den Port auf LOW
64
    ;
65
    BSF GPIO, GP2  ; BSF S steht für Set setzt GP1 auf 1  -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen
66
    call _delay_0_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1 = ca. 1 Sekunde
67
    BCF GPIO, GP2  ; BCF S steht für Set setzt GP1 auf 0  -> schaltet den Port auf LOW
68
    
69
    goto  BLINK
70
  
71
NOTPRESS
72
     btfss GPIO, GP3    ;wenn GP3 offen = 0 (GP3 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen
73
     call _SET_LEDS_GPR_ON ;dann das, schalte LED an GP2 für ca. 6 Sekunden an
74
     BCF GPIO, GP2     ; BCF S steht für Set setzt GP2 auf 0  -> schaltet den Port auf LOW
75
     
76
     btfss GPIO, GP4    ;wenn GP4 offen = 0 (GP4 liegt immer an 1, beim Betätigen geht er auf 0), dann nächste Zeile überspringen
77
     call _SET_LEDS_GPL_ON ;dann das, schalte LED an GP1 für ca. 6 Sekunden an
78
     BCF GPIO, GP1  ; BCF S steht für Set setzt GP1 auf 0  -> schaltet den Port auf LOW
79
     
80
     goto   NOTPRESS
81
     
82
;RL Functions     
83
_SET_LEDS_GPL_ON  ;Aktionen Links auslösen
84
    ;BANKSEL PORTB  ; wechselt PortB
85
    ; die gewünschte LED einschalten
86
    BSF GPIO, GP1  ; BSF S steht für Set setzt GP0 auf 1  -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen
87
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
88
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
89
    BCF GPIO, GP1  ; BCF S steht für Set setzt GP0 auf 0  -> schaltet den Port auf LOW
90
    BSF GPIO, GP0  ; BSF S steht für Set setzt GP1 auf 1  -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen
91
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
92
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
93
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
94
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
95
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
96
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
97
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
98
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
99
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
100
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
101
    ;BCF GPIO, GP0  ; BCF S steht für Set setzt GP0 auf 0  -> schaltet den Port auf LOW
102
    BCF GPIO, GP0  ; BCF S steht für Set setzt GP1 auf 0  -> schaltet den Port auf LOW
103
    BSF GPIO, GP1  ; BSF S steht für Set setzt GP0 auf 1  -> sonst BCF C steht für Clear würde den GP1 auf 0 setzen
104
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
105
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
106
    BCF GPIO, GP1  ; BCF S steht für Set setzt GP0 auf 0  -> schaltet den Port auf LOW
107
    goto   NOTPRESS     ; Loop NOTPRESS
108
     
109
_SET_LEDS_GPR_ON  ;Aktionen Links auslösen
110
    ;BANKSEL PORTB  ; wechselt PortB
111
    ; die gewünschte LED einschalten
112
    BSF GPIO, GP2  ; BSF S steht für Set setzt GP2 auf 1  -> sonst BCF C steht für Clear würde den GP2 auf 0 setzen
113
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
114
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
115
    BCF GPIO, GP2  ; BCF S steht für Set setzt GP0 auf 0  -> schaltet den Port auf LOW
116
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
117
    BSF GPIO, GP5  ; BSF S steht für Set setzt GP5 auf 1  -> sonst BCF C steht für Clear würde den GP2 auf 0 setzen
118
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
119
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
120
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
121
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
122
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
123
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
124
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
125
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
126
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
127
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
128
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
129
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay ca. 0,5 Sekunden
130
    BCF GPIO, GP5  ; BCF S steht für Set setzt GP5 auf 0  -> schaltet den Port auf LOW
131
    BSF GPIO, GP2  ; BSF S steht für Set setzt GP2 auf 1  -> sonst BCF C steht für Clear würde den GP2 auf 0 setzen
132
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
133
    call _delay_2s  ; ruft Wait Funktion auf, die Funktion ist unten definiert und wartet Dalay 1
134
    BCF GPIO, GP2  ; BCF S steht für Set setzt GP0 auf 0  -> schaltet den Port auf LOW
135
    goto   NOTPRESS     ; Loop NOTPRESS
136
    
137

138
    
139
;--------------------------------------------------------------------------- 
140
; Delay = 1 seconds
141
; Clock frequency = 4 MHz
142
; Actual delay = 1 seconds = 1000000 cycles
143
; Error = 0 %
144
_delay_2s
145
      ;999990 cycles
146
  movlw  0x07
147
  movwf  d1
148
  movlw  0x2F
149
  movwf  d2
150
  movlw  0x03
151
  movwf  d3
152
_delay_2s_0
153
  decfsz  d1, f
154
  goto  $+2
155
  decfsz  d2, f
156
  goto  $+2
157
  decfsz  d3, f
158
  goto  _delay_2s_0
159

160
      ;6 cycles
161
  goto  $+1
162
  goto  $+1
163
  goto  $+1
164

165
      ;4 cycles (including call)
166
  return
167

168
; Delay = 0.2 seconds
169
; Clock frequency = 4 MHz
170
; Actual delay = 0.2 seconds = 200000 cycles
171
; Error = 0 %
172
_delay_0_2s      ;199998 cycles
173
  movlw  0x3F
174
  movwf  d1
175
  movlw  0x9D
176
  movwf  d2
177
_delay_0_2s_0
178
  decfsz  d1, f
179
  goto  $+2
180
  decfsz  d2, f
181
  goto  _delay_0_2s_0
182

183
      ;2 cycles
184
  goto  $+1
185
  return
186
  
187
END
188
;EOF: Main.asm

Also wenn jemand noch mal Lust hat, ich hätte eben gern das die LED für 
den Optokoppler zeitgleich mit der Taster LED leuchtet.
Na dann, Danke und Gruß Reiner
Gast #6940046
Lesenswert?

Funktioniet dein Code wirklich irgendwie? Ich glaube nicht.
Nimm jetzt bitte einmal das Datenblatt, Seite 8, DATA MEMORY MAP OF
THE PIC12F683
z.B.
movwf  CMCON0        ; Turn off Comparator (GP0, GP1, GP2)
ABER es wurde wenige Zeilen vorher nach bank 1 umgeschaltet! CMCON0 
liegt aber in bank0. Siehe Seite 8. (Tatsächlich wird nach VRCON 
geschrieben!)
Komparator ist also noch EIN und die Pins sind blockert. Daher banksel 
CMCON0 vorher einfügen.
Irgendwo steht z.B. BANKSEL PORTB  Aber das git's nicht - sondern nur 
GPIO! siehe wieder Seite 8.
Der Code ist vorerst einmal auf weitere Fehler bei der Bankumschaltung 
genau zu prüfen und nachzubessern.
Gast #6940076
Lesenswert?

Möglicherweise ist aber alles ganz anders weil:
Im Eingangspost steht PIC 12F683
Im Code steht aber einmal PIC 12F863 und dann wieder xxxx683
Was ist jetzt richtig und welches Datenblatt ?
Oder ist es eine ganz andere Nummer?
OP #6940276
Lesenswert?

Vielen Dank für die vielen Antworten und für das bessere Optische 
aufbereiten des Code, wußte nicht was ich nutzen muss, damit es besser 
dargestellt wird, Sorry.

Aber hallo, nun bleibt mal entspannt, ja in der ersten Kommentar Zeile 
ist ein Schreibfehler, was für eine Verschwörung ;-), ich denke das 
sollte keinen Einfluss haben auf die Funktioinalität, bitte Hand heben 
wer anderer Meinung ist.

Aber halt da ist ja noch eine Zeile die komplett übel ist:
;BANKSEL PORTB  ; wechselt PortB
stimmt auch, aber auch das ist ein Kommentar.
Eine Zeile die aus einem anderen Code stammt der kopiert wurde.

Was Hans.B schreibt ist schon wirklich zu prüfen, Danke.
Da mach ich mir noch mal Gedanken drüber. Ich habe mir das Datnblatt 
angeshen. Leider verstehe ich nicht so Recht was genau da falsch ist. 
Super wäre eventuell eine Korrektur des Abschnitts.

Aber erst einmal schönen Abend noch und Gruß Reiner
Gast #6940927
Lesenswert?

Tipp:
Wenn man nicht sicher ist in welcher bank das Rgister ist dann kann man 
einfach vor jedem Zugriff auf ein Register eifügen:
"banksel REGISTERNAME"
(Dann erzeugt der Assembler einen passenden Code zur Bankfestlegung.)
Im Datenblatt Seite 31, "GPIO PORT" steht auch ein fertiger Code für die 
Konfiguration der Pins als digitale IN/OUT:

BANKSEL GPIO   ;
CLRF   GPIO   ;Init GPIO
MOVLW   07h   ;Set GP<2:0> to
MOVWF   CMCON0   ;digital I/O
BANKSEL ANSEL   ;
CLRF   ANSEL   ;digital I/O
MOVLW   0Ch   ;Set GP<3:2> as inputs
MOVWF   TRISIO   ;and set GP<5:4,1:0>
        ;as outputs

Schön, dass es jetzt funktioniert!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren