Forum: Mikrocontroller und Digitale Elektronik Problem mit PIC16F84A


von Tobi F. (t-phyte)


Lesenswert?

hi leutz
ich hab folgendes problem. ich wollte ein problem mit einem PIC16F84A
lösen. Das Programm ist geschrieben und gebrannt, aber der PIC macht
nichts.
mein programm soll folgendes tun:in einem wartezimmer einer arztpraxis
soll eine anzeige angebracht weden, wo angezeigt wird, wie viele
personen sich zur zeit in dem raum befinden. eine lichtschranke (1)
liest die personen ein, die in den raum kommen, eine andere
lichtschranke (2) liest die personen ein, die den raum über eine andere
tür verlassen.
mein prog sieht wie folgt aus:

===============================================
list p=16f84
;*********************************
; Pinbelegung
; -----------
; PortA
;     0 Lichtschranke 1
;     1 Lichtschranke 2
;    2 nc
;    3 nc
;
; PortB
;    0  ULN 2803 Pin1 (LED B1)
;    1  ULN 2803 Pin2 (LED B2)
;     2  ULN 2803 Pin3 (LED B3)
;    3  ULN 2803 Pin4 (LED B4)
;    4  ULN 2803 Pin5 (LED B5)
;    5  ULN 2803 Pin6 (LED B6)
;    6  ULN 2803 Pin7 (LED B7)
;    7  ULN 2803 Pin8 (LED B8)
;*********************************

   #include <P16f84.INC>



;************************





main

MOVLW 0x00                 ; Startwert 0
MOVWF 0X0C               ; 0 speichern in Zählregister
BCF 0x03,0x05                ; Umschalten auf BANK 0
CLRF 0x05                      ; Der Inhalt von PORTA wird gelöscht
BSF 0x03,0x05                ; Umschalten auf BANK 1
MOVLW 0x03                ;
MOVWF 0x05                ;PORTA initialisieren
BCF 0x03,0x05               ;Umschalten auf BANK 0
CLRF 0x06                     ;PORTB wird gelöscht
BSF 0x03,0x05               ;Umschalten auf BANK 1
MOVLW 0x00               ;
MOVWF 0x06               ;PORTB initialisieren
BCF 0x03,0x05              ;Umschalten auf BANK 0
  anfang:          ;LABEL anfang
MOVF 0x05,0
MOVWF 0x1B             ;PORTA in 1B speichern
DECFSZ 0x1B,1
GOTO zwei                ;springe zu kommen, wenn 1B null ist.
ansonsten springe zu zwei
GOTO kommen
  zwei:
DECFSZ 0x1B,1
GOTO drei                ;springe zu gehen, wenn 1B null ist. ansonsten
springe zu drei
GOTO gehen
  drei:
DECFSZ 0x1B,1            ;da der fall drei nur dann eintritt, wenn
jemand kommt und gleichzeitig einer geht, wird zum anfang gesprungen
NOP
GOTO anfang
  kommen:
INCF 0x0C,1              ;es kommt einer in den raum. also wird 0C
incrementiert
MOVF 0x0C,0
MOVWF 0x06               ;der wert von 0C wird an PORTB ausgegeben
GOTO anfang
  gehen:
DECF 0x0C,1             ;es geht einer aus dem raum. also wird 0C
decrementiert
MOVF 0x0C,0
MOVWF 0x06              ;der wert von 0C wird an PORTB ausgegeben
GOTO anfang
END
============================================
nun macht der aber gar nichts. selbst einfache programme, wie 0xFF
einlesen und an einem PORT ausgeben macht er nicht. was ist daran
falsch oder wo kann ein eventueller fehler liegen?

mfg t-phyte

von Sergey (Gast)


Lesenswert?

- CONFIGs / Fuses prüfen (am besten gleich im ASM festlegen
und nochmals vor dem prommen prüfen, falls du einen selbstgebauten
Prommer benutzt)
- Oszillator überprüfen

Beispiel wie man die CONFIGs / Fuses einstellt

#INCLUDE P16F84A.INC
PROCESSOR PIC16F84A
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

von Dominik Tünnerhoff (Gast)


Lesenswert?

Hallo zusammen.

Sitze zusammen mit tobi an dem problem und kann nur sagen, dass es ein
Problem AUSSERHALB der Programmiererei ist..

Habe folgendes Demo Programm eingeladen:

  list p=16f84
;**************************************************************
;*
;* Pinbelegung
;*  ----------------------------------
;*  PORTA:   0
;*    1
;*    2
;*    3
;*    4
;*  PORTB:  0 LED
;*    1 LED
;*    2 LED
;*    3 LED
;*    4 LED
;*    5 LED
;*    6 LED
;*    7 LED
;*
;**************************************************************
;
; sprut (zero) Bredendiek 05/2000 (mod. am 16.01.2002)
;
; Lauflicht am Port B
;
; Taktquelle: 4MHz
;
;**************************************************************
; Includedatei für den 16F84 einbinden
;
  #include <P16f84.INC>
;
; Configuration festlegen
;
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
  __CONFIG  _PWRTE_ON & _WDT_OFF & _XT_OSC
;
; ab 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator
;  __CONFIG  _PWRTE_ON & _WDT_OFF & _HS_OSC
;
;**************************************************************
; Variablennamen vergeben
;
loops  Equ  0x22    ; Zähler für Warteschleife
loops2  Equ  0x23    ; Zähler für Warteschleife

;**************************************************************
; 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
  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  Wait    ; Wartezeit
  rlf  PORTB,f    ; laufen zur nächsten LED
  goto  Loop


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

Wait
  movlw  D'250'    ; 250 ms Pause
  movwf  loops

Wai
  movlw   .110           ; Zeitkonstante für 1ms
        movwf   loops2
Wai2    nop                    ;
        nop
        nop
        nop
        nop
        nop
        decfsz  loops2, F      ; 1 ms vorbei?
        goto    Wai2           ; nein, noch nicht
                               ;
        decfsz  loops, F       ; 250 ms vorbei?
        goto    Wai            ; nein, noch nicht
        retlw   0              ; das Warten hat ein Ende

  end


Es sollte eigentlich 100 % ig laufen - tuts aber nich ;-)

Was muss ich auf meiner Platine beachten ?
Hab +5V, das 4 Mhz Quartz und die LEDS am PORT B ngeschlossen, das
sollte reichen, oder ?
Hab ich was vergessen ? Bitte antwortet !!!

von maddin (Gast)


Lesenswert?

Hallo,

@tobi fing. (t-phyte)
@Dominik Tünnerhoff - tuennerhofftrbk-schueler.de


Habt ihr diese beiden Zeilen irgentwo definiert?

      org    00
      goto  START
      org    04
      goto    InterruptRoutine
Habt íhr überhaupt schonmal einen pic verwendet!?
welchen brenner
welche software
usw...

infos zu brennern und software bei

www.sprut.de

bei euren programmen beginnt ihr bei

main

oder


Init.... woher soll der pic wissen das das euer programmanfang ist

speziell an:
tobi fing. (t-phyte)

was ist wenn einer zu der tür reingeht zu der er reingekommen ist (zwei
lichtschranken mit richtungserkennung!?)

Maddin

ps.: habe eure programme nicht weiter durchgesehen - vielleicht hilft
das aber schon..

von maddin (Gast)


Lesenswert?

ach ja,

mit dem befehl org. legt ihr fest an welcher adresse im speicher des
pics dieser programmcode liegen soll.

nun springt der pic bei einem reset oder beim einschalten an die stelle
0x00 im speicher - wenn dort nicht steht was er machen soll dann...

bei einem interrupt geht er immer an stelle 0x04, dort müsstet  ihr
euren interrupthandler implementieren oder diesen eintrag
auskommentiert lassen wenn ihr keine interrups nutzt...

maddin

von Dominik Tünnerhoff (Gast)


Lesenswert?

Programmupdate bislang:

list p=16F84A
#include <p16F84.inc>
PORTA  equ 0x05
PORTB  equ 0x06
STATUS  equ 0x03
RP0  equ 0x05
TRISA  equ 0x85
TRISB  equ 0x86
REG1  equ 0x1B


main  MOVLW 0x00           ; Startwert 0
  MOVWF 0x0C              ; 0 speichern in Zählregister
  BCF STATUS, RP0          ; Umschalten auf BANK 0
;  CLRF 0x05                ; Der Inhalt von PORTA wird gelöscht
  BSF STATUS, RP0           ; Umschalten auf BANK 1
  MOVLW 0x03               ; Konstante nach W laden

PORTINITA  BCF STATUS, RP0  ;Portinitialisierung Port A
  CLRF PORTA
  BSF STATUS, RP0
  MOVLW 0x03         ;Definiert als 2 - Bit
  MOVWF TRISA        ;Definiert als Eingang
PORTINITB  BCF STATUS, RP0  ;Portinitialisierung Port B
  CLRF PORTB
  BSF STATUS, RP0
  MOVLW 0x00         ;Definiert als 8-Bit
  MOVWF 0x86        ;Definiert als Ausgang
  BCF STATUS, RP0         ;Umschalten auf BANK 0
anfang:  MOVF PORTA,0
  MOVWF REG1              ;PORTA in 1B speichern
  DECFSZ REG1,1      ;springe zu kommen, wenn 1B null ist. ansonsten
springe zu zwei
  GOTO zwei
  GOTO kommen
zwei:  DECFSZ REG1,1    ;springe zu gehen, wenn 1B null ist. ansonsten
springe zu drei
  GOTO drei
  GOTO gehen
drei:  DECFSZ REG1,1        ;da der Fall drei nur dann eintritt, wenn
Jemand kommt und gleichzeitig Einer geht, wird zum Anfang gesprungen
  NOP
  GOTO anfang
kommen:  INCF 0x0C,1          ;es kommt einer in den raum. also wird 0C
incrementiert
  MOVF 0x0C,0
  MOVWF 0x06               ;der wert von 0C wird an PORTB ausgegeben
  GOTO anfang
gehen:  DECF 0x0C,1          ;es geht einer aus dem raum. also wird 0C
decrementiert
  MOVF 0x0C,0
  MOVWF 0x06              ;der wert von 0C wird an PORTB ausgegeben
  GOTO anfang
  END


Hoffentlich ist es bislang zumindest klarer was passiert ;-)
Die von dir genennaten zeilen haben wir nicht, was bewirken sie ?
Ist der Erste PIC, der uns auch scheinbar über den Kopf wächst :-)

Danke für Hilfe !!!

Tobis Frage kann ich auch eben beantworten:

http://www.trbk-schueler.de/ - Übersichtsplan der Praxis

von maddin (Gast)


Lesenswert?

was sie bewirken habe ich doch beschrieben!?

maddin

von Dominik Tünnerhoff (Gast)


Lesenswert?


von Dominik Tünnerhoff (Gast)


Lesenswert?

Sorry, hab den 2ten eintrag noch nicht gehabt als du geantwortet hast.
Leider versteh ich das aber auch noch nicht so wirklich:

Das soll jetzt quasi direkt an den anfang, oder ?

bei einem interrupt geht er immer an stelle 0x04, dort müsstet  ihr
euren interrupthandler implementieren oder diesen eintrag
auskommentiert lassen wenn ihr keine interrups nutzt...

von Dominik Tünnerhoff (Gast)


Lesenswert?

Also so:

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

    org    00
      goto  START
      org    04
      goto    main
START  PORTA  equ 0x05
PORTB  equ 0x06
STATUS  equ 0x03
RP0  equ 0x05
TRISA  equ 0x85
TRISB  equ 0x86
REG1  equ 0x1B


main  MOVLW 0x00           ; Startwert 0
  MOVWF 0x0C              ; 0 speichern in Zählregister
  BCF STATUS, RP0          ; Umschalten auf BANK 0
;  CLRF 0x05                ; Der Inhalt von PORTA wird gelöscht
  BSF STATUS, RP0           ; Umschalten auf BANK 1
  MOVLW 0x03               ; Konstante nach W laden

PORTINITA  BCF STATUS, RP0  ;Portinitialisierung Port A
  CLRF PORTA
  BSF STATUS, RP0
  MOVLW 0x03         ;Definiert als 2 - Bit
  MOVWF TRISA        ;Definiert als Eingang
PORTINITB  BCF STATUS, RP0  ;Portinitialisierung Port B
  CLRF PORTB
  BSF STATUS, RP0
  MOVLW 0x00         ;Definiert als 8-Bit
  MOVWF 0x86        ;Definiert als Ausgang
  BCF STATUS, RP0         ;Umschalten auf BANK 0
anfang:  MOVF PORTA,0
  MOVWF REG1              ;PORTA in 1B speichern
  DECFSZ REG1,1      ;springe zu kommen, wenn 1B null ist. ansonsten
springe zu zwei
  GOTO zwei
  GOTO kommen
zwei:  DECFSZ REG1,1    ;springe zu gehen, wenn 1B null ist. ansonsten
springe zu drei
  GOTO drei
  GOTO gehen
drei:  DECFSZ REG1,1        ;da der Fall drei nur dann eintritt, wenn
Jemand kommt und gleichzeitig Einer geht, wird zum Anfang gesprungen
  NOP
  GOTO anfang
kommen:  INCF 0x0C,1          ;es kommt einer in den raum. also wird 0C
incrementiert
  MOVF 0x0C,0
  MOVWF 0x06               ;der wert von 0C wird an PORTB ausgegeben
  GOTO anfang
gehen:  DECF 0x0C,1          ;es geht einer aus dem raum. also wird 0C
decrementiert
  MOVF 0x0C,0
  MOVWF 0x06              ;der wert von 0C wird an PORTB ausgegeben
  GOTO anfang
  END

von maddin (Gast)


Lesenswert?

benutzt ihr interupts!?

warum denn die zeile org. 0x04

lest ihr denn auch aufmerksam!?

eigentlich sollte die letzte frage überflüssig sein, aber...

nein, ich braucht nur

org. 0x00
goto main

wie schon geschrieben und erklärt

org. 0x04
goto isr

ist für interrupts

ach ja die deklaration der variablen würde ich von der reihenfolge her
eher vor dem org machen...

maddin.

ps.: ich würde mit einem einfachen programm starten - lasst lieber
erstmal eine led blinken....

von Dominik Tünnerhoff (Gast)


Lesenswert?

Ja gut, habs JETZT kapiert ! So halb zumindest...

Interrupts sind ?!
goto isr ?! ich hab kein Label namens isr...

Im Prinzip müsste ich noch das org. 0x00 vor main setzen, womit a) der
Sprung nach main überflüssig ist (steht ja schon davor) und steht damit
b) nach den variablen, oder habich jetzt was verpeilt ?

Einfaches Programm: Gerne, aber selbst ne Demo von www.sprut.de
 kriegen wir nicht ans Laufen :-( Kann dir gleich mal nen Foto unserer
Testplatine hochladen, ist dann www.trbk-schueler.de/pic/test1.jpg und
www.trbk-schueler.de/pic/test2.jpg

Schätze so in 20 Minuten, hab atm kein FTP Login...

von maddin (Gast)


Lesenswert?

die links gingen bisher alle einschließlich diesem nicht.

ich ahbe hier jetzt nochmal ein kleines testprogramm zusammengestrickt,
leider kann ich es zur zeit nicht testen, aber es sollte funktionieren,
vielleicht wird daraus die struktur etwas klarer...

wie gesagt, ich habe das jetzt an eure problematik angelehnt...

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

VARIABLEA_A   EQU   0x0C    ;0x0c absolute erste ram zelle
VARIABLEA_B   EQU   0x0D

        org    00
        goto   INIT
;       org    04
;       goto   ISR


INIT    bsf    status,5     ;Wechsel zu Bank1
        bcf    status,6

        movlw  b'11111111'  ;PortB 'IN' or 'OUT'
        movwf  trisb        ;1=IN     ;   0=OUT

        movlw  b'00000000'  ;PortB 'IN' or 'OUT'
        movwf  trisa        ;1=IN     ;   0=OUT

;       bcf    option_reg,7 ;Pull-UP PortB enable

        bcf    status,5     ;Wechsel zu Bank 0
        bcf    status,6

        goto   START



;=================Hauptprogramm=============================

START   movf   PORTB,w
        movwf  PORTA
        goto   START



maddin

ps.: ich arbeite immer auf bank 1, könnte bei euch auch noch zu
prblemen führen - auf bankwechsel achten

die label könnt ihr allesamt benutzt, wenn ihr die .inc richtig
eingebunden habt... meine ich

wie gesagt, euer programm habe ich nicht durchgesehen, ist ohne label
auch schon eine bestrafung.

würde das mal kommentieren, und etwas in segmente unterteilen, den code
so zu schreiben ist eine bestrafung für jeden der euch helfen soll und
später auch für euch selbst, bei der fehlersuche :-)

von maddin (Gast)


Lesenswert?

arbeite auf bank 0 meine ich natrülich...

von Dominik Tünnerhoff (Gast)


Lesenswert?

zu den links: es muss bmp am ende heissen, sorry aber die hat wer anders
für mcih eingescannt, daher die probleme des dateiformats: Ich scan
immer in JPG, er in BMP... naja, da siehste erstmal was...

Deinen Programmcode kann ich mir leider erst später anschauen, da ich
jetzt zur pause MUSS .... Anordnung von oben...

von Dominik Tünnerhoff (Gast)


Angehängte Dateien:

Lesenswert?

Wieso ? Sind doch labels drinne !

Hab das Programm als ASM File mal an diesen Beitrag drangehängt, damit
sollte niemand gestraft werden ;-)

Hab da jetzt schon deine Versioon eingebaut, ich hoffe richtig ;-)

Soweit so gut, das mit den Links tut mir leid, muss die Domain neu
konfigurieren... kotz

von maddin (Gast)


Lesenswert?

eine frage,

kennst du dich mit den asm befehlen des pics aus!?

maddin

von Dominik Tünnerhoff (Gast)


Lesenswert?

'Ehrlich ? Ich bin Schüler und hab hier aussm Datenblatt die
befehlsliste, denk dir deine Antwort ;-)

Auch wenn ich nicht so wirklich der Pro bin hoffe ich weiter auf deine
klasse Hilfe !

von maddin (Gast)


Lesenswert?

...allein mit zusammenkopieren und nicht lesen, ist sowas aber leider
nicht getan...

wenn du dir das programm auch nur ein wenig angesehen hättest, hättest
du erkannt das es in sich abgeschlossen ist.

es spiegelt den portb nach porta, aber wenn du nichtmal das siehst,
dann frage ich mich woher der restliche code herkommt, oder ob du
einfach nur unaufmerksam bist.

du solltest das kleine programm mal für sich allein in deinen pic
bekommen, und gucken ob das was du an portb anlegst, wieder auf porta
ausgegeben wird...

bis dahin, alles gute

maddin

von Tobi F. (t-phyte)


Lesenswert?

also ich wollte mich auch noch mal melden. es funktioniert nichts.
selbst ein einfaches programm wie dieses:
===============================================
list p=16f84
#include <P16f84.INC>

ORG 00
GOTO init

;************************


  init:

BCF 0x03,0x05
BCF 0x03,0x06                ;umschalten auf BANK 0
CLRF 0x06                     ;inhalt von PORTB wird gelöscht
BSF 0x03,0x05
BCF 0x03,0x06              ;umschalten auf BANK 1
MOVLW 0x00
MOVWF 0x06               ;PORTB initialisieren
BCF 0x03,0x05              ;Umschalten auf BANK 0
GOTO main

;__________________Hauptprogramm___________________

  main:

MOVLW 0xFF      ;Das Bitmuster 11111111 wird geladen
MOVWF 0x06      ;Das Bitmuster wird an PORTB ausgegeben
GOTO main

end

==============================================
funktioniert nicht. im MPLAB lässt es sich fehlerfrei simulieren.
normalerweise müsste an PORTB ein dauerhaftes h-signal an allen
bitstellen rauskommen. aber es funktioniert nicht. an allen PINs von
PORTB messen wir 0V. somit kann auch nichts an den LEDs zur anzeige
gebracht werden. kann es am quarz liegen? es schwingt aber.

weitere infos:
quarz: 4mhz
PIC: 16F84A
Brenner: PICSTART plus

über weitere hilfe wüden wir uns sehr freuen.

mfg
tobi

von H. W. (digger72)


Lesenswert?

Hallo Tobi,

Miss dochmal die Spannung an PIN 4 ( /MCLR ),
könnte sein, dass der PIC nach dem Proggen im Reset bleibt.

Gruss digger

von Dominik Tünnerhoff (Gast)


Lesenswert?

Hey digger !

Es gibt da nen Prob: Der Pin ist nicht belegt ;-)

Was soll er kriegen ? HIGH Pegel oder ? Hab mal gehört, dass ICs
generell HIGH interpretieren wenn nix angeschlossen ist, is doch so,
oder ?!

Ich bin inzwischen (durch maddins Hilfe) soweit das ich das dingen
scheinbar komplett NEU programmieren werde. Das ganze ist quasi ne
Facharbeit und muss zu allem Ärger eigentlich morgen 16:15 fertig sein,
aber das kann ich knicken. Hab Aufschub bis Mittwoch bekommen und da es
ja hier den maddin gibt, der meint ich würd nur kopieren und einfügen,
schreib ich komplett neu.

Mal ne Frage ans Plenum: Was hab ich oben falsch gemacht ? Ich find
einfach nix !!! Abgesehen von maddins (mir leider nicht verständlichen)
Vorschlägen hab ich nämlich nix kopiert...

Ich hoffe ihr haltet mich jetzt nicht für bekloppt oder sowas, aber ich
möchte gerne eine Aufgabe zu Ende bringen und über den PIC was lernen.

BITTE HELFT UNS WEITERHIN, AUCH WENN WIR NICH SO FIX KAPIEREN WOVON IHR
ALTEN HASEN SPRECHT ;-) ;-)

Soweit mein Part, schönen Abend noch,

Dominik

von Feadi (Gast)


Lesenswert?

An MCLR muss ein ca. 10k Pullup angeschlossen werden.

Gruß, Feadi

von Dieter Werner (Gast)


Lesenswert?

Wobei "Pullup" bedeutet - der Widerstand muss mit einem seiner beiden
Drähte an MCLR und mit dem anderen an VDD bzw. 5V angschlossen werden.

von Tobi F. (t-phyte)


Lesenswert?

das mit dem 10k widerstand haben wir dann auch am ende des heutigen
tages gemerkt. aber nach der änderung ist meines wissens auch nichts
brauchbares rausgekommen. am besten wir hängen mal morgen ein bild vom
stromlaufplan. vielleicht bringt euch (somit auch uns) das ja dann
weiter.

mfg
tobi

von Dominik Tünnerhoff (Gast)


Angehängte Dateien:

Lesenswert?

Unser stromlaufplan :-)

Ausserdem at bob komplett recht: Das mit der 10K Geschichte haben wir
jetzt auch schon durch...

von Dieter Werner (Gast)


Lesenswert?

Für IC3 steht zwar keine Bezeichnung dran, sieht aber von der
Pinbelegung aus wie ein ULN2803 oder 2804.

Nuuuur .... 2803 hat "open collector" Ausgänge und ist daher nicht in
der Lage Strom für die LEDs zu liefern.
Damit sie leuchten müssen die LEDs mit Anode an +5V und mit Katode über
einen Widerstand (hier 330 Ohm) an den zugehörigen Ausgang des 2803.

von Tobias (Gast)


Lesenswert?

> BCF 0x03,0x06

Nur als Tip, obige Zeile sollte man besser so schreiben:

BCF STATUS, RP1

So hat auch jemand die Chance den Code zu verstehen, der nicht alle
Register des PICs auswendig kennt. Schließlich hast du ja die Datei
P16f84.INC eingebunden, somit kannst du auch die Aliasnamen benutzen.
Aber anonsten ist der Code schon richtig. Muß also ein Hardwareproblem
sein.

von maddin (Gast)


Lesenswert?

Hallo Tobias,

wie man sieht steht ihr am anfang einer einarbeitung in eine technische
welt, von der ihr bis jetzt noch nicht so viel zu wissen scheint.

wenn ihr schenll zum ziehl kommen wollt, dann müsst ihr die sache schon
etwas strukturierter angehen.

1) nehmt den pic aus der schaltung.
   legt an die pins von rb0 bis rb7 in der offenen pic fassung
   nacheinander plus 5volt, und schaut erstmal ob die leds so leuchten
   wie sie sollen.
   messt die spannung an den pins in der fassung an denen gnd und plus
   5v anliegen soll
   kontrolliert mit anderen hilfsmitteln, ob die beiden optokoppler
   dei signale liefern die ihr benötigt, oder wie ihr sie euch
   vorstellen, natürlich alles in der pic fassung messen.
   z.b mit hilfe einer led, oder etwas ähnlichem...
2) schließt an einen pin des Ra ports noch einen taster, oder
   schlater an. so das ihr >SICHER einen pegel von gnd oder 5v an
   diesem pinne habt - kontrolliert das!
   erreichen könnt ihr das wenn ihr einen wechselschalter nehmt, und
   ihn mit gnd und 5V zum auswählen beschaltet,. oder einem taser mit
   1 oder 10k pull up. taster gegen masse, natürlich.
3) nehmt diesen programm, es ist vollständig und sollte den pin an
   dem der taser angeschlossen ist, wenn es denn richtig läuft, an
   die port b pins durchreichen. wenn die led dann macht was ihr am
   schalter n angebt - dann habt iht eurer erstes lauffähiges programm
   erfolgreich in den pic bekommen.

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

VARIABLEA_A   EQU   0x0C    ;0x0c absolute erste ram zelle
VARIABLEA_B   EQU   0x0D

        org    00
        goto   INIT
;       org    04
;       goto   ISR


INIT    bsf    status,5     ;Wechsel zu Bank1
        bcf    status,6

        movlw  b'00000000'  ;PortB 'IN' or 'OUT'
        movwf  trisb        ;1=IN     ;   0=OUT

        movlw  b'11111111'  ;PortB 'IN' or 'OUT'
        movwf  trisa        ;1=IN     ;   0=OUT

;       bcf    option_reg,7 ;Pull-UP PortB enable

        bcf    status,5     ;Wechsel zu Bank 0
        bcf    status,6

        goto   START



;=================Hauptprogramm=============================

START   movf   PORTA,w
        movwf  PORTB
        goto   START


4)  wenn ihr euch das programm mal etwas genauer anseht werdet ihr dem
    hauptprogramm das ja nun nur ganze 3 zeilen beträgt, erkennen, das
    der inhalt des Portsa zum portb über das arbeitsregister w
    kopiert wird, wenn ihr das seht, dann ist das schonmal ein gutes
    zeichen. anschließend gehts wieder von forn los.
5)  sollte etwas nciht laufen, kontrolliert, spannung, nicht
    eingesteckte stecker, ob der ossillator am pic schwingt, ob ihr
    den richtigen port eingestellt habt, am rechner, für euren
    programmer ussw.. einen schritt nach dem anderen, und immer
    kontrollieren...
    ansosnten wisst ihr ja garnicht was nicht geht, es gibt bei dieser
    sache einfach zu viele dinge die man falsch machen kann....

allgemein:

pins eines prozessors sollte man immer beschalten, besonders den restet
pin.

das mit eurem oc driver uln... ist natürlcih richtig - die ausgänge
treiben wenn sie ein h am eingang haben, gegen masse, ergo gehört die
led samt vorwiederstand gegen +5v.ps.: die leds sind selbst wenn es
kein oc driver wäre und ich jetzt nicht total spinne auch noch allesamt
falschherum eingebaut, dh. wenn ihr jetzt den schaltplan abändert, müsst
ihr nur den gemeinsamen anschluss auf plus 5 v legen, die leds sind dann
schon richtig herum...

ich hoffe éuer pic ist ein typ /20 typ und nicht ein /04 (sieht man
wenn man guckt was hinter der bezeichnung pic16f84 ... auf dem ic
gehäuse guckt. die zahl steht für die maximale taktfrequenz. da ihr
einen 20mhz quarz verwendet, werdet ihr mit /04 (max 4Mhz) auch keinen
erfolg haben....

maddin

von maddin (Gast)


Lesenswert?

...ich meine natürlich


hallo dominik.

...

von Dominik Tünnerhoff (Gast)


Angehängte Dateien:

Lesenswert?

soooo, ein Stromplaufplanupdate ;-) So richtig ?! Bitte gebt uns
einbischen Zeit, wir sind dabei ! ATM löten wir die LEDS aus und
schalten die über den widerstand kathodenseitig an die treiberstufe um
sie dann mit der anode direkt an +5V zu legen.

Im Programm selbst fehlt eine Art Schleife, damit mein ich, er fragt
nur einmal ab und dann is essig....

Aber wir arbeiten dran ;-)

von Dominik Tünnerhoff (Gast)


Angehängte Dateien:

Lesenswert?

current asm

von Dominik Tünnerhoff (Gast)


Angehängte Dateien:

Lesenswert?

aktueller Stromlaufplan

von Dominik Tünnerhoff (Gast)


Lesenswert?

zu madins quelltext:

movlw  b'00000000'  ;PortB 'IN' or 'OUT'
        movwf  trisb        ;1=IN     ;   0=OUT

        movlw  b'11111111'  ;PortB 'IN' or 'OUT'
        movwf  trisa        ;1=IN     ;   0=OUT

Kann es sein das du dich da mit den Ports bzw. Ihren TRISTATE Registern
vertan hast ? weil Port A hat doch nur 5 bit....

von maddin (Gast)


Lesenswert?

maddin,

intern werden nur 8 bit register verwendet - d.h. die bits 5,6,7 sind
unbenutzt kannst auch 00011111 nehmen.

man hat bei euren antworten nicht den eindruck als würdet ihr auf die
posts eingehen...

maddin

ps.: in deinem letzten quellcode fehlt wieder das org. aber ihr schafft
das schon...

>Im Programm selbst fehlt eine Art Schleife, damit mein ich, er fragt
nur einmal ab und dann is essig....

verstehe ich nicht - läuft es denn schon...

von Dominik Tünnerhoff (Gast)


Lesenswert?

Hallo Maddin,

und wie wir drauf eingehen ! Testen atm a) mit deinem Programm b) mit
dem Lauficht von sprut.de und - NÜX ! Vermuten bald dasder PIC im Sarg
is... Messen jetzt auf der Platine !

von Dominik Tünnerhoff (Gast)


Lesenswert?

Wieder nichts, so ein Mist ! Sind bald mit unserem Latein am Ende :-(

IDEEN !!! Was kann ich noch tun ? Evtl. neue Platine ? wenn ja, hat wer
nen stromlaufplan bzw. kritik an unserem ?

von Dominik Tünnerhoff (Gast)


Lesenswert?

YEAH ! DAS LAUFLICHT KLAPPT INZWISCHEN !!!

von Horst-Otto (Gast)


Lesenswert?

Boah, wenn man der Sourcecode hier so sieht, dann weiß man, dass 30
Jahre Softwareentwicklung komplett ignoriert worden sind. Die
Verwendung des PIC16F84 ist doch pure Selbstgeißelung. Hier ist die
Lösung für dein Problem:

1. entsorge den PIC16F84
2. nimm einen ATMega8
3. programmiere das alles nochmal ordentlich in C

Mit ordentlich ist gemeint:

1. programmiere strukturiert
2. verwende sinnvolle Namen für Funktionen und Variablen
3. definiere Konstanten mit sinnvollen Namen für externe Signale

Dann klapps auch mit dem Programm und es besteht eine reelle Chance,
dass die arme Sau, die nach dir das Projekt betreuen muss, das nicht
nochmal alles neu machen muss.

von Dominik Tünnerhoff (Gast)


Lesenswert?

also: Das Projekt selbst ist absolute Fantasie für eine schule !!

MÜSSEN das mitm PIC realisieren, no way4ATMEL !!!

von Tobi F. (t-phyte)


Lesenswert?

ja das is richtig toll. im vergangenen lehrjahr haben wir bereits den
atmel kennen gelernt. da wir aber für unsere abschlussprüfung den pic
brauchen, machen wir jetzt alles mit dem pic. finden wir zwar auch
sch***e aber wir können da nix machen. selbst die lehrer finden das
nicht gut. der prüfungsausschuss (pal) hat entschieden, dass in der
prüfung für die elektroniker für geräte und systeme der pic verwendet
wird. wir lernen zur zeit alle den pic (selbst die lehrer kennen sich
nicht mit pic aus). deshalb nehmen wir den pic.

von Dominik Tünnerhoff (Gast)


Lesenswert?

ES LÄUFT !!!

Zumindest soweit wir sind, nur: Wi brauchen eine Zeitschleife !!!

Haben uns unter
http://www.piclist.com/techref/piclist/codegen/delay.htm
eine generieren lassen, aber das funzt nicht so wirklich :-( Ideen ?!
Danke erstmal für die Hilfe !!!

von H. W. (digger72)


Lesenswert?

Hallo Dominik,

Erstmal Congretulations für die ersten Erfolge.
Die Zeitschleife habt ihr schon, heisst "wait" im Beispielprogramm
von Sprut.

Besorgt euch am besten die Befehlsbeschreibung (meine Ref-Datei
ist leider zu gross zum Anhängen),
sind nur um die 30 Befehle.(RISC-Prozessor = Reduced Instruction Set)
und die meisten davon braucht ihr erstmal nicht.

Irgendwas zusammenkopieren und gucken wie's (nicht) funktioniert,
kostet euch mindestens genausoviel Zeit und Nerven wie selberlernen.

@ Horst-Otto
<3. programmiere das alles nochmal ordentlich in C>

ich empfehle FORTRAN :-)

von Dieter Werner (Gast)


Lesenswert?

LEDAN1 und LEDAN2 werden so nicht leuchten da sie nach Plan von 10:41
Uhr zwischen +5V und +5V geschaltet sind.

von Tobi F. (t-phyte)


Lesenswert?

hallo Dieter Werner

wieso sollen die leds nicht leuchten. die anode ist an +5v und die
kathode über wie widerstände an masse. d2 hat open collector. das haben
wir auch vorher nicht beachtet. dies wurde noch nachträglich im
stromlaufplan und auf unserer testplatine geändert. den hast du dir
auch angesehen. ursprünglich waren die leds andersrum drin und da wo
jetzt die +5v sind war gnd.
so funktionierts erst mal.

mfg tobi aka bob

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.