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
Hallo Jens Ändere erst mal den Befehl MOVLW .259 in MOVLW .255 (Beim Label Wait1). Mfg Harald
M000D MOVLW 0xFA (entspricht .249) MOVWF 0x22 .259 hat aber leider nur eine auswirkung auf die zeitkonstante aber leider nicht auf den akuten fehler
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
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
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
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
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
4,7uF habe ich nicht eingebaut. wede ich aber heute mal nachholen danke
> 2Mhz sin ca 4V
fehlt hier nur ein 'd' oder meinst du wirklich 'sinus'
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
@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
@ 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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.