Forum: Mikrocontroller und Digitale Elektronik Mein ERSTER PIC (12F675), Anfängerprobleme


von Michael S. (moepat)


Lesenswert?

Hallo,
habe schon einige Beiträge durchforstet nur bin ich leider zu keinem 
positiven Ergebnis gekommen.

Also mein Problem beginnt, vermutlich, schon beim Flashen des PICs.

Ich benutze PICSTART Plus in Verbindung mit MPLAB IDE um den PIC zu 
Flashen, jetzt hab ich mir ein kleines ASM Programm geschrieben um nur 
mal eine LED zu flashen, leider Funktioniert das ganze nicht wirklich!

Mein nächster Gedanke war dass es ja an meinem Programm liegen könnte, 
darum hab ich mir mal den Code von 
http://www.bertys.ro/pic12F675/FlashLed.asm raufgeflasht, leider 
funktioniert dieser auch nicht wirklich bei mir!

Darum bin ich zu dem Gedanken gekommen, dass ich etwas beim Flashen 
falsch machen muss.
Meine Vorgehensweise:
MPLAB IDE v8.33 Starten -> mein angelegtes .mcp-Projekt öffnen -> den 
Code habe ich unter dem Ordner Source Files als .asm-Datei integriert -> 
Programmer auswählen -> Programmer Enablen -> Erase Flash Device -> 
Project>>Build All ("BUILD SUCCEEDED") -> Programmer>>Programm -> Pic in 
mein Steckbrett und Spannung einschalten!

KEINE LED leuchtet :(

Hat vlt jemand eine Idee worans liegen kann?
Is mein Erster PIC also es ist denk ich mal jeder Fehler erdenklich :(


Infos:
PIC 12F675
PICSTART Plus
MPLAB IDE v8.33

         ----uu----
+5 V ---|vdd    vss|--- GND
LED1 ---|gp5    gp0|--- LED4
LED2 ---|gp4    gp1|--- LED3
  NC ---|gp3    gp2|--- NC
         ----------

Zwischen +5V udn GND hängt noch ein 100nF Kondensator und vor den LEDs 
is ein 220R Widerstand!


Ich bin für jeden Tipp dankbar!

mfg
moep.at

von Dieter S. (accutron)


Lesenswert?

Michael,

habe das ASM-Programm nicht angeschaut, so dass ich darüber nichts sagen 
kann. Aber wenn das Flashen ohne Fehlermeldungen vonstatten geht, ist 
anzunehmen, dass das Programm auch drin ist. Hast Du mal an den Ports 
mit einem Messgerät gemessen (Oszi, Multimeter)?

Gruß

Dieter

von Michael S. (moepat)


Lesenswert?

Hallo,
ja habe ich auch schon getestet, leider kein Signal zu messen, hab an 
allesn 4 LED Pins einen Kanal vom Oszi dran hängen.

Den PIC ansich habe ich auch schon einmal getauscht.


Habe jetzt auch noch einmal versucht ein anderes Programm zu flashen:
-----------------------------------------------------------------------
  list      p=12f675           ; list directive to define processor
  #include <p12f675.inc>        ; processor specific variable
definitions
  errorlevel  -302              ; suppress message 302 from list file

  __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF &
_PWRTE_ON & _INTRC_OSC_CLKOUT


  ORG     0x000           ; processor reset vector
  goto    main            ; go to beginning of program

main  BSF  CMCON, CM0         ; GP0,1 von Comparator auf digital
       BSF  CMCON, CM1
      BSF  CMCON, CM2
      BSF  STATUS, RP0        ; Bank 1
      CLRF ANSEL              ; GP0,1,2,4 von ADC auf digital
    movlw  b'00000000'
    movwf  TRISIO
      BCF  STATUS, RP0        ; Bank0
    bsf    GPIO, 0
loop  goto   loop

    END                       ; directive 'end of program'
------------------------------------------------------------------------ 
-

leider auch ohne Erfolg.


mfg
Michael

von Jochen64 (Gast)


Lesenswert?

hast du /MCLR über einen Widerstand (10k oder so) auf Vdd gelegt? Sonst 
könnte es sein das der pin auf GND bleibt und der Controller bleibt im 
Reset.

Du hast deinen Code ja auf INTRC_OSC_CLKOUT gestellt, also internen Takt 
(~4MHz). Üblicherweise hat man noch eine Anweisung um OSCCAL mit einem 
Kalibrierwert zu beschreiben. Der werksseitig ausgemessene Wert für 
OSCCAL liegt auf der letzten Speicherzelle.

--> Such dir mal aus dem MPLAB Programmverzeichnis das passende Template 
raus, da sieht man wie das mit OSCCAL geht. Vermutlich müsste es aber 
auch so gehen, nur halt Takt ungenau.

von Dieter S. (accutron)


Lesenswert?

Michael,

wenn Du MCLRE_ON machst, muss Du Pin4 auf High setzen, sonst hast Du 
möglicherweise permanent Reset. Offen lassen sollte man Pins sowieso 
nicht.


Dieter

von Michael (Gast)


Lesenswert?

Also die Zeile
>loop  goto   loop

ist Blödsinn, da bleibt das Programm, der PIC, drin hängen und es tut 
sich extern gar nix. Der erste Programmcode ist mir nun zu lang um zu 
schaun ob es da irgendwo hängen würde, vielleicht mal Simulieren in 
MPLAB ;)

von Dieter S. (accutron)


Lesenswert?

Das ist richtig. Fatal ist, dass mehrere Fehler da sind. Es ist erst mal 
wichtig, ein lauffähiges Programm zu haben und zu laden. Dann den MCLR 
entweder zu deaktivieren oder den Pin über einen Widerstand auf High zu 
legen.

Dieter

von Michael S. (moepat)


Lesenswert?

HEy,


DANKE DANKE DANKE DANKE!

es war der Widerstand kaopauftisch


oft sinds die einfachsten dinge ;)


PS: das der Code kacke is is mir klar ;)
hab das erste mal nen Pic in der hand und wollte nur mal ne LED 
einschalten :)

von Frager (Gast)


Lesenswert?

>ist Blödsinn

Ach ja. Schon darüber nachgedacht?

>bleibt das Programm, der PIC, drin hängen und es tut
>sich extern gar nix

Aber z.B. bleiben gesetzte Ports stehen. Für einen Test ist diese 
Verwendung des goto-Befehls gängige Praxis.

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Du hast in der Config MCLRE_ON eingeschaltet. Damit sagst du dem PIC, 
das der PIn GP3 der Resetpin ist. Du musst also entweder an diesen PIN 
einen Pullup 10k Ohm gegen +5V schalten oder MCLRE_OFF schalten. Dein 
PIC Resettet vermutlich, da du den GP3 offen gelassen hast.

Gruß
Sven

... mal wieder zu spät. Man sollte halt nicht während einem Seminar 
versuchen Beiträge zu beantworten...

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.