Phänomen bei PIC12F675 - ich versteh es nicht!

OP #6332584
Lesenswert?

Hallo.
Ich verstehe meinen PIC12F675 nicht.
Nachfolgendes Programm soll mir nach dem Start eine knappe Sekunde 
später den Ausgang GPIO 1 einschalten und dann immer eingeschaltet 
lassen und natürlich immer den restlichen Code abarbeiten. Der restliche 
Code hatte soweit problemlos funktioniert, es geht NUR um GPIO 1.
Ich habe viele Code-Varianten versucht, um dies zu erreichen, sollte ja 
eigendlich auch nicht schwer sein. ABER: Egal was ich mache, eine 
Zustandsänderung (also steigende oder fallende Flanke) von GPIO 5 löscht 
mir GPIO 1. Habe auch schon einen anderen PIC versucht, die Messung auf 
dem Programmier-Board gemacht, anstatt auf der eigendlichen Hardware. Es 
ist immer gleich. Was zum Geier mache ich falsch???

Im Anhang auch das Problemkind.

Danke schonmal für eure Hilfe, Stefan
Angehängte Dateien:
Gast #6332725
Lesenswert?

Peter D. schrieb:
> Beim PIC immer das LAT-Register als Ausgang benutzen.

PIC 12F675/PIC12F629 haben kein LAT-Register

1.Grundsaetzlich gilt: bei Modifikationen von GPIOs mit 
aufeinanderfolgenden Befehlen,immer ein paar uS Zeit lassen(NOP=Befehle 
einfuegen)ansonsten kann es sein,dass der erste Befehl zwar den 
entsprechenden Pin high setzt,aber der physikalische High-Pegel am Pin 
moeglicherweise noch gar nicht erreicht ist,(wegen einer Kapazitaet 
z.B.)
Was genau passiert kann man unter "Read-Modify-Problemen im Datenblatt" 
nachlesen...
2.wie man ein Shadowregister (sGPIO im Anhang)benutzt siehe in 
beigefuegter Datei
===============etwas was man verstehen und beachten sollte....
3.When the PIC reads a port register, it doesn’t read the value in the 
“output latch” (i.e. the value you wrote to it).  Instead, it reads the 
pins themselves – the voltages present in the circuit.
==============
Angehängte Dateien:
#6332746
Lesenswert?

Auf dem Oszibild sieht man ja das die Pegel ansich ja lang genug gesetzt 
sind, sollte eigentlich keine 0 für PB1 kommen. Aber ich denke auch das 
Problem liegt an Read-Modify-Write. Ich kannte PIC bisher nicht, wie 
kommt man bitte auf die Idee Input/Output in der Art umzusetzen? Da 
braucht von außen ja nur irgendein Puls zu kommen damit Unerwartetes 
passiert. Shadowregister ist m.M. damit zwingend notwendig.
#6332815
Lesenswert?

Teo D. schrieb:
> Ansonsten: Aus Kostengründen!

Ich würde eher sagen, aus Gedankenlosigkeit. Sparen wird man nichts, das 
Latch ist ja vorhanden.
Beim 8051 gibt es auch keine extra Latchadresse, da wird automatisch bei 
RMW-Zugriffen aus dem Latch gelesen und bei allen anderen Lesezugriffen 
vom Eingang:
"Read-Modify-Write Feature
Some instructions that read a port read the latch and others read the 
pin. Read-modify-write instructions read the latch rather than the pin, 
and these instructions read a value, possibly change it, and then 
rewrite it to the latch."
OP #6333584
Lesenswert?

Vielen Dank für eure Hilfe!

Folgendes habe ich nach euren Anreungen geändert und nun geht es:

......
PAUSE255ms3
    call  PAUSE1ms
    decfsz   anz_schleifen,1
    goto    PAUSE255ms3
    bsf  GPIO,1
    nop
    nop
    movlw  D'7'
    movwf  CMCON

;*********************************************************************** 
***
; Hauptprogramm
;*********************************************************************** 
***

HAUPT                      ; Beginn des Hauptprogramms

; Batteriespannung messen
; ***********************
    movlw  B'00000001'            ; AD0 auswählen
    movwf  ADCON0
    movlw  D'6'              ; Für Wandler benötigte Pause machen
    movwf  schleife
    call  PAUSEE

...

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