www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pic16f874-20l Porta Programmierung


Autor: Dominik Nunn (dominiknunn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe mich in diesem Forum angemeldet, da ich nicht mehr weiter
komme...
Habe bisher immer den Pic16F84A programmiert,da mir aber bei meinem
derzeitigen Projekt die Ports nicht reichen habe ich mir einen 16F874
besorgt.
Nun habe ich folgendes Problem: Der 16F874 hat einen doppel belegten
PORTA - analog/digital Eingänge und ich kann zwar den PortB als Eingang
programmieren(das habe ich bereits getestet) PORTA allerdings nicht.
Ich befürchte ich habe ein Fehler beim programmieren, genauer gesagt
beim umschalten der analogen Eingänge auf digitale Eingänge hier mal
mein "Test" Quell Code ganz simpel:


LIST p=16f874

#include <P16f874.INC>

__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC

org 0x00


BSF 03H,5
MOVLW b'0000000'
MOVWF 86h
BCF 03H,5


BSF      03h,5
BSF      ADCON1, PCFG3
BSF      ADCON1, PCFG2
BSF      ADCON1, PCFG1
BSF      ADCON1, PCFG0
BCF      03h,5

main

 MOVLW 01h
 MOVWF 06h


 BTFSS PORTA,0
 Goto main

 MOVLW 00h
 MOVWF 06h

 End

Die LED am Ausgang leuchtet und wie gesagt wenn ich den Port B als
Eingang programmiere kein Problem aber der PortA....

   würde mich sehr über eine Antwort freuen

                                        gruß Dominik

Autor: Champagner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache es doch genau so wie Beispiel 4-1 im Datenblatt auf Seite 41:

BCF   STATUS, RP0 ;
BCF   STATUS, RP1 ; Bank0
CLRF  PORTA       ; Initialize PORTA by
                  ; clearing output
                  ; data latches
BSF   STATUS, RP0 ; Select Bank 1
MOVLW 0x06        ; Configure all pins
MOVWF ADCON1      ; as digital inputs
MOVLW 0xCF        ; Value used to
                  ; initialize data
                  ; direction
MOVWF TRISA       ; Set RA<3:0> as inputs
                  ; RA<5:4> as outputs
                  ; TRISA<7:6>are always
                  ; read as '0'.

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, das ADCON1-Register ist hier der Unterschied zu den Prozessoren
ohne AD-Converter. Leider ist die default Einstellung so, dass man
Programme nicht direkt übernehmen kann.

Autor: Dominik Nunn (dominiknunn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann würde der Quelltext so aussehen:



LIST p=16f874

#include <P16f874.INC>

__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC


org 0x00

ZAEHL1  equ 0ch
ZAEHL2  equ 0dh



  BSF 03H,5
  MOVLW b'0000000'
  MOVWF 86h
  BCF 03H,5

BCF   STATUS, RP0 ;
BCF   STATUS, RP1 ; Bank0
CLRF  PORTA       ; Initialize PORTA by
                  ; clearing output
                  ; data latches
BSF   STATUS, RP0 ; Select Bank 1
MOVLW 0x06        ; Configure all pins
MOVWF ADCON1      ; as digital inputs
MOVLW 0xCF        ; Value used to
                  ; initialize data
                  ; direction
MOVWF TRISA


main

  BTFSS PORTA,0
  Goto main

  MOVLW b'0010001'
  MOVWF 06h
  call motor1


pause

loop1  decfsz ZAEHL1,1
    goto loop1
    decfsz ZAEHL2,1
    goto loop1
    return


motor1
  call pause
  call pause
  call pause
  movlw b'0000001'
  movwf 06h
  call pause
  call pause
  call pause
  movlw b'0010001'
  movwf 06h
  decfsz ZAEHL1,1
  goto motor1
  return




end

habs gerade getestet it does not work :-|

Autor: Dominik Nunn (dominiknunn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry sind noch ein paar Zeilen vom Zeiten testen dazwischen
gerutscht...

Autor: Uwe Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Variable liegen bei 0x0c und 0x0d, da sind aber noch SFR's. Der
RAM fängt erst bei 0x20 an.
Ausserdem must du das STATUS,RP0 Bit auch wieder löschen, sonst greift
du nicht auf den Port sondern auf TRISA zu.

Autor: Dominik Nunn (dominiknunn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry aber mit dem Ram steh ich grad voll auf´m Schlauch.
Das mit dem schließen ist klar aber mit dem Ram?
Kannst vielleicht mal ein beispiel posten?
thx gruß Domi

Autor: Beeblebrox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Ram soll heißen: Der 16f84 hat seinen Ram-Bereich (also die
frei benutzbaren Register) an anderer Stelle als der 16f874. Wenn Du
also die Variable Zaehl1 auf 0ch legst und Zaehl2 auf 0dh, dann liegen
die vielleicht beim 16f84 im Ram-Bereich, aber beim 16f874 im
Special-function-register Bereich. Leg einfach Zaehl1 auf 020h und
Zaehl2 auf 021h. Wo die Rambereiche sind steht irgendwo in den ersten
20 Seiten im Datenblatt.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau,

ZAEHL1  equ 0ch
ZAEHL2  equ 0dh

geht nicht, da das Register 0ch mit PIR1 und das Register 0dh mit PIR2
(siehe Datenblatt) belegt ist. Erst ab Register 20h darfst du eigene
Variablen definieren. D. h.

ZAEHL1  equ 20h
ZAEHL2  equ 21h

wäre die bessere Lösung. Probiers einfach aus! IM Datenblatt auf Seite
17 ist übrigens eine schöne Tabelle, die das verdeutlicht. Ab Register
20h fangen die "General Purpose Register" an, die du selbst belegen
darfst.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> geht nicht, da das Register 0ch mit PIR1 und das Register
> 0dh mit PIR2 (siehe Datenblatt) belegt ist.

Sofern du in Bank 0 bist.

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.