Forum: Mikrocontroller und Digitale Elektronik PIC16F84A include FALSCH


von BoB (Gast)


Angehängte Dateien:

Lesenswert?

hi leutz

ich ich bin dabei ein programm zu schreiben. es lässt sich in mplab auch 
schon fehlerfrei simulieren. das problem an der sache ist, dass ich es 
in der praxis nicht ans laufen bekomme. mplab zeigt mir an, dass der 
brennvorgang (mit picstart plus) fehlerfrei abgeschlossen ist. es kommt 
aber nichts raus. testprogramme (lauflicht) von sprut laufen bereits 
fehlerfrei auf der platine.

hier der code:
========================================

  list p=16F84A
#include <p16F84A.inc>

PORTA  EQU 0x05
PORTB  EQU 0x06
TRISA  EQU 0x85
TRISB  EQU 0x86
STATUS  EQU 0x03
RP0  EQU 0x05
ZAEHL  EQU 0x1B
INP  EQU 0x1C
ZEI1  EQU 0x2A
ZEI2  EQU 0x2B
ZEI3  EQU 0x2C

  org 00
  GOTO main

main  MOVLW 0x00
  MOVWF ZAEHL

inita  BCF STATUS,RP0 ; PORTA wird als 2 bit eingabeport verwendet
  CLRF PORTA
  BSF STATUS,RP0
  MOVLW 0x03
  MOVWF TRISA
  BCF STATUS,RP0

initb  CLRF PORTB     ; PORTB wird als 4 bit ausgabeport verwendet
  BSF STATUS,RP0
  MOVLW 0xF0
  MOVWF TRISB
  BCF STATUS,RP0
  MOVLW 0x05
  MOVWF ZAEHL
  MOVWF PORTB



anfang  MOVF PORTA,0  ; Wert von PORTA einlesen
  MOVWF INP     ; in INC speichern
  DECFSZ INP,1  ; dekrementiere INC
  GOTO eins     ; ist das ergebnis nicht null, so gehe zu eins
  GOTO kommen   ; ist das ergebnis null, so gehe zu kommen

eins  DECFSZ INP,1  ; dekrementiere INC
  GOTO zwei     ; ist das ergebnis nicht null, so gehe zu zwei
  GOTO gehen    ; ist das ergebnis null, so gehe zu gehen

zwei  DECFSZ INP,1  ; dekrementiere INC
  NOP           ; springe in jeden fall zum anfang,
  GOTO anfang   ; auch wenn das ergebnis nicht null ist.

kommen  INCF ZAEHL,1  ; kommt einer, so inkrementiere das zählregister
  MOVF ZAEHL,0
  MOVWF PORTB   ; und gebe dessen inhalt an PORTB aus
  GOTO zeit     ; gehe zur zeitschleife

gehen  DECF ZAEHL,1  ; geht einer, si dekrementiere das zählregister
  MOVF ZAEHL,0
  MOVWF PORTB   ; und gebe dessen inhalt an PORTB aus

zeit  MOVLW 0x03    ; zeitschleife 3 sekunden
  MOVWF ZEI1
wei1  MOVLW 0xF9
  MOVWF ZEI2
wei2  MOVLW 0xFA
  MOVWF ZEI3
wei3  NOP
  DECFSZ ZEI3,1
  GOTO wei3
  DECFSZ ZEI2,1
  GOTO ZEI2
  DECFSZ ZEI1,1
  GOTO wei1
  GOTO anfang  ; springe nach 3 sekunden zum anfang

  end

====================================

ja. was soll das programm können? es soll eine personenzahl ermittlung 
sein. es zeigt an, wie viele leute in einem raum sind. dabei werden 
lichtschranken verwendet. es ist nicht möglich durch den ausgang hinein- 
und durch den eingang heraus zu kommen. PORTB soll die anzahl der leute, 
die sich in dem raum befinden, anzeigen. an PORTA sind die 
lichtschranken angeschlossen. hierbei beschreibt a0 den eingang und a1 
den ausgang. deshalb wird nichts gemacht, wenn a0 und a1 gleichzeitig 
auf high sind (wenn einer kommt und gleichzeitig einer geht, sind es 
genausoviele wie vorher).

meine frage: kann es sein, dass ich die include datei falsch eingebunden 
habe? (ich verwende den PIC16F84A)

oder liegt es vielleicht daran, dass PORTA nicht mit den pegeln an den 
eingängen klar kommt?

als anhang habe ich einen stromlaufplan angehängt. wobei der mclr 
eingang über einen 1k widerstand auf 5v liegt und pro ausgang eine led 
angeschlossen ist.

bitte helft mir.

mfg   BoB

von Kola (Gast)


Lesenswert?

Ich denke mal, dass liegt an den Interrupts. Du ersparst dir ja jegliche 
Initialisierung (z.B. bestimmte Interrupts abzuschalten, Pullups,...). 
Der Interrupt-Einstiegspunkt ist glaube ich bei ORG 0x4, also wird bei 
jedem Interrupt diese Instruktion angesprungen.

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Lesenswert?

@Kola:
Die Interrupts sollten nach dem Reset grundsätzlich inaktiv sein
@BoB:
Was mir auf Anhieb auffällt, ist der nicht vorhandene Reset, des WDT. 
Den WDT mußt Du entweder in der Programmer-Software ausschalten oder 
regelmäßig in ms-Abständen mit "CLRWDT" resetten. Tust Du das nicht, 
bekommt der PIC regelmäßig einen Master-Reset, bevor er längere 
Programmsequenzen abarbeiten kann.

Jörg

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Lesenswert?

Nochwas:
Ist im Config-Register überhaupt der richtige Oszillatortyp gesetzt ?

Jörg

von BoB (Gast)


Lesenswert?

aja und wie mach ich das?

a) den WDT in der programmersoftware ausschalten und
b) nachschauen, ob ich den richtigen oszillatortypen habe.

(hab noch nicht so die ahnung vom pic, da ich in ausbildung bin)

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Lesenswert?

In MPLAB in der Menüleiste unter Configure -> Configuration Bits

Jörg

von Schoaschi (Gast)


Lesenswert?

Das Schlagwort was du sucht heisst "Fuses".

http://www.sprut.de/electronic/pic/config/config.htm

Normal kannst du die entweder in MPLAB einstellen und dein Brenner 
verwendet die Fuses aus dem hex-file oder du stellst es über das 
Brennprogramm ein.

mfg Schoasch

von Dieter Werner (Gast)


Lesenswert?

Die Arbeitswiderstände der beiden Lichtschranken erscheinen mir mit 1k 
doch sehhhr niederohmig.
Einfach mal nachmessen ob auch wirklich ein brauchbares Signal an den 
Eingängen ankommt, so etwa low < 1V  und high > 3V.

von BoB (Gast)


Lesenswert?

erst hat er ja alles schön gebrannt (auch hier war das so, dass es in 
der theorie mit mplab fehlerfrei simuliert wurde und in der praxis sah 
man nichts). aber nachdem ein kollege mir gesagt hat, dass ich alles 
nochmal neu schreiben soll, da man ja auch mal fehler überliest, kommt 
das hier:


===================================
PICSTART Program\Verify Report
02-Nov-2006, 15:50:59

Device Type: PIC16F84A
Address Range 0-30
Program Memory Errors

Address  Good  Bad

0000:    2801  0000
0001:    3000  0000
0002:    009B  0000
0003:    1283  0000
0004:    0185  0000
0005:    1683  0000
0006:    3003  0000
0007:    0085  0000
0008:    1283  0000
0009:    0186  0000
000A:    1683  0000
000B:    30F0  0000
000C:    0086  0000
000D:    1283  0000
000E:    3005  0000
000F:    009B  0000
0010:    0086  0000
0011:    3001  0000
0012:    009C  0000
0013:    0B9C  0000
0014:    2816  0000
0015:    281C  0000
0016:    0B9C  0000
0017:    2819  0000
0018:    2820  0000
0019:    0B9C  0000
001B:    2811  0000
001C:    0A9B  0000
001D:    081B  0000
001E:    0086  0000
001F:    2823  0000
0020:    039B  0000

Any additional errors are not displayed.


Configuration Bits Errors

Configuration Setting            Expected               Received

Oscillator                       RC                     LP
Power Up Timer                   Off                    On
Code Protect                     Off                    On
========================================
was soll das heißen oder was hab ich falsch gemacht? ok die alte version 
lief in der praxis auch nicht, aber er hat mir ein succeded angezeigt.


@  Dieter Werner
also ich bin jetzt zu hause. kann somit jetzt nicht nachmessen, in 
welchem bereich die spannung liegt. wenn ich mich richtig erinnere, 
liegt die spannung bei 4,5 v. genaue angaben gibts morgen früh.

von yakazaa (Gast)


Lesenswert?

Sers, das mit dem Messen kannste im Prinzip vergessen, da bei uns nur 
mit tastern simuliert wird...

Doch wo bleiben meine Manieren....
Halo, ich heisse Dominik und bin der Kollege, der BoB geraten hat neu zu 
programmieren :-D
Ich bin ebenfalls in dem PIC - Personenzahl - Ermittlungs - Team mit 
involviert und kann nur die Hände über dem Kopf zusammenschlgen...
Unter http://www.mikrocontroller.net/forum/read-1-416493.html#418417
kann jeder sich das Trauerspiel nochmal anschaun was wir bislang hatten.

Meine Gruppe hat jetgzt ein Programm entwickelt, welches ebenfalls noch 
fehlerhat ist, allerdings interessiert mich die nummer mit dem WDT auch 
!

Was genau ist da zu tun ? Bitte eine Art anleitung "für Dummies, wenn 
ihr versteht ;-)

Soweit, heute erstmal inner Schule messen... Nebenbei erwähnt:

Wir haben da noch ein Phänomen: Unsere Quartze schmieren immer ab !
Sollte zufälig jemand einen Fehler finden. ... Stromlaufplan kann ich 
nur nachreichen, liegt inner Schule aufm Server...

OK, Danke erstmal, gutgehn,

Dominik

von Schoaschi (Gast)


Lesenswert?

Hi

Lest euch folgendes auf der Seite von Sprut durch:
http://www.sprut.de/electronic/pic/config/config.htm#watchdog

Hast du die richtigen Fuses für den Quarz gesetzt? Haben die 
Kondensatoren die richtigen Werte? Hast du es einmal mit dem Widerstand 
probiert? Sitzt er nahe am PIC?

mfg Schoasch

von BoB (Gast)


Lesenswert?

also. ich werd mir jetzt nachmessen und uns die seite von sprut 
durchlesen. vorab: wir verwenden kondensatoren von 33pF.

@ schorsch
was für einen widerstand meinst du???

von BoB (Gast)


Lesenswert?

also ich hab dann jetzt gemessen.

high: 5,01V

low: 7,6mV

also mit den eingangspegel müsste er klarkommen

von BoB (Gast)


Angehängte Dateien:

Lesenswert?

so ich hab jetzt folgende einstellungen eingestellt:

Oscillator   LC
Watchdog Timer OFF
Power Up Timer   On
Code Protect   On

aber er zeigt mir immer noch die fehlermeldung an. jetzt sogar in dem 
alten programm.

ich hab nochmal ein screenshot als anhang drangehängt. da könnt ihr euch 
die values und adresses anschauen

von BoB (Gast)


Lesenswert?

Hey leute.

verdammt. es funktioniert ja tatsächlich. da wären wir aber nie im leben 
drauf gekommen, dass man da auch noch einstellungen vornehmen muss.

1000 dank an alle, die uns geholfen haben.

von yakazaa (Gast)


Lesenswert?

Wieso kann ich denn jetzt, nachdem Bobs Gruppe auf dem Brenner gebrannt 
hat da nix mehr assemblieren ?!

Kriegen immer nur:

Executing: "C:\Programme\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 
"Test_Lauflicht.asm" /l"Test_Lauflicht.lst" /e"Test_Lauflicht.err" 
/o"Test_Lauflicht.o"
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 52 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 53 : Executable code and 
data must be defined in an appropriate section
Message[302] C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 54 : Register in operand 
not in bank 0.  Ensure that bank bits are correct.
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 54 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 55 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 56 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 60 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 65 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 66 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 67 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 74 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 75 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 78 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 79 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 80 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 81 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 82 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 83 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 84 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 85 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 86 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 87 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 89 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 90 : Executable code and 
data must be defined in an appropriate section
Error[152]   C:\ERMITTLUNG\TEST_LAUFLICHT.ASM 91 : Executable code and 
data must be defined in an appropriate section
BUILD FAILED: Fri Nov 03 11:45:46 2006

von BoB (Gast)


Lesenswert?

ja. auch komisch ist, dass meine schaltung läuft, bei der eines 
kollegen, der in meiner gruppe ist, aber alles invertiert ausgibt, 
obwohl wir den selben PIC mit dem selben programm benutzen.

bei mir ist es auch so, dass wenn ich an dem eingang (pin 18) mit einem 
multimeter die eingangsspannung messe, bzw da drauf rumkratze, er auf 
einmal einen nach unten zählt. das macht er in unregelmäßigen abständen. 
warum tut er das?

von BoB (Gast)


Lesenswert?

hehe. es läuft doch. wir haben nur die sensoren für eingang und ausgang 
vertauscht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.