Archiv verlassen und diese Seite im Standarddesign anzeigen : pic 12f675 geht nicht
martini007
25.11.2009, 17:15
Hallo zusammen,
der ein oder andere hat vielleicht schonmal einen meiner Beiträge gelesen und geht wieder um meinen pic 12f675. Naja mitlerweile probiere ich schon mit 2en des gleichen Modells.
Also das Problem ist einfach, dass sich die Pics nicht mehr beschreiben lassen. Ich verwende das PIC PROGRAMMER BOARD von Velleman.
Bei dem ersten hängt er beim Auslesen des OSCCAL-Registers und den zweiten erkennt er nicht mehr. Letzteren habe ich bisher nur einmal mit folgendem Programm beschrieben:
list P=12F675
#include "P12F675.inc"
nolist
errorlevel -302
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
org 0x00
call Init
main
movlw B'00000101'
movwf GPIO
loop
goto loop
;-------------------------------------------------------------------------------------------
Init
bsf STATUS,RP0
call 0x3FF
movwf OSCCAL
bcf OPTION_REG,7
movlw B'11110000'
movwf TRISIO
clrf ANSEL
clrf INTCON
bcf STATUS,RP0
clrf GPIO
movlw 7
movwf CMCON
return
end
Aber es ist nichts passiert, also am Ausgang war '0'.
Jetzt habe ich das Programmer Board nochmal auf Funktionalität überprüft und alle Lötstellen scheinen OK zu sein und auch das Diagnoseprogramm, eine kleine LED-Leucht-Sequenz funktioniert. Die INC-Datei befindet sich im selben Ordner wie die ASM-Datei, also richtig kompiliert hat er.
Das Programm an sich habe ich mit MPLAB simuliert und da hat es funktioniert.
Das Problem verfolgt mich nun schon eine halbe Ewigkeit und ich war wirklich lange geduldig aber so langsam steigt die Lust auszuprobieren, ob ich mit dem ganzen Kram in die 3 Stockwerke tiefer liegende Mülltonne treffe.
Also wenn jemand eine Idee hat, woran das liegen könnte, oder was ich noch probieren könnte, wäre ich sehr dankbar.
martini007
25.11.2009, 21:41
Ich habe noch was ausprobiert und zwar habe ich jetzt die PICPgm Software benutzt, obwohl sie eigentlich nicht für meinen Programmer gedacht ist.
Der 2. PIC wird wie schon bei der anderen Software nicht erkannt.
Der erste wird jetzt beschrieben aber zum Ende hin, gibt die Verifizierung eine Fehlermeldung aus.
Hab ein paar LEDs angeschlossen und den PIC getestet und es tut sich nun zumindest etwas. Das Programm sieht so aus:
list p=12f675
include "p12f675.inc"
small_delay_tmp equ 0x20
long_delay_tmp equ 0x21
goto main
small_delay:
movlw 0xff
movwf small_delay_tmp
small_delay_L1:
decfsz small_delay_tmp, F
goto small_delay_L1
return
long_delay:
movwf long_delay_tmp
long_delay_L1:
call small_delay
decfsz long_delay_tmp, F
goto long_delay_L1
return
main:
bcf STATUS, RP0
clrf GPIO
movlw 0x7
movwf CMCON
bsf STATUS, RP0
movlw 0x0
movwf TRISIO
bcf STATUS, RP0
infinite:
bcf GPIO, GP0
movlw 0x82
call long_delay
bsf GPIO, GP0
movlw 0x82
call long_delay
goto infinite
end
GP0 blinkt tatsächlich aller paar Sekunden auf. Und zwar blinkert zunächst GP5 ein paar mal kurz auf und dann GP0 einmal kurz. Das ganze aller paar Sekunden und manchmal auch nicht ganz regelmäßig.
Jetzt habe ich das Programm leicht abgeändert sodass es nun folgendermaßen aussieht:
list p=12f675
include "p12f675.inc"
goto main
main:
bcf STATUS, RP0
clrf GPIO
movlw 0x7
movwf CMCON
bsf STATUS, RP0
movlw 0x0
movwf TRISIO
bcf STATUS, RP0
infinite:
bcf GPIO, GP0
;movlw 0x82
goto infinite
end
Jetzt passiert gar nichts mehr. GP0,GP1,GP2,GP5 = 0,4V; GP3 = 0,8V; GP4=0V; also alles wie im Rohzustand außer das GP4 = 0V ist.
Aber leuchten tut natürlich nichts, obwohl GP0 high sein sollte.
Was könnte das sein - PIC kaputt, Programmerboard kaputt?
Und was ist mit dem Programmcode, ich dachte für den 12f675 muss man das ANSEL-Register setzen!?
Hallo Martini Bond,
in der MPLAB Simulation wollte dein Programm bei mir auch nicht funktionieren,
bis ich die Zeile #include "P12F675.inc"
hinter die __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT Zeile geschoben habe.
Dann funktioniert deine erste Version aber, zumindest im Simulator.
Ich hoffe, Du hast die __config Zeile nicht weggelassen.
Du kannst Dir ja mal das JINGLE BELLS Programm Downloaden.
Dieses Programm kannst Du in den PIC brutzeln, dann sollte es laufen.
Da blinken ja 4 Leds. Dieses Programm ist getestet und müste in deinem PIC laufen. Probiere es doch mal aus. Die Pinbelegung für den PIC steht in der Datei JINGLE.ASM
Vielleicht ist ja wirklich dein Programmer kaputt.
Übrigens in deiner letzen Version hast Du GP0 auf LOW gesetzt mit "bcf" schreibst aber im Text der Pin sollte High sein.
mfg. Siro
Hallo!
@ martini007
Dein Problem, dass mit geprüftem Programm gebrannter PIC nicht läuft, kann wirklich auch am Brenner liegen. Am einfachsten kann man das prüfen, wenn man das angeblich gebranntes Programm anschliessend liest. Wenn das eingelesenes Programm mit dem gebranntem übereinstimmt, ist der Brenner i.O. und der PIC kaputt, oder umgekehrt. Im schlimmsten Fall können beide kaputt sein.
MfG
martini007
26.11.2009, 18:51
Hallo,
vielen Dank erstmal, dass ihr euch damit beschäftigt habt!
Ich glaube langsam auch das es an dem Programmerboard liegt.
Vielleicht ist auch der USB-Konverter schuld aber andererseits hatte es ja
schonmal funktioniert.
Das mit dem "bsf" und deinem Jingle - Programm werde ich noch ausprobieren ;-)
Übrigens ist dem Oscillator momentan nicht zu trauen, da er keinen vernünftigen Wert in 3FFF finden wird, denn durch das ganze fehlerhafte Beschreiben, wird dieser Wert wohl verlorengegangen sein. Man kann den natürlich wieder neu kalibrieren aber erstmal sollten die rudimentären Sachen funktionieren.
Wenn der Wert von OSCCAL verloren gegangen ist wird der interner Oszillator auf nicht von Microchip kaliebrierter Frequenz oszillieren.
Übrigens, ich habe mir auf jedem PIC mit internem Oszillator den OSCAL Wert vorm Brennen ausgelesen und auf jedem PIC notiert.
MfG
martini007
30.11.2009, 21:15
Den OSCCAL Wert vorher auszulesen ist zweifelslos eine gute Idee, ich wünschte, ich hätte sie auch gehabt ;-)
Ich habe das Problem gefunden! Es lag an dem Parallel-Seriell-Konverter, den ich brauchte, um mit meinem Laptop, der ja nur USB-Anschlüsse besitzt, auf die COM-Schnittstelle vom Programmierboard zu kommen. Irgendwie scheint dieses nicht dafür geeignet zu sein. Ich weiß das jetzt, weil ich es an einem Computer mit COM-Anschluss ausprobiert hatte und es funktionierte reibungslos und schnell. Auch das Programm lies sich nach dem Beschreiben wieder auslesen, sodass davon auszugehen ist, das es sich auf dem PIC befindet.
Hab das ganze jetzt nochmal mit Pull-Up Wiederständen versucht aber leider ohne Erfolg. Das Programm sieht wie folgt aus:
#include "p12F675.inc"
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF
ORG 0x00
nop
nop
goto Main
Main:
bsf STATUS,RP0 ; Bank 1
call 0x03FF
movwf OSCCAL
movlw B'00001000' ; GP3 input, alle anderen Output
movwf TRISIO
clrf ANSEL ; ADU ausschalten
clrf OPTION_REG ; alle Pullups ein
movlw 0xFF ; alle Pullups weak
movwf WPU
;movlw B'10000000' ; b7=1: GPIO pull-ups are disabled
;movwf OPTION_REG
bcf STATUS,RP0 ; BANK 0
movlw 7 ; Komparator aus, alles Digital IO
movwf CMCON
clrf GPIO
bsf GPIO,0 ; LEDs schalten
bcf GPIO,1
bsf GPIO,2
bsf GPIO,4
loop:
nop
goto loop
end
Merkwürdigerweise ist GP4 immer LOW. Ich habe das Programm noch etwas abgeändert und auch andere Programme draufgebrannt, jedoch passiert immer das selbe: GP4 leuchtet und alle anderen nicht.
Hat vielleicht jemand eine Ahnung was meinem langersehntem Bestreben ein paar lächerliche LEDs zum funkeln zu bringen, jetzt noch im Wege steht?
Hallo martini007!
Wenn GP4 immer low ist und sogar wenn im PIC geprüftes Programm sich befindet, ist der PIC kaputt.
MfG
martini007
01.12.2009, 13:01
ich habe es mit zwei pics probiert und es passierte das gleiche.
Liegt es vielleicht an der Initialisierung meiner Programme?
Ich habs mit und ohne Pullups probiert aber irgendwie klappt beides nicht.
Ich hatte meinem letzten Beitrag eine Grafik angehängt aber die wurde wohl nicht eingebunden. Also hier nochmal meine Schaltung:
Hallo nochmal,
deinem Programm nach müste die LED an GP1 leuchten, da Du nur diesen Pin in deinem Programm auf Low gesetzt hast. bcf GPIO,1
die anderen Pins müsten High sein.
GP3 ist ein "NUR EINGANG" und den hast Du nach Masse gelegt, ist auch Okay. Deine Configurationszeile __config ist auch Okay, ich hab in meinem Jingle Bells genau die gleiche Konfiguration.
In der MPLAB IDE funktioniert dein Programm auch, es wird die LED an GP1 eingeschaltet.
Kann es ein, daß Du ein Kurzschluss zwischen Pin3 und Pin 4 hast ?
ist eigentlich die einzige Möglichkeit, warum GP4 auf LOW liegt.
Prüf das doch bitte nochmals ganz genau...
mfg Siro
Hallo schon wieder...
So, nun hab ich deine Software mal in meinen PIC gebrannt.
Lies mir doch keine Ruhe...
Es ist, wie ich es geschrieben habe. Die LED an GP1 leuchtet.
Es leuchtet aber auch die LED an GP5, das rührt daher, daß Du bei der Initialisierung clrf GPIO geschrieben hast. Damit ist GP5 auch LOW und wird ja dann nicht weiter gesetzt. Deine Software ist also insofern korrekt, da brauchst Du nun nicht weiter suchen. Wenn die LEDs an GP1 und GP5 mit deiner letzten Software leuchten, hast Du es geschafft. Kann also nur noch an der Hardware liegen. GP4 ist High, habe ich gemessen.
Viel Spass dann noch....
Siro
martini007
01.12.2009, 19:05
hey danke siro!!! du kannst dir gar nicht vorstellen, wie mir das hilft.
Also ist wahrscheinlich das blöde Programmiergerät schuld und ich bin doch nicht verrückt ...
Kannst du mir vielleicht ein fertiges Programmiergerät mit USB-Anschluss empfehlen, dass wenns geht, nicht zu teuer ist?
Hallo Martini007,
bei der Firma Olimex gibt es Programmer.
Olimex.com
Development boards and Tools
PIC-ICD2-POCKET MPLAB-ICD2 compatible programmer/debugger with USB interface ca. 50 Euro
leider nicht ganz billig.
Aber Vorsicht, ich habe so ein Teil gleich zerschossen.
Hatte an dem 4 poligen Stecker ein Kurzschluss und dann "roch" das Teil merkwürdig
und verweigerte ab sofort seine Dienste.
Aber super schnell das Teil. Programmiert alle Bausteine zig mal schneller als der "Riesen Programmer PM3" von Microchip, welcher mal locker 600 Euro kostet.
ich hoffe ich habe hier keine unerlaubte Werbung gemacht.
oder schau mal hier rein:
http://www.sprut.de/electronic/pic/brenner/index.htm
Siro
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.