Hallo Forumgemeinde. Ich habe da ein paar kleine Probleme mit dem PIC16F57 ... unzwar ist mir die Initialiesierung nicht so ganz einleuchtend ... habe vorher den PIC16F84A programmiert ... dies viel mir recht leicht aber bei diesem neuen PIC ??? zBsp.: will ich PORTA als Ausgang definieren und einfach nur eine LED an PORTA,0 an und wieder aus machen! im Datenblatt ist es doch so erklärt das es garkein echtes TRIS-Register mehr gibt oder ? Das Bänke rücken vom 16F84A sollte damit ja umgangen sein... movwf B'00000000' tris PORTA Ist das bereits die Initialiesierung für PORTA so dann: m1 bsf PORTA,0 call wait bcf PORTA,0 call wait goto m1 dadrunter halt die Warteschleife!!! vill kann mir wer helfen ... als Config habe ich: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC vielen dank im vorraus :)
Der 16F57 ist stark eingeschränk, auch was die Stacktiefe betrifft. Da muss ich mir aber erstmal das Datenblatt ziehen, mit dem Teil habe ich noch nicht gearbeitet.
Hallo danke für die schnell Antwort ... Das dieser Pic in seinen möglichkeiten eingeschränkt ist habe ich im Datenballt gesehen... Was genau ist der Stack nochmal ... da wo ich zwischen Ergebnisse speichere??? zum Beispiel den Wert eine Zählschleife ??? Ich Entschuldige mich schonmal für meine Unwissenheit :(
Nein, bei diesen PICs kannst du noch keine Variablen im Stack ablegen. Der PIC legt bei Unterprogramm- (call) und Interruptaufrufen dort seinen letzten Programmcounter ab um nach dem Rücksprung zu wissen wo es im Hauptprogramm weiter geht.
Der Stack ist nur für Unterprogramme interessant, da wird die Rücksprungadresse gespeichert. Hast du PortA ordnungsgemäß definiert? Wie sieht dein Wait aus? Poste am besten mal das Programm. Die Initialisierung sieht übrigens so aus: movlw 00H ; dein movwf ist falsch, damit schreibst du W in Adresse 0 tris PORTA Viel Erfolg.
Aber wie soll ich dann einen Wert speichern ??? Ich muss doch loop1, loop2 ,loop3 ein Speicherzelle im Ram vergeben, nehmen wir mal: loop1 Equ 0x07 loop2 Equ 0x08 loop3 Equ 0x09 zum Beispiel: Wait movlw D'40' movwf loop3 M3 movlw D'250' movwf loop2 M2 movlw .110 movwf loop1 M1 nop nop nop nop nop nop decfsz loop1,f goto M1 decfsz loop2,f goto M2 decfsz loop3,f goto M3 retlw 0 Das funktioniert aber ??? oder was Naja das speicher ich ja auch im Ram oder ??
Sry naklar habe ich movlw benutzt; (lade wert in Akku) und nicht movwf; (lade wert in Register)
retlw ohne call geht immer schief... Am Ende brauchst du eine Hauptschleife, in der Art: main goto main Der PIC lädt sonst den nächsten Befehl aus dem Flash, der nach deinem Code dort steht und da das nicht definiert ist, geht das auch schief. Sicher das die RAm-Adressen 0x07 - 0x09 nicht schon durch Register belegt sind? Kommt mir etwas niedrig vor (ohne jetzt das Datenblatt gelesen zu haben)
Hm oben benutze ich ich call ... das mir schon klar das call ein aufruf eines unterprogrammes ist... ja das kam mir auch komisch vor aber ich bin mir nicht sicher ob da noch schon andere Register drin sind...
Wait ist soweit ok, zumindest beim schnellen drüberschauen, aber warum springst du mit retlw zurück. Ist zwar nicht ganz falsch, aber unüblich. Außerdem fängt der RAM erst bei 08H an, deine loop1 schreibst du in PortC, das kann nicht klappen. So müsste es klappen... PORTA equ 0x05 loop1 Equ 0x08 loop2 Equ 0x09 loop3 Equ 0x0a
Hm ich bin noch auf arbeit ... fahr nach hause und melde mich von dort ... ja hm wieso muss ich PORTA auch zuweissen das wird doch schon in der include gemacht??? Ja mit den Ram Adressen hast du recht ... Ich danke nochmals für die schnell Hilfe :)
Ja, hast natürlich recht. Ich nutze das include-File nicht, deshalb fehlte da für mich im ersten Moment was.
Hm ich nutze diese include Datei ich bezweifel das diese vollständig ist, da ich dort nichts von PORTC; PORTD; PORTE sehe die der 16F57 ja haben soll... LIST p=16F57 ; P16F5X.INC Standard Header File, Version 4.00 Microchip Technology, Inc. NOLIST ; This header file defines configurations, registers, and other useful bits of ; information for the 16F5X microcontrollers. These names are taken to match ; the data sheets as closely as possible. The microcontrollers included ; in this file are: ; 16F59 ; 16F57 ; 16F54 ; There is one group of symbols that is valid for all microcontrollers. ; Each microcontroller in this family also has its own section of special ; symbols. Note that the processor must be selected before this file is ; included. The processor may be selected the following ways: ; 1. Command line switch: ; C:\ MPASM MYFILE.ASM /P16F54 ; C:\ MPASM MYFILE.ASM /P16F57 ; C:\ MPASM MYFILE.ASM /P16F59 ; 2. LIST directive in the source file ; LIST P=16F54 ; LIST P=16F57 ; LIST P=16F59 ; 3. Processor Type entry in the MPASM full-screen interface ;======================================================================= === ; ; Revision History ; ;======================================================================= === ;Rev: Date: Reason: ;1.00 12/09/03 Initial release for the PIC16F54/F57 ;1.10 05/28/04 Update to add PIC16F59 ;======================================================================= === ; ; Generic Definitions ; ;======================================================================= === W EQU H'0000' F EQU H'0001' ;----- Register Files ----------------------------------------------------- INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' ;----- STATUS Bits -------------------------------------------------------- PA2 EQU H'0007' PA1 EQU H'0006' PA0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- OPTION Bits -------------------------------------------------------- T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' ;======================================================================= === ; ; Processor-dependent Definitions ; ;======================================================================= === IFDEF __16F54 __MAXRAM H'01F' ENDIF ;----------------------------------------------------------------------- --- IFDEF __16F57 ; Register Files PORTC EQU H'0007' __MAXRAM H'07F' ENDIF ;----------------------------------------------------------------------- --- IFDEF __16F59 ; Register Files PORTC EQU H'0007' PORTD EQU H'0008' PORTE EQU H'0009' __MAXRAM H'0FF' ENDIF ;======================================================================= === ; ; Configuration Bits ; ;======================================================================= === _CP_ON EQU H'0FF7' _CP_OFF EQU H'0FFF' _WDT_ON EQU H'0FFF' _WDT_OFF EQU H'0FFB' _LP_OSC EQU H'0FFC' _XT_OSC EQU H'0FFD' _HS_OSC EQU H'0FFE' _RC_OSC EQU H'0FFF' LIST Wei gesagt die Config sieht dann so aus: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC Ich hoffe das hilt dir ein wenig ... :) bin dann kurz weg.
Oh ja entschuldige der PIC hat wirklich nur PORTA, PORTB, PORTC Mein Fehler !!! Weiss nun wer wie man den PIC vernümpftig Initialisiert???
Endweder du findest eine include-Datei nur für den 16F57, schmeißt aus deiner jetzigen alles sinnlose wie PortD, PortE etc raus oder verzichtest auf Include völlig und machst es so wie von mir oben beschrieben. [picasm] __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC list p=16F57 INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' loop1 Equ 0x08 loop2 Equ 0x09 loop3 Equ 0x0a movlw 00H tris PORTA tris PORTB tris PORTC m1 bsf PORTA,0 call wait bcf PORTA,0 call wait goto m1 Wait movlw D'40' movwf loop3 M3 movlw D'250' movwf loop2 M2 movlw .110 movwf loop1 M1 nop nop nop nop nop nop decfsz loop1,f goto M1 decfsz loop2,f goto M2 decfsz loop3,f goto M3 return end [/picasm] Ich habe hier kein Assembler oder so was zum testen, aber aus der kalten heraus würde ich sagen, mit obigen Programm blinkt die LED, vorausgesetzt natürlich, ich habe nicht noch irgendwo etwas übersehen.
Da fehlte natürlich was... > PORTB EQU H'0006' PORTC EQU H'0007 > loop1 Equ 0x08
Gehört vieleicht nicht ganz zum Thema, aber meine Güte was willst du mit dieser PIC Gurke. Nimm einen 16F873 oder was noch moderneres und werd damit glücklich.
OKay Jens ich werde es morgen mal probieren ... ich werds mal brennen... Ja was will ich mit der Krücke ddas is ne gute Frage ... daraus wird nen LED CUBE der aus 5 mal 5 mal 5 Leds besteht und wo sich fast jede Led ansteuern lässt ...
>Ja was will ich mit der Krücke ddas is ne gute Frage ... daraus wird nen >LED CUBE der aus 5 mal 5 mal 5 Leds besteht und wo sich fast jede Led >ansteuern lässt ... Hast du einen Schaltplan plus Programm dafür mit PIC16F57? Falls nicht ist dieser PIC ja wohl ein Griff ins Klo. Schau dich mal bei den PIC18F um. Das ist eher das was du brauchst.
Der kleine reicht aber für meine Anwendung aus und ist exrem billig 70 CENT ... Dein PIc ist zwar ein supoer Gerät aber ich benötige die Funktionen nicht und kostet auch so um die 4-5 Euro :)
Hm Ich denke das wird schon klappen ... ja SChaltplan steht fast und das Prgrammieren ist kein Problem sowie die Initialisierung hinhaut ... vill hast du da noch eine Aanregung für mich ... und es wird nicht von einem PIC gesteuert 5 Stück kommen zum Einsatz, die dann zusammen arbeiten...
Du bist aber optimistisch ;) Das Ding hat: Einen 8Bit Timer 2 Level Call Stack 2kB Flash 78 Byte RAM Das Ding hat nicht: I2C, SPI, UART per Hardware Keine Interrupts. Schaun wir mal wie weit du damit kommst.
Die Pics können sich doch über btfss unterhalten ... das doch kein ding
So, ich habe das Programm zu Hause mal durch den Assembler gejagt und natürlich waren noch ein paar kleine Macken drin. Jetzt läuft es ohne Probleme durch. Allerdings habe ich jetzt keine Lust mehr, das auf dem Steckbrett zu testen, zumal ich den PIC nicht habe. Das kannst du ja machen ...
An deiner stelle würde ich mir das mit diesem PIC wirklich noch mal überlegen. Der 16F883 kostet bei Angelika 1,60. Bei 5 Stück wären das 4,50 mehr. Alleine deine 125 LEDs werden schon einiges kosten (zumindest wenn du blaue nimmst), da fallen die paar Euro mehr nicht ins gewicht. Du sparst dir bei der programmierung allerdings eine Menge Ärger. Alleine mit zwei Stacklevels bist du schnell an der Grenze. Und 78 Byte RAM aufgeteilt auf vier Bänke ist auch nicht sehr programmierfreundlich. Mit dem 883 hättest du diese Anzahl Bytes scon in der 1. Bank und müsstest nicht immer Umschalten. Die 883 könnten sich dann auch über UART, SSP oder I2C unterhalten. Aber probier es halt mit dem 57er. Kannst ja erst mal nur eine Ebene 5x5 ansteuern und versuchen 2-3 verschiedene Lichtmuster darzustellen. Wenn dir das gelingt und du noch Reserven hast, dann könnte dein Würfel auch was werden. Ich würde mir allerdings einen so alten PIC nicht mehr antun (genausowenig wie den 16F84). Gruß Sven
pic16f84a der wird in der Berufschule eingesetzt deshalb Und noch was Autor: Jens A: (picler) Datum: 27.08.2009 22:34 Angehängte Dateien: * LEDBlink_16F57.asm (804 Bytes, 9 Downloads) | Codeansicht das program hat immer noch Bug kp wieso kann mir einer da helfen ?????????????? THX im vorraus
reichelt elektronik GmbH & Co. KG Geschäftsführerin: Angelika Reichelt Elektronikring 1 26452 Sande Germany Alles klar?
Hallo Sascha, im Programm LEDBlink_16F57.asm wird der Reset-Vector nicht berücksichtigt. Es ist beim 16F57 bei 0x7FF. An dieser Stelle muss ein Sprung zum Programmstart erfolgen. Siehe Programm in Anhang. In /C:\Programme\Microchip\MPASM Suite\Template\Code/ gibt es Vorlagen für der einzelnen Prozessoren, in denen solche grundlegende Dinge schon drin sind. Gruß John
HAllo Könnte mir einer mit 18f45K20 helfen ich kriege net den Interrup zum laufen und bei Konfiguration weil das nimmt er net an __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & nur das nimmt er an _XT_OSC Danke im vorraus
Habe es hinbekommen Aber wegen Konfiguration weil das nimmt er net an __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & nur das nimmt er an _XT_OSC Danke im vorraus wenn einer mir da weite hilft wäre cool
Sorry Läute Ich habe Problem mit 16f737 Konfiguration das ist kann ich net kann mir einer sagen wie und wo kann ich mir das so duch lessen
>das ist kann ich net kann mir einer sagen wie und wo kann ich mir das so >duch lessen Was ist das denn für eine Sprache? Ich versuchs mal: Du dich shiessen kugel runde durch kopf deiner? >Ich habe Problem mit 16f737 >Konfiguration Nicht nur damit!
Könnte mir einer helfen den Pic16f737 zum laufen bringem mit Konfiguration weil das will er net akzeptieren LIST P=16F8737 ; Verwendeter PIC= PIC16F84a include <P16f737.INC> ; Includefile for P16F84A ;********************************************************************** ;---------- Konfiguration ------------------------------ ; bis 4 MHz: Power on Timer, no Watchdog, XT-Oscillator __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC
Wenn einer die suchen wird. Hier hier sind die PIC16f737 include <P16f737.INC> ; Includefile for P16F84A ;********************************************************************** ;---------- Konfiguration ------------------------------ __CONFIG _CONFIG1, _CP_OFF & _CCP2_RC1 & _DEBUG_ON & _VBOR_4_2 & _BOREN_0 & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC __CONFIG _CONFIG2, _BORSEN_0 & _IESO_OFF & _FCMEN_OFF ;********************************************************************** ;STARTUP Startadresse ORG 0x000 ; Prozessor goto Main ; gehe zu ;---------- Interrupt --------------------------------------- ; Hier steht die Interrupt Service Routine ORG 0x0004 goto Interrupt ; gehe zu Interrupt ;********************************************************************** Main: bsf STATUS, RP0 ; Setze in Register STATUS das Bit RP0 auf 1 movlw B'00011110' ; Speicher B'00011110' in das Arbeitsregister W movwf TRISA ; Kopiere Inhalt von W in das Register TRISA movlw B'11100000' ; Speicher B'00000000' in das Arbeitsregister W movwf TRISB ; Kopiere Inhalt von W in das Register TRISB movlw B'00000000' ; Speicher B'00000000' in das Arbeitsregister W movwf TRISC ; Kopiere Inhalt von W in das Register TRISB bcf STATUS, RP0 ; Setze in Register STATUS das Bit RP0 auf 0
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.