Hallo zusammen , Wir haben in der Schule folgendes Projekt. Wir sollen eine Steuerung für eine Säge mit automatischer Stangenzufur machen.Haben uns eine Test Platine gebastelt an der wir 6 Drucktaster und 4 Led´s angelötet haben. Die Taster dinen uns als eingänge die LEDS als Ausgänge nur um zu sehen ob alles richtig läuft. Die Taster sind an die IO´s und an die Masse gelötet. die leds an die IO´s und Masse dazwischen 1k Widerstände. Also etwas ganz einfaches. Haben mit Mühe das Programm in mp lab gemacht das ich als .txt Datei angehängt habe.Noch dazu sind wir Anfänger in sowas also Bitte falls Antworten kommen dan auch genau sagen was gemeint ist . Dieses programm haben wir dan mit dem Brenner von sprut in den pic geladen aber es tut sich nix. BItte bitte ..wo könnte der/die Fehler sein ??
Ne, MCLR ist auch über einen Taster an die Masse angeschlossen. Der Taster ist aber offen.Heist also ich kann MCLR mit der Masse verbinden wenn ich will.Dachte so geht das Restten des pics.
Kann mal ein Testprogramm schicken. Muß nur wissen welche LEDs sollen an sein, und welcher Quartz hast du verwendet ?
Die Main muss immer in einer Schleife laufen, bei dir macht sie das 0x20 mal und dann ? springt der PIC ins leere. Also vor dem end ganz unten müsste zumindest noch ein Sprung auf sich selbst erfolgen oder eben wieder zu main. halthier: goto halthier ;lässt ihn anhalten Fang doch mal vorne an, du initialisierst PORT D als Ausgang und löschst alle LED. Schalte sie doch mal ein und lass dein Programm stoppen (z.b. mit so einem Goto auf sich selbst) und schaue ob es bis dahin geht. Wir wissen auch nichts über die Beschaltung, der MCLR sollte übrigends nicht direkt an +5V sondern am besten über einen Widerstand (ca. 2,2k-4,7k) Hast du Quarz dran, entsprechende Kondensatoren, was für eine Spannungsquelle ? Config Werte ? Holger
Okay Leute von Anfang an. Quartz? Hat der pic nicht einen Internen den man benutzen kann? Habe nämlich garkeinen angeschlossen. Das Programm kann ich auch so ändern das die LED´ leuchten. Das mit den Quartz war mir von anfang an nicht einleuchtend und meine Vermutung war auch das es damit zutun haben könnte.
Wenn du die LEDs leuchten lassen kannst ist das doch schon was. Dann im Programm schrittweise vorgehen und jede Funktion prüfen durch LED ein/aus/toggeln. Ja der sollte einen internen Oszillator haben. Aber wir kennen deine config ja nicht. Holger
d.caine schrieb: > Haben mit Mühe das Programm in mp lab gemacht das ich als .txt Datei > angehängt habe. Ja, sieht noch ein bissel sehr anfängerig aus. Mach dir beim Assemblerprogrammieren mit den PIC16Fxxx am besten eine Art Vorlage, die du dann immer benutzt, etwa so: (an den verwendeten Assembler notfalls anpassen) INCLUDE P16F877.PIC SEG CODE ; Fuse-Konfiguration ORG 2007h ; DCBA9876543210 DATA 11111101000110b ; - 00=LP 01=XT 10=HS 11=RC ; --- 1=WDT enable ; ---- 0=PWTE enable ; ----- 00=prot.all ; 01=upper3/4prot ; 10=upper1/2prot ; 11=unprotected (die Fuses hab ich grad nicht auswendig gelernt) ; ID-Konfiguration ORG 2000h DATA 1 ; na eben was du hier willst DATA 2 DATA 3 DATA 4 ; EEPROM-Vorgaben ORG 2100h MyByte: DATA irgendwas MyStr: DATA 'hallihallo',0 ; Code-Beginn ORG 0 CLRF Status ; alle Flags (ohne Z) löschen CLRF PCLATH GOTO Start ORG 4 ; Interrupt-Routine ; ================= Interrupt: MOVWF RetteW ; W retten SWAPF Status,W ; Flags in W holen .. hier kommt alles rein, was die Interrupts behandelt ; Interrupt-Ende: Flags & W restaurieren I.End: SWAPF RetteFlags,W ; gerettete Flags in W MOVWF Status ; Flags restaurieren SWAPF RetteW,F ; W restaurieren SWAPF RetteW,W RETFIE Start: hier schreib, was du halt brauchst immerzu: hier schreib, was der PIC immerzu tun soll GOTO immerzu END Und nochwas: Rücke ein und benutze Ausdrücke. Also nicht so MARKE2 DECFSZ 0x20,1 ;Wert 1 von Wert in 0x20 abziehen sondern (ebenfalls wieder assemblerspezifisch) SEG RAM ORG 20h MyCounter: DS 1 MyLongInt: DS 4 und dann im Code Marke2: DECFSZ MyCounter,F Wenn dein Assembler keine Segmente (SEG xxx) und Reservierung von Speicherplatz (DS nn) versteht, dann mußt du leider mit MyCounter: EQU 20h MyLongInt: EQU 21h zurechtkommen oder noch schlimmer #define MyCounter 0x20 schreiben. Wenn dein Assembler nicht ,W und ,F versteht, dann deklarierst du das dir lieber selber, denn damit wird der Code lesbarer und für dich auch übersichtlicher. Nochwas zur Hardware: Gerade die 16Fxxx PIC's sind eigentlich sehr gutmütige Gesellen. Aber man sollte an beide VCC-Beine je einen Stütz-Kondensator (z.B. 100 nF) schalten und MCLR mit ca. 10 kOhm auf VCC ziehen und zugleich mit ca. 2.2 nF gegen GND abblocken. Ansonsten braucht der PIC natürlich einen Takt, den man entweder per Quarz oder per Keramikschwinger macht. Zum Programmieren ist es gut, RB3 dezent auf GND zu ziehen (10..22 kOhm), damit er nicht aus Versehen in den LoVolt-Programmiermodus gerät. RB6 und RB7 kann man benutzen, wenn man sie als Ausgänge verwendet, ansonsten sind Entkoppel-Widerstände nötig. PIC's haben starke Portpins, also sollte man vermeiden, damit kapazitive Lasten (z.B. MOSFETS) damit direkt zu treiben. Bei sowas ist ein Entkoppel-R nötig. W.S.
hi beim groben rüber schauen einen Fehler gefunden ;-) clrw PORTD ;Alle LED´s aus das heißt clrf, zum tehma Template nutze folgendes das macht das alles übersichtlicher: http://www.grautier.com/grautier/archives/87-ASM-PIC16xxx-Template.html
@ d.caine Hallo Schau Dir mal Deine Initialisierung an! Es fehlt das CONFIG-WORT (s. u.) Nach dem Reset werden die Ausgänge an den PORTS als ANALOGE EINGÄNGE initialisiert. Dazu müssen im Register ADCON die I/O von analog auf digitale I/O umgestellt werden. Es ist immer gut das Datenblatt zu lesen! EXAMPLE 3-1: INITIALIZING PORTA FIGURE 3-1: BLOCK DIAGRAM OF RA3:RA0 AND RA5 PINS FIGURE 3-2: BLOCK DIAGRAM OF RA4/T0CKI PIN NOTE: On a Power-on Reset, these pins are con- figured as ANALOG inputs and read as '0'. BCF STATUS, RP0 ; BCF STATUS, RP1 ; Bank0 CLRF PORTA ; Initialize PORTA by clearing output data latches BSF STATUS, RP0 ; Select Bank 1 MOVLW 0x06 ; Configure all pins MOVWF ADCON1 ; as digital inputs MOVLW 0xCF ; Value used to initialize data direction MOVWF TRISA Set RA<3:0> as inputs RA<5:4> as outputs ; TRISA<7:6>are always read as ’0’. Weiterhin fehlt das CONFIG-WORT (bei AVR auch Fuses genannt) list p=16f877 ; list directive to define processor #include <p16f877.inc> ; processor specific variable definitions _CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF ; '__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. Im Ordner von MPLAB einfach mal nach einem Beispiel-ASM-File suchen (für jeden PIC ist dort eines niedergelegt!), dann werden die gröbsten Fehler vermieden mfG Ottmar
SO Leute Ich danke euch für eure Hilfe.Habe die meisten Vorschläge befolgt, und nun funktioniert alles wie sein soll. Die Testplatine habe ich auch verbessert, also erstmal ein Keramikresonator drangelötet da war dann auch erst leben in dem Käfer. :-) Naja....aller Anfang ist schwer. DANKE DANKE an alle die sich Mühe gegeben haben. Der Thread kann geschlossen werden. Gruss caine
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.