PIC16F57 Initialiesierung

Gast #1390354
Lesenswert?

Hallo Forumgemeinde.

Ich habe da ein paar kleine Probleme mit dem PIC16F57 ... unzwar ist mir 
die Initialiesierung nicht so ganz einleuchtend ... habe vorher den 
PIC16F84A programmiert ... dies viel mir recht leicht aber bei diesem 
neuen PIC ???

zBsp.: will ich PORTA als Ausgang definieren und einfach nur eine LED an 
PORTA,0 an und wieder aus machen! im Datenblatt ist es doch so erklärt 
das es garkein echtes TRIS-Register mehr gibt oder ? Das Bänke rücken 
vom 16F84A sollte damit ja umgangen sein...

      movwf     B'00000000'
      tris      PORTA

Ist das bereits die Initialiesierung für PORTA

so dann:

m1    bsf       PORTA,0
      call      wait
      bcf       PORTA,0
      call      wait
      goto      m1

dadrunter halt die Warteschleife!!!

vill kann mir wer helfen ...

als Config habe ich:

      __CONFIG        _CP_OFF & _WDT_OFF & _XT_OSC


vielen dank im vorraus :)
Gast #1390373
Lesenswert?

Hallo danke für die schnell Antwort ...
Das dieser Pic in seinen möglichkeiten eingeschränkt ist habe ich im 
Datenballt gesehen...
Was genau ist der Stack nochmal ... da wo ich zwischen Ergebnisse 
speichere???

zum Beispiel den Wert eine Zählschleife ???

Ich Entschuldige mich schonmal für meine Unwissenheit :(
Gast #1390404
Lesenswert?

Der Stack ist nur für Unterprogramme interessant, da wird die 
Rücksprungadresse gespeichert. Hast du PortA ordnungsgemäß definiert? 
Wie sieht dein Wait aus? Poste am besten mal das Programm.
Die Initialisierung sieht übrigens so aus:

movlw    00H    ; dein movwf ist falsch, damit schreibst du W in Adresse 
0
tris     PORTA

Viel Erfolg.
Gast #1390408
Lesenswert?

Aber wie soll ich dann einen Wert speichern ???
Ich muss doch loop1, loop2 ,loop3 ein Speicherzelle im Ram vergeben, 
nehmen wir mal:

loop1   Equ     0x07
loop2   Equ     0x08
loop3  Equ  0x09

zum Beispiel:

Wait
  movlw  D'40'
  movwf  loop3

M3      movlw   D'250'
        movwf   loop2


M2      movlw   .110
        movwf   loop1

M1      nop
        nop
        nop
        nop
    nop
        nop
        decfsz  loop1,f
        goto    M1

        decfsz  loop2,f
        goto    M2

  decfsz  loop3,f
  goto    M3
        retlw   0

Das funktioniert aber ??? oder was
Naja das speicher ich ja auch im Ram oder ??
Persönliche Seite #1390425
Lesenswert?

retlw ohne call geht immer schief...
Am Ende brauchst du eine Hauptschleife, in der Art:

main    goto main

Der PIC lädt sonst den nächsten Befehl aus dem Flash, der nach deinem 
Code dort steht und da das nicht definiert ist, geht das auch schief.

Sicher das die RAm-Adressen 0x07 - 0x09 nicht schon durch Register 
belegt sind? Kommt mir etwas niedrig vor (ohne jetzt das Datenblatt 
gelesen zu haben)
Gast #1390438
Lesenswert?

Hm oben benutze ich ich call ... das mir schon klar das call ein aufruf 
eines unterprogrammes ist...

ja das kam mir auch komisch vor aber ich bin mir nicht sicher ob da noch 
schon andere Register drin sind...
Gast #1390440
Lesenswert?

Wait ist soweit ok, zumindest beim schnellen drüberschauen, aber warum 
springst du mit retlw zurück. Ist zwar nicht ganz falsch, aber unüblich.
Außerdem fängt der RAM erst bei 08H an, deine loop1 schreibst du in 
PortC, das kann nicht klappen.

So müsste es klappen...

PORTA   equ     0x05
loop1   Equ     0x08
loop2   Equ     0x09
loop3   Equ     0x0a
Gast #1390444
Lesenswert?

Hm ich bin noch auf arbeit ... fahr nach hause und melde mich von dort 
... ja hm wieso muss ich PORTA auch zuweissen das wird doch schon in der 
include gemacht???

Ja mit den Ram Adressen hast du recht ...

Ich danke nochmals für die schnell Hilfe :)
Gast #1390460
Lesenswert?

Hm ich nutze diese include Datei ich bezweifel das diese vollständig 
ist, da ich dort nichts von PORTC; PORTD; PORTE sehe die der 16F57 ja 
haben soll...

  LIST  p=16F57
; P16F5X.INC  Standard Header File, Version 4.00    Microchip 
Technology, Inc.
  NOLIST

; This header file defines configurations, registers, and other useful 
bits of
; information for the 16F5X microcontrollers.  These names are taken to 
match
; the data sheets as closely as possible.  The microcontrollers included
; in this file are:

;    16F59
;    16F57
;    16F54


; There is one group of symbols that is valid for all microcontrollers.
; Each microcontroller in this family also has its own section of 
special
; symbols.  Note that the processor must be selected before this file is
; included.  The processor may be selected the following ways:

;       1. Command line switch:
;       C:\ MPASM MYFILE.ASM /P16F54
;  C:\ MPASM MYFILE.ASM /P16F57
;  C:\ MPASM MYFILE.ASM /P16F59
;       2. LIST directive in the source file
;       LIST   P=16F54
;  LIST   P=16F57
;  LIST   P=16F59
;       3. Processor Type entry in the MPASM full-screen interface

;======================================================================= 
===
;
;     Revision History
;
;======================================================================= 
===

;Rev:   Date:   Reason:

;1.00  12/09/03 Initial release for the PIC16F54/F57
;1.10  05/28/04 Update to add PIC16F59

;======================================================================= 
===
;
;       Generic Definitions
;
;======================================================================= 
===

W                            EQU     H'0000'
F                            EQU     H'0001'

;----- Register Files 
-----------------------------------------------------

INDF                         EQU     H'0000'
TMR0                         EQU     H'0001'
PCL                          EQU     H'0002'
STATUS                       EQU     H'0003'
FSR                          EQU     H'0004'
PORTA                        EQU     H'0005'
PORTB                        EQU     H'0006'

;----- STATUS Bits 
--------------------------------------------------------

PA2                          EQU     H'0007'
PA1                          EQU     H'0006'
PA0                          EQU     H'0005'
NOT_TO                       EQU     H'0004'
NOT_PD                       EQU     H'0003'
Z                            EQU     H'0002'
DC                           EQU     H'0001'
C                            EQU     H'0000'

;----- OPTION Bits 
--------------------------------------------------------

T0CS                         EQU     H'0005'
T0SE                         EQU     H'0004'
PSA                          EQU     H'0003'
PS2                          EQU     H'0002'
PS1                          EQU     H'0001'
PS0                          EQU     H'0000'

;======================================================================= 
===
;
;       Processor-dependent Definitions
;
;======================================================================= 
===

        IFDEF __16F54
           __MAXRAM H'01F'
        ENDIF

;----------------------------------------------------------------------- 
---

        IFDEF __16F57
                                                ; Register Files
PORTC                     EQU     H'0007'
           __MAXRAM H'07F'
        ENDIF

;----------------------------------------------------------------------- 
---

        IFDEF __16F59
                                                ; Register Files
PORTC                     EQU     H'0007'
PORTD                     EQU     H'0008'
PORTE                     EQU     H'0009'
           __MAXRAM H'0FF'
        ENDIF

;======================================================================= 
===
;
;       Configuration Bits
;
;======================================================================= 
===


_CP_ON                       EQU     H'0FF7'
_CP_OFF                      EQU     H'0FFF'
_WDT_ON                      EQU     H'0FFF'
_WDT_OFF                     EQU     H'0FFB'
_LP_OSC                      EQU     H'0FFC'
_XT_OSC                      EQU     H'0FFD'
_HS_OSC                      EQU     H'0FFE'
_RC_OSC                      EQU     H'0FFF'





        LIST



Wei gesagt die Config sieht dann so aus:

        __CONFIG        _CP_OFF & _WDT_OFF & _XT_OSC

Ich hoffe das hilt dir ein wenig ... :) bin dann kurz weg.
Gast #1390782
Lesenswert?

Endweder du findest eine include-Datei nur für den 16F57, schmeißt aus 
deiner jetzigen alles sinnlose wie PortD, PortE etc raus oder 
verzichtest auf Include völlig und machst es so wie von mir oben 
beschrieben.


[picasm]

      __CONFIG        _CP_OFF & _WDT_OFF & _XT_OSC

list p=16F57

INDF            EQU     H'0000'
TMR0            EQU     H'0001'
PCL             EQU     H'0002'
STATUS          EQU     H'0003'
FSR             EQU     H'0004'
PORTA           EQU     H'0005'
PORTB           EQU     H'0006'

loop1           Equ     0x08
loop2           Equ     0x09
loop3           Equ     0x0a


        movlw     00H
        tris      PORTA
        tris      PORTB
        tris      PORTC

m1      bsf       PORTA,0
        call      wait
        bcf       PORTA,0
        call      wait
        goto      m1


Wait    movlw  D'40'
        movwf  loop3

M3      movlw   D'250'
        movwf   loop2


M2      movlw   .110
        movwf   loop1

M1      nop
        nop
        nop
        nop
        nop
        nop
        decfsz  loop1,f
        goto    M1

        decfsz  loop2,f
        goto    M2

        decfsz  loop3,f
        goto    M3
        return


end

[/picasm]

Ich habe hier kein Assembler oder so was zum testen, aber aus der kalten 
heraus würde ich sagen, mit obigen Programm blinkt die LED, 
vorausgesetzt natürlich, ich habe nicht noch irgendwo etwas übersehen.
Gast #1390993
Lesenswert?

OKay Jens ich werde es morgen mal probieren ... ich werds mal brennen...
Ja was will ich mit der Krücke ddas is ne gute Frage ... daraus wird nen 
LED CUBE der aus 5 mal 5 mal 5 Leds besteht und wo sich fast jede Led 
ansteuern lässt ...
Gast #1391002
Lesenswert?

>Ja was will ich mit der Krücke ddas is ne gute Frage ... daraus wird nen
>LED CUBE der aus 5 mal 5 mal 5 Leds besteht und wo sich fast jede Led
>ansteuern lässt ...

Hast du einen Schaltplan plus Programm dafür mit PIC16F57?
Falls nicht ist dieser PIC ja wohl ein Griff ins Klo.
Schau dich mal bei den PIC18F um. Das ist eher das was du
brauchst.
Gast #1391013
Lesenswert?

Der kleine reicht aber für meine Anwendung aus und ist exrem billig 70 
CENT  ... Dein PIc ist zwar ein supoer Gerät aber ich benötige die 
Funktionen nicht und kostet auch so um die 4-5 Euro

:)
Gast #1391015
Lesenswert?

Hm Ich denke das wird schon klappen ... ja SChaltplan steht fast und das 
Prgrammieren ist kein Problem sowie die Initialisierung hinhaut ... vill 
hast du da noch eine Aanregung für mich ... und es wird nicht von einem 
PIC gesteuert 5 Stück kommen zum Einsatz, die dann zusammen arbeiten...
Gast #1391044
Lesenswert?

Du bist aber optimistisch ;)

Das Ding hat:
Einen 8Bit Timer
2 Level Call Stack
2kB Flash
78 Byte RAM

Das Ding hat nicht:
I2C, SPI, UART per Hardware
Keine Interrupts.

Schaun wir mal wie weit du damit kommst.
Persönliche Seite #1391434
Lesenswert?

An deiner stelle würde ich mir das mit diesem PIC wirklich noch mal 
überlegen. Der 16F883 kostet bei Angelika 1,60. Bei 5 Stück wären das 
4,50 mehr. Alleine deine 125 LEDs werden schon einiges kosten (zumindest 
wenn du blaue nimmst), da fallen die paar Euro mehr nicht ins gewicht. 
Du sparst dir bei der programmierung allerdings eine Menge Ärger. 
Alleine mit zwei Stacklevels bist du schnell an der Grenze. Und 78 Byte 
RAM aufgeteilt auf vier Bänke ist auch nicht sehr programmierfreundlich. 
Mit dem 883 hättest du diese Anzahl Bytes scon in der 1. Bank und 
müsstest nicht immer Umschalten. Die 883 könnten sich dann auch über 
UART, SSP oder I2C unterhalten.

Aber probier es halt mit dem 57er. Kannst ja erst mal nur eine Ebene 5x5 
ansteuern und versuchen 2-3 verschiedene Lichtmuster darzustellen. Wenn 
dir das gelingt und du noch Reserven hast, dann könnte dein Würfel auch 
was werden. Ich würde mir allerdings einen so alten PIC nicht mehr antun 
(genausowenig wie den 16F84).

Gruß
Sven
Gast #1473714
Lesenswert?

pic16f84a der wird in der Berufschule eingesetzt deshalb

Und noch was

Autor: Jens A: (picler)
Datum: 27.08.2009 22:34
Angehängte Dateien:

    * LEDBlink_16F57.asm (804 Bytes, 9 Downloads) | Codeansicht

das program hat immer noch Bug kp wieso
kann mir einer da helfen ??????????????

THX im vorraus
Gast #1474022
Lesenswert?

Hallo Sascha,

im Programm LEDBlink_16F57.asm wird der Reset-Vector nicht 
berücksichtigt. Es ist beim 16F57 bei 0x7FF. An dieser Stelle muss ein 
Sprung zum Programmstart erfolgen. Siehe Programm in Anhang.

In /C:\Programme\Microchip\MPASM Suite\Template\Code/ gibt es Vorlagen 
für der einzelnen Prozessoren, in denen solche grundlegende Dinge schon 
drin sind.

Gruß
John
Angehängte Dateien:
Gast #1494441
Lesenswert?

HAllo
Könnte mir einer mit 18f45K20 helfen
ich kriege net den Interrup zum laufen
und bei Konfiguration
weil das nimmt er net an __CONFIG  _CP_OFF & _PWRTE_ON & _WDT_OFF &
 nur das nimmt er an _XT_OSC
Danke im vorraus
Gast #1494522
Lesenswert?

Habe es hinbekommen

Aber wegen  Konfiguration
weil das nimmt er net an __CONFIG  _CP_OFF & _PWRTE_ON & _WDT_OFF &
 nur das nimmt er an _XT_OSC
Danke im vorraus
wenn einer mir da weite hilft wäre cool
Gast #1494974
Lesenswert?

>das ist kann ich net kann mir einer sagen wie und wo kann ich mir das so
>duch lessen

Was ist das denn für eine Sprache?
Ich versuchs mal:

Du dich shiessen kugel runde durch kopf deiner?

>Ich habe Problem mit 16f737
>Konfiguration

Nicht nur damit!
Gast #1495015
Lesenswert?

Könnte mir einer helfen den Pic16f737 zum laufen  bringem
 mit Konfiguration
weil das will er net akzeptieren

  LIST  P=16F8737        ; Verwendeter PIC= PIC16F84a
  include <P16f737.INC>      ; Includefile for P16F84A

;**********************************************************************
;---------- Konfiguration ------------------------------
; bis 4 MHz: Power on Timer, no Watchdog, XT-Oscillator

     __CONFIG       _CP_OFF & _WDT_OFF & _XT_OSC
Gast #1495545
Lesenswert?

Wenn einer die suchen wird.
Hier hier sind die

PIC16f737

  include <P16f737.INC>      ; Includefile for P16F84A

;**********************************************************************
;---------- Konfiguration ------------------------------

__CONFIG _CONFIG1, _CP_OFF & _CCP2_RC1 & _DEBUG_ON & _VBOR_4_2 & 
_BOREN_0 & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC


__CONFIG _CONFIG2, _BORSEN_0 & _IESO_OFF & _FCMEN_OFF

;**********************************************************************
;STARTUP Startadresse
  ORG     0x000        ; Prozessor
  goto    Main        ; gehe zu
;---------- Interrupt ---------------------------------------
; Hier steht die Interrupt Service Routine
  ORG  0x0004
  goto  Interrupt        ; gehe zu Interrupt
;**********************************************************************


Main:
  bsf      STATUS, RP0        ; Setze in Register STATUS das Bit RP0 auf 
1
  movlw  B'00011110'        ; Speicher B'00011110' in das 
Arbeitsregister W
  movwf  TRISA          ; Kopiere Inhalt von W in das Register TRISA
  movlw  B'11100000'        ; Speicher B'00000000' in das 
Arbeitsregister W
  movwf  TRISB          ; Kopiere Inhalt von W in das Register TRISB
  movlw  B'00000000'        ; Speicher B'00000000' in das 
Arbeitsregister W
  movwf  TRISC          ; Kopiere Inhalt von W in das Register TRISB
  bcf     STATUS, RP0        ; Setze in Register STATUS das Bit RP0 auf 
0

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