mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16F873 GPIO-Problem


Autor: rem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin neu in der PIC Programierung und stehe vor einem Problem, das 
ich mir nicht erklären kann.
Ich programmiere einen PIC16F873 mit dem PICDEM 2 PLUS BOARD, ICD2, 
MPLAB und CCS C Compiler.

Wenn ich die GPIOs von Port B als Ausgänge setzen möchte, wird Pin 2 
gleichzeitig auf High geschaltet. Bei den anderen Pins passiert dies 
nicht.

Mein Code:
#device PIC16F873
#BYTE TRISB  = 0x86

void main ()
{
  TRISB &= ~(1<<1);
  TRISB &= ~(1<<2);
  TRISB &= ~(1<<3);
  while(1);
}

Disassambliert:
   000    3000     MOVLW 0
   001    008A     MOVWF 0xa
   002    2804     GOTO 0x4
   003    0000     NOP
                 #device PIC16F873
                 #BYTE TRISB  = 0x86
                 void main ()
                 {
   004    0184     CLRF 0x4
   005    301F     MOVLW 0x1f
   006    0583     ANDWF 0x3, F
   007    1683     BSF 0x3, 0x5
   008    141F     BSF 0x1f, 0
   009    149F     BSF 0x1f, 0x1
   00A    151F     BSF 0x1f, 0x2
   00B    119F     BCF 0x1f, 0x3
                   TRISB &= ~(1<<1);
   00C    1086     BCF 0x6, 0x1
                   TRISB &= ~(1<<2);
   00D    1106     BCF 0x6, 0x2
                   TRISB &= ~(1<<3);
   00E    1186     BCF 0x6, 0x3
                   while(1);
   00F    280F     GOTO 0xf
                }

Woran kann es liegen, dass Pin2 ganz anders reagiert? Auf dem Board sind 
die 3 Pins gleich verschaltet.

rem

Autor: _GastXIV (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Port Direction richtig?
Analog Modul abgeschaltet?
Komparatoren abgeschaltet

Autor: rem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was für ein analog modul und welche komparatoren meinst du?
die richtung der ports stimmt

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rem schrieb:
> Wenn ich die GPIOs von Port B als Ausgänge setzen möchte, wird Pin 2
> gleichzeitig auf High geschaltet.

Ja, das darf er tun, der PIC.
Zustand des Port Latch B ist nach Reset undefiniert, wie man
zweifelsfrei ebenso dem Datenblatt entnehmen könnte...

Abhilfe schafft, z.B. ein

  PORTB = 0;

vor Deiner TRISB Bitshifterei.


rem schrieb:
> #BYTE TRISB  = 0x86

Willst Du jetzt alle Register nochmals selber definieren?


rem schrieb:
>    008    141F     BSF 0x1f, 0
>    009    149F     BSF 0x1f, 0x1
>    00A    151F     BSF 0x1f, 0x2
>    00B    119F     BCF 0x1f, 0x3

cooler Compiler...
Dreht mal eben die default-Werte für die Analogkanäle...
Wenigstens erspart er Dir weitere Fragen zu RE0-2 ;)

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist die sog. In-Out-Falle sehr bekannt bei PIC16FXXX.

Diese wurde bei PIC18 durch den sog. Latch (LATA,LATB,...) behoben.

http://www.sprut.de/electronic/pic/fallen/fallen.html#inout

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> Das ist die sog. In-Out-Falle sehr bekannt bei PIC16FXXX.

Nö ;)

(
 Ich würde das auch prinzipiell niemals als "Falle" bezeichnet
 sehen wollen, allenfalls als Unkenntnis einer Read-Modify-Write
 Anweisung, die es schon seit Urzeiten in tausenden, anderen
 Controllern auch gibt...
)


Hier wurde einfach nur vergessen überhaupt etwas ins Latch zu schreiben:

rem schrieb:
> void main ()
> {
>   TRISB &= ~(1<<1);
>   TRISB &= ~(1<<2);
>   TRISB &= ~(1<<3);
>   while(1);
> }

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LAT und PORT gibt es auch bei neuen PIC12 und PIC16. Ich würde oderso 
einen neueren uC nehmen. Die sind schon einiges komfortabler geworden...

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin S. schrieb:
> LAT und PORT gibt es auch bei neuen PIC12 und PIC16.

PORT ja klaro.

LAT bei welchem PIC12 gibt's LAT? Ich glaub die PIC12 haben noch nicht 
mal PORT bei denen heißt das GPIO =)

Martin S. schrieb:
> neuen PIC12 und PIC16

Das nennt man Contradictio in adiecto und ist ein Stilmittel der 
deutschen Sprache...

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> Das ist die sog. In-Out-Falle sehr bekannt bei PIC16FXXX.
>
> Diese wurde bei PIC18 durch den sog. Latch (LATA,LATB,...) behoben.
>
> http://www.sprut.de/electronic/pic/fallen/fallen.html#inout

Nö.

Um das Read-Modify-Write-Problem zu haben müßte man ja erst mal ein 
Port-Register verändern. Das passiert hier aber gar nicht.

Autor: AS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> LAT bei welchem PIC12 gibt's LAT? Ich glaub die PIC12 haben noch nicht
> mal PORT bei denen heißt das GPIO =)

  12F1822

(die Spitzfindigkeit der internen Bitbreite lassen wir mal
außer acht. Du sprachst ja von "PIC12" ;-)

Und schau Dir bei der Kiste auch gleich mal den Rest an ;)
Abgesehen von den "Standards", die sowieso (...) jeder PIC
hat (COMP, ADC auf fast allen Pins, und, und, und...):

- shadow register (aka. "context saving")
- 16er stack mit over- und underflow
- DAC jetzt auch auf Pin; nicht wie die alter 16er "Leiter"
- on-board Temperatursensor
- data signal modulator
- capacitive sensing
- voltage reference mit multiplier
- ADDWFC, SUBWFB, ASRF, MOVLP, MOVLB
- MOVIW, MOVWI
- BRW
- und endlich: UART in nem 8 Pin package
  (da hatte Microchip lange ein Defizit...)

Und das für 0.78 US$, Listenpreis +5000, QFN, industrial

Noch Fragen? ;-)

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> Martin S. schrieb:
>> LAT und PORT gibt es auch bei neuen PIC12 und PIC16.
>
> PORT ja klaro.
>
> LAT bei welchem PIC12 gibt's LAT? Ich glaub die PIC12 haben noch nicht
> mal PORT bei denen heißt das GPIO =)
>
> Martin S. schrieb:
>> neuen PIC12 und PIC16
>
> Das nennt man Contradictio in adiecto und ist ein Stilmittel der
> deutschen Sprache...

Wie heißt es so schön, wenn man keine Ahnung hat, einfach mal die Fresse 
halten.

Wie schon erwähnt, hat der 12F1822 LAT und PORT.

Mit der letzten Aussage hat glaube ich niemand verstanden, was du damit 
ausdrücken wolltest...

PIC12 und PIC16 (die Neuen) sind sehr verwandt. Oder warum meinst du 
haben der 12F1822 und der 16F1823 das selbe Datenblatt?

Autor: rem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten!!

@AS: das mit PORTB=0 hat funktioniert. THX!!!! :)

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.