www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 16F872 Initialisierung. Wie gehts richtig?


Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen,

Ich hab ein Problem mit meinem PIC16F872 und zwar will ich später ein
LCD ansteuern mit ihm aber erstmal will ich ihn ganz normal
Initialiesieren bzw. überhaupt zum laufen bekommen.

Also ich seh den Quarz am CLKOUT mit 4 MHz schwingen, und ich schalte
zum test alle 1,2 sekunden den PIN7 an PortB auf High und Low. aber es
passiert einfach nix an dem Pin.

Ich denke das ich irgentwas bei der Initialisierung vergessen habe.
Kann mir da vieleicht jmd auf die Sprünge helfen.

Status Bits sind wie Folgt eingestellt:

Oszillator XT
WDT Disabled
PWRT enabled
BOR Disabled
Code Protect OFF
Flsh Memory NOT written bei EEcon
High Voltage on MLCR for Programming


Vieleicht kann mir da jmd Helfen meine .asm file hab ich mal
angehangen

Gruss
Sebastian

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast ini auskommentiert!
;      org    00
;      goto  ini


der prozessort findelt also demnach dein programm nicht

du musst die beiden zeilen einkommenieren!

maddin

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-movwf  portb    ;Pin7 von Port B High
-call  L600    ;600ms Zeitschleife
-call  L600    ;600ms Zeitschleife
-clrf  portb    ;Pin7 von Port B Low
-call  L600    ;600ms Zeitschleife
-call  L600    ;600ms Zeitschleife


das sieht ja ganz nett aus, aber du kannst auch bist setzen mit

bsf         portb,7
bcf         portb,7

du kannst auch trisb direkt clearn

-clrw
-movwf  trisb    ;PortB auf Ausgang


clrf        trisb

beim  bankwechsel würde ich zur sicherheit auch immer das status bit 6
mit auf null setzen...

...und ich würde empfehlen im mplap unter den optionen deine tabs auf
4spaces zu stllen, da du ansonsten immer probleme beim drucken deiner
dateien haben wirst.. und auch so ist das für alle beteiligten
besser..

maddin

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach ja, was bei den tris registern immer schön übersichtlich ist:

movlw      b'00000100'      ;0 is output
movwf      trisb

so kannst du dir das etwas flexibler gestalten

portb,2 wäre demnach ein eingang.....

maddin

Autor: Karl-heinz Domnick (kalledom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Initialisierungs-Beispiele in Assembler für PIC16F677 gibt es unter:
http://www.domnick-elektronik.de/picasm.htm

Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hmm So sieht das Programm jetzt aus aber es funktioniert immer noch
nicht.

Ich hab extra nen Hexwert reingeschoben um die ausgänge auf High zu
legen und das nicht mit einem "bsf" Befehl gelöst weil wenn ich
mehrer ausgänge auf high schalten will dann ist das mit "bsf"
umständlicher

ich weiß echt nicht mehr woran das liegen könnte. Ich les mir mal diese
seite durch.

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

was mir noch so affällt:

ich kenne die :notation bei den labeln so nicht.

wenn ich ein label anlege dann mache ich das wie folgt:

         goto        label1


label1   movlw       h'AF'
         ...

wo hast du denn das programm her?

maddin

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...für den bankwechsel sind diese beiden makros wunderbar - nutze sie
auch seit jahren und bin immer auf der sicheren seite damit...


M_Bank0    macro
    bcf  STATUS,RP0  ; Bank 0
    bcf  STATUS,RP1
    endm

M_Bank1    macro
    bsf  STATUS,RP0  ; Bank 1
    bcf  STATUS,RP1
    endm
maddin

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze dafür die MPASM Direktive banksel.

banksel TRISA
banksel PORTA
etc.

Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ehm das Programm habe Ich selbst geschrieben. Das hat Bisher sehr gut
Funktioniert. Das letzte Programm was ich die letzten 3Wochen
geschrieben hab war das hier. Eine Software PWM um eine Rote, grüne und
blaue LED anzusteuern.


aber warum das mit dem PIC 16F872 nicht funktioniert ist mir ein rätsel
da ja sogar der Quarz anläuft und mit seinen 4 MHz fröhlich daher
schwingt

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt eigentlich der Simulator dazu?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der simulator findet das eigentlich alles richtig er stellt das trisB
register auf ausgang und macht alle 1,2s  den RB7 auf High und Low

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...vielleicht versteht dein programmer, welchen du da auch immer nutzt,
sich nicht mit dem pic...


einfach mal port b auf FF setzen und sonst nichts...wenn noch nichtmal
das passiert, dann scheint dein prog nicht dort zu landen wo es soll,
denn deine letzte version sollte eigentlich laufen...

hast du noch einen 2ten da, dann tausch doch mal - vielleicht ist er
durch statische aufladungen beschädigt worden...

gibt dein programmer eine rückmeldung wie viele bytes erfolgreich ins
flash des pics geschrieben wurden, oder ob überhaupt was geschrieben
werden konnte...?

maddin

Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also mit dem Programmer Habe einen ALL-11C2 Hat das brennen eines
PIC12F629 geklappt. Nur der PIC16F829 zickt irgentwie etwas rum. Selbst
bei dem neuen Programm (siehe Anhang) Schaltet er die PortB Eingänge
nicht auf High die 'RBPU' sind enabled.

Ich teste ma den Vorschlag nen andern Pic zunehmen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Mein Brenn Programm Meldet nur einen fehler wenn bei der
Übertragung etwas fehlgeschlagen sein sollte. Aber beim Pic brennen
passiert nix er meldet mir das alles geklappt hat. mhm Komisch ich
gucke mal weiter wenn jmd etwas ein fällt bitte bescheid sagen.

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...a moment, in deiner letzten version hast du die portb als eingang
definiert....

..

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ini:    bsf    status,5    ;Wechsel zu Bank1
      bcf    status,6
      movlw  b'00000000'    ;PortB 'IN' or 'OUT'
      movwf  trisb      ;1=IN     ;   0=OUT
      bcf    option_reg,7  ;Pull-UP PortB enable
      bcf    status,5    ;Wechsel zu Bank 0
      bcf    status,6

;      Pic Initialisierung Ende

start:    movlw h`ff`
                movwf PORTB
           goto   start
      call  L600      ;600ms Zeitschleife
      bsf    portb,6
      call  L600      ;600ms Zeitschleife
      call  L600      ;600ms Zeitschleife
      goto  start      ;Wieder zu start springen


versuchs mal damit....

und das problem mit deinen tabs schlägt sich hier gerade nieder... wie
du siehst..

maddin

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so,

und da ich davon ausgehe, das deine probleme auf den brenner in kombi
mit deinem pic erscheinen ab zum guru der pic programmer:

http://www.sprut.de/electronic/pic/brenner/index.htm

maddin

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja genau diese Tab Stopps wo muss denn was ändern damit das richtig
funktioniert ?

ich guck mal auf sprut

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur so als info Frage für mich. Kann es überhaupt am Brenner Liegen wenn
der Oszillator richtig mit seinen 4MHz schwingt ? also werden doch die
Config bits richtig gebrannt oder seh ich da was falsch ?

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das problem ist, das ich deinen brenner nicht kenne, deinen aufbau auch
nicht, und deine software zum brennen auch nicht.

ich nutze mplap zum programmieren und habe hier einen icd speziell für
diese typen, von mikrochip.

da ich aber in dieser diskussion festgestellt habe, das du schon ein
paar erfahrungen gemacht hast, und auch schon ein programm auf einem
anderen pic zum laufen bekommen hast - gehe ich mal davon aus, das du
in bezug auf die verwendung von pic-asm grundsätzlich schon zu wissen
scheinst was du tust - bis auf die paar schusselfehler.

ergo muss das problem woanders liegen. das kann bei einer solchen
hardware/software sache eben an vielen stellen liegen. und auch noch
dazwischen, deswegen würde ich versuchen alle fehler die dir einfallen
systematisch auszuklammern.

das fängt bei der betriebspannung an, geht über das tauschen zentraler
bauelemente, und endet beim einstecken des com port steckers in deinen
programmer.
selbiges gilt für die software. du kannst z.b software nehmen von der
du zu 100% weißt das sie funktioniert usw...

letztendlich kann dann irgentwann nur noch der fehler als essens
dessens übrig bleiben.

maddin

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.