-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: pic 12f675 geht nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2009
    Beiträge
    19

    pic 12f675 geht nicht

    Anzeige

    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.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2009
    Beiträge
    19
    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!?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    522
    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

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2009
    Beiträge
    19
    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.

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2009
    Beiträge
    19
    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?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken leds_pull_up.jpg  

  8. #8
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo martini007!

    Wenn GP4 immer low ist und sogar wenn im PIC geprüftes Programm sich befindet, ist der PIC kaputt.

    MfG

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2009
    Beiträge
    19
    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:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken io_test.jpg  

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    522
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •