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
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.
@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
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)
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
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.
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.
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
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
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???
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
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.
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
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?