mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 16f84A Hängt oder so


Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab da ein problem mit dem 16f84a.

ich habe gerade erst angefangen zu programmieren und habe es so weit 
gebracht das ich einen brenner5 und eine testplatine aufgebaut habe.

weiterhin habe ich es vollbracht ein programm in MPLAB IDE v7.51 zu 
schreiben es dort funktionstüchtig und ohne auftretende fehler zu 
simulieren (ca 1h dauerlauf)

dieses programm habe ich dann in den besagten pic geschrieben und ihr 
werdet es wohl schon erwartet haben dort will das programm nicht wie es 
soll.

das programm soll eigendlich port b 0 auf hi legen und dann mit pause 
von 250ms das bit immer weiter nach links schieben. (geht aber nicht 
alle ports auf lo)

es ist das lauflich von sprut. ich habe aber schon andere programme 
geschrieben und alle arbeiten nicht deswegen habe ich es mit einem 
programm probiert was definitiv arbeitet

ich habe weiter rum probiert und getestet dabei kam raus das, die init 
werte geladen werde und die werte bis zum call übernommen werden.
ich habe auch schon die warteschleife raus genommen und das prog so 
laufen lassen. der blöde pic bleibt einfach an einer stelle stehen und 
bewegt sich keinen mm mehr

bitte helft mir ich bin echt am verzweifeln

den takt habe ich mit oszi nachgemessen 2Mhz sin ca 4V
pic wird mit 5V betrieben(7805)
sollte noch was unklar sein fragt einfach nach




;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PIC16F84A. This file contains the basic code               *
;   building blocks to build upon.                                    *
;                                                                     *
;   If interrupts are not used all code presented between the ORG     *
;   0x004 directive and the label main can be removed. In addition    *
;   the variable assignments for 'w_temp' and 'status_temp' can       *
;   be removed.                                                       *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional            *
;   information on the instruction set.                               *
;                                                                     *
;   Template file assembled with MPLAB V4.00.00 and MPASM V2.20.12.   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:      Test.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


  list      p=16F84A            ; list directive to define processor
  #include <p16F84A.inc>        ; processor specific variable 
definitions

  __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC

; '__CONFIG' directive is used to embed configuration data within .asm 
file.
; The lables following the directive are located in the respective .inc 
file.
; See respective data sheet for additional information on configuration 
word.

;**************************************************************
; Variablennamen vergeben
;
loops  Equ  0x22    ; Zähler für Warteschleife
loops2  Equ  0x23    ; Zähler für Warteschleife

;**************************************************************
; Organiesirung

  org    0x00    ; Hier startet der Prozessor
  goto  Main    ; Springe zum Hauptprogramm

  org    0x04    ; Hier startet der Interupt wenn aktiv

;**************************************************************
; Hauptprogramm
  org    0x10
Main

; los gehts mit dem Programm
; Port B auf Ausgabe stellen

Init
  bsf     STATUS, RP0  ; auf Bank 1 umschalten
  movlw  B'00000000'  ; PortB alle output
  movwf  TRISB    ; Lade in Initregister B Bank 1
  bcf     STATUS, RP0  ; auf Bank 0 zurückschalten
  clrf  PORTB    ; alle LEDs ausschalten

; 1. LED einschalten

  bsf    PORTB,0    ; LED an RB0 einschalten

; Lauflicht

Loop
  call  Wait250 ; Wartezeit
  rlf    PORTB,f  ; laufen zur nächsten LED
  goto  Loop


;**********************************************************
; Warteschleife 250 ms

Wait250          ; 250 ms Pause
  movlw  D'250'    ; Zeitkonstante für 250ms
  movwf  loops    ; Speicherzelle für 1 ms Multiplikator
;**********************************************************
; Warteschleife 1 ms
Wait1          ; 1 ms Pause
    movlw   .259    ; Zeitkonstante für 1ms
        movwf   loops2  ; Speicherzelle für Warteschleife
Wai2    nop        ; Warte einen Takt ab
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    decfsz  loops2,F; verringere um eins
    goto   Wai2  ; Ist loops2 0
    decfsz   loops,F  ; erringere um eins
    goto   Wait1  ; ist loops 0
    retlw 0      ; Springe zurück zum Call

  end
;*********************************************************************









dies habe ich aus dem pic ausgelesen


; PIC-Assembler-Listing by sprut 2002..2005
; 14-bit-core

; d:\Eigene Dateien\PIC\Pic Programme\auslese.hex

; Marke  Mnemonic
; ================================

  ORG  0x0000
START
  GOTO  M0004


  ORG  0x0004
M0004
  BSF  STATUS,RP0
  MOVLW  0x00
  MOVWF  0x06    ; PORTB/TRISB
  BCF  STATUS,RP0
  CLRF  0x06    ; PORTB/TRISB
  BSF  0x06,0    ; PORTB/TRISB
M000A
  CALL  M000D
  RLF  0x06,f    ; PORTB/TRISB
  GOTO  M000A

M000D
  MOVLW  0xFA
  MOVWF  0x22
M000F
  MOVLW  0x03
  MOVWF  0x23
M0011
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  NOP
  DECFSZ  0x23,f
  GOTO  M0011
  DECFSZ  0x22,f
  GOTO  M000F
  RETLW  0x00

  END.
; end of file



Danke an alle die sich bis hier her durchgequelt haben ich hoffe ihr 
habt eie idee mir zu helfen

Autor: Harald G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens

Ändere erst mal den Befehl MOVLW .259 in MOVLW .255 (Beim Label Wait1).

Mfg
Harald

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den tip

das hatte ich schon behoben. aktueller wert ist 249

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M000D
  MOVLW  0xFA  (entspricht .249)
  MOVWF  0x22

.259 hat aber leider nur eine auswirkung auf die zeitkonstante aber 
leider nicht auf den akuten fehler

Autor: Harald G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens

ich würde nicht den Port mit rlf schieben, sondern eine Variable 
schieben
und sie dann ins Port schreiben. Vor dem Befehl rlf unbedingt das
Carry-Bit löschen. Nach 8mal schieben ist ja schluss da kein Übertrag im
Programm.

Wie sind die Leds angeschlossen?

mfg
Harald

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erst mal danke für die schnellen antworten.

das mit dem carry-bit ist ja sinn und zweck. beim 8. mal schieben geht 
das bit in carry und beim 9. schieben geht das bit auf portb0

die led´s sind über ein 74ls245 angeschlossen rot nach 5V und grün nach 
GND datenleitungen über 1k an GND

ich hoffe das hilft beim nachdenken

mfg
Huette

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo jens,

ich glaube nicht, dass das "carry" von
alleine wiederkommt.

An Deiner Stelle würde ich mal
2 Bitmuster abwechselnd ausgeben z. B.
die beliebten "aa" und "55"
(mit 250ms Verzögerung).

Gruss Otto

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das habe ich schon versucht

wie gesagt es ist nicht das problem das er nicht durch läuft sonder er 
fängt gar nicht erst an

er gibt das erste bitmuster aus zb aa aber dann ist schluss er macht 
einfach nicht weiter egal ob danach eine schleife kommt oder die nächste 
ausgabe

nochmal es wird immer nur das erste bitmuster ausgegeben

bsp

init port b als ausgabe
clr b
schreibe aa auf b (wird ausgegeben)und danach passiert nichts mehr
schreibe 55 auf b

huette

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens,

eventuell hast Du ja ein Problem mit der
Stromversorgung - hast Du mal nachgemessen ?

Bricht eventuell die Spannung beim Einschalten
der LED zusammen, der Prozessor "resettet",
beginnt wieder von vorne usw.?

Hast Du einen 100nF und einen ca 4,7µF Elko
hinter dem Spannungsregler?

Otto

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
4,7uF habe ich nicht eingebaut.

wede ich aber heute mal nachholen

danke

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 2Mhz sin ca 4V


fehlt hier nur ein 'd' oder meinst du wirklich 'sinus'

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry eine 0 vergessen es sind 20Mhz sinus Us ca 4V an osc2 gemessen

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe heute früh nochmal den widerstand an /mclr nachgemesse leider ist 
auch dies in ordnung

danach habe ich die schaltung nochmals unter spannung gesetzt und ihr 
werdet es nicht glauchen

                SIE FUNKTIONIERT :-))))))))

blinkert und leuchtet genau so wie ich es ihr aufgetragen habe

leider weis ich nicht wo der fehler lag so das ich beim nächsten mal 
wieder anfange zu grübeln :-((

na ja wie auch immer ES GEHT

danke an alle die sich mit diesem problem beschäftigt haben und 
besonders danke an die die mir so schnell geantwortet haben

für mich ist das thema erst mal abgeschlossen und gelöst

mfg HÜTTE

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist der Reset-Pin angeschlossen?

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oops, da war ich zu langsam...

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
über 1k und diode (icsp) an 5V

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> es sind 20Mhz sinus

wäre ein rechtecksignal nicht besser ?

Autor: Martin Kreiner (maart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens: Wenn Du die "Loop"-Schleife für sich alleine betrachtest, sieht 
es ganz gut aus, ABER!: Du rotierst den PortB durch das Carry, welches 
aber durch das Herunterzählen in der wait-Schleife beinflusst wird. 
Besser eine Variable rotieren und prüfen, ob das Bit "hinten" oder 
"vorne" rausfällt und die Variable entsprechend neu setzen. VORHER aber 
immer das Carry-Flag löschen.

Gruß, Martin

Autor: Jens Hüttenrauch (huette)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ FRAGENSTELLER

du hast schon recht mit der rechteck aber der schwingquarz liefert nun 
mal sinus
ist aber nicht weiter das problem intern wird soweit ich weis aus dem 
sinus ein rechteck gemacht

@ Martin

das mit dem carry ist nen guter tip habe mich schon gefragt warum der 
das bit nicht durch schiebt (hatte aber noch keine zeit mir darüber 
gedanken zu machen)

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jens Hüttenrauch

ok alles klar, war nur so eine idee

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.