-
        

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

Thema: PIC_16F84A - Programmfrage

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.11.2008
    Beiträge
    57

    PIC_16F84A - Programmfrage

    Anzeige

    Hallo zusammen!
    Ich hab wieder einmal ein unerklärliches Problem welches mir den kopf zerbricht.
    Programme schreibe ich mit MPLAB 8.1
    Es geht um Folgendes: Ich möchte einen Schrittmotor (unipolar) mit einem PIC ansteuern, da ich keine lust für teure Treiberschaltungen habe.
    Die vorschaltelektronik beschert mir keine Probleme sondern das Programm.
    Bevor ich den Schrittmotor ansteuere, möcht ich dies mal mit LED's simulieren.
    Dazu habe ich 8 LED's an den Port B, RB1- RB8 angeschlossen (Vorwiderstand 1K).
    Ich möchte erst alle LED's ausschalten, nachdem ich den Port B auf ausgang geschaltet habe.
    Dies sieht so aus:


    org 0x00
    goto main


    main
    bsf STATUS, RP0
    movlw B'00000000'
    movwf TRISB
    bcf STATUS, RP0
    clrf PORTB

    end



    So, jetzt müssten alle meine LED's aus sein.
    Aus unerklärlichen Gründen ist dies aber nicht so!
    Die Spannung an den halb leuchteten LED's beträgt 2,2V und wenn ein Port auf high ist, dann ist die Spannung 2,7V
    Wieso die Spannung an den NICHT ANGESTEUERTEN LED'S 2,2V beträgt kann ich mir unmöglich erklären! Die Printplatte hab ich schon tausendmal überprüft, da ist nicht der kleinste Fehler zu finden!
    Ich hoffe einer von euch kann mir sagen was da läuft!


    MfG

    Andi

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    06.06.2007
    Ort
    Aurich
    Beiträge
    36
    moin,
    hast du den pic denn richtig konfiguriert?
    Manche Ports haben mehrere funktionen und müssen erst als digitaler ausgang eingestellt werden...
    schreibe am besten die Config-Werte mit in die asm Datei, wenn man das im brennprogramm später falsch einstellt hat man sonst plötzlich fehler.
    Um den Code zu prüfen hat sih bei mir folgendes programm bewährt http://oshonsoft.com/pic.html
    Irgendwas ist immer...

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    02.11.2008
    Beiträge
    57

    PIC_16F84A - Programmfrage

    ja das hab ich doch...mit bsf STATUS, RP0 gehe ich in die band 1 dann schreibe ich den wert von W (B'00000000') in das TRISB register in dem man zwischen aus- und eingang wählen kann. ist das bit 0 so ists ein ausgang.
    und dannach kehre ich mit bcf STATUS, RP0 wieder in die bank 0 zurück wo sich der PORTB befindet, welcher ich ja ansteuere..also die linker und include datei habe ich von MPLAB genommen und der PIC stimmt mit den werten auch überein...müsste also alles gehen...aber ich schua mal was ich mit diesm programm von dir machen kann! danke viel mals!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    02.11.2008
    Beiträge
    57

    PIC_16F84A - Programmfrage

    ja das hab ich doch...mit bsf STATUS, RP0 gehe ich in die band 1 dann schreibe ich den wert von W (B'00000000') in das TRISB register in dem man zwischen aus- und eingang wählen kann. ist das bit 0 so ists ein ausgang.
    und dannach kehre ich mit bcf STATUS, RP0 wieder in die bank 0 zurück wo sich der PORTB befindet, welcher ich ja ansteuere..also die linker und include datei habe ich von MPLAB genommen und der PIC stimmt mit den werten auch überein...müsste also alles gehen...aber ich schua mal was ich mit diesm programm von dir machen kann! danke viel mals!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    Also, was mir als erstes auffeallt, du hast keine Unendlichschleife in deinem Programm. Unten ist mein Vorschlag gegen dieses Problem.

    Code:
    org 0x00
    goto main
    
    
    main
    bsf STATUS, RP0
    movlw B'00000000'
    movwf TRISB
    bcf STATUS, RP0
    
    loop
    clrf PORTB
    goto loop
    
    end
    Simulier das Programm mal mit MPSIM und schau, ob er tut was du erwartest (und zwar alle PORTB-Pins auf low ziehen). Ansonsten, schau das Datenblatt durch welche Module des PIC mit PORTB gemultiplext sind und ob diese nach einem Reset ausgeschalten sind, oder ob sie manuell abgeschalten werden müssen.
    lg
    Mobius

  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
    Hallo!

    Es könnte auch sein, dass der Watchdog aktiv ist und in regelmässigen Abständen den PIC resetet. Er solle in __config als OFF deklariert werden.

    MfG

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    02.11.2008
    Beiträge
    57

    PIC_16F84A - Programmfrage

    also den watchdog deaktiviere ich immer beim übertragen (picprog2006) und nehme den power up timer....wie soll denn dieser configurationsbefehl im quellcode aussehen?

  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
    Ich benutze nur MPASM und bei mir sieht standartmässig jeder Programmanfang so wie im Code aus.

    MfG
    Code:
    	LIST      P=16F84
    	include "P16F84.inc"
    	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    02.11.2008
    Beiträge
    57
    also ich habs genauso gemacht und auch das testprogramm von http://oshonsoft.com/pic.html hat mir geholfen, es zeigt genau das an wie es sein sollte aber in der praxis schauts leider immernoch nicht besser aus
    ich weiss echt nicht mehr was ich machen soll...kanns am pic selber liegen? dass der futsch ist oder so?

  10. #10
    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
    Es ist natürlich möglich, aber unwahrscheinlich. Es könnte auch sein, dass der Oszillator nicht arbeitet, dann kann der PIC nähmlich gar kein Programm ausführen.

    Wenn der Oszillator geht, würde ich um den PORTB zu testen, ein kleines Testprogramm (im Code) ausführen. Wenn nach dem ausführen die LEDs immer noch leuchten, dann ist der PIC leider kaputt.

    Ich nehme an, dass jede LED mit Vorwiderstand zwischen PORTB Pin und GND geschaltet ist.

    MfG
    Code:
       LIST      P=16F84a
       include "P16F84a.inc"
       __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
       org 0x00
       clrf PORTB
       bsf STATUS, RP0
       movlw 0
       movwf TRISB
       bcf STATUS, RP0
       sleep
       end

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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