Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

Palun abi koodi kontrollil

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    Palun abi koodi kontrollil

    Tere.

    Jupp aega mässanud ühe vana jupiga aga ei saa eluvaimu sisse. Rauapool peaks nagu korras olema enda arust. Kas keegi võiks koodile pilgu peale visata, äkki seal midagi kahe silma vahele jäänud?

    Peaks siis juhtima PORTA pinide 0-3 kaudu kahte mootorit. Kummagi mootori jaoks kaks pinni, üks lülitab mootorit sisse välja, teine määrab pöörlemise suuna.

    Probleemiks siis see, et pici pinnid jäävad LOW hoolimata koodist ja mootorid käima ei hakka. Programmaatoriks PicKit 2 ja proovisin ka in-circuit-debug modes, aga ei miskit.

    Kood:
     
    #include "p16f876a.inc"
    LIST P=16f876a
    errorlevel -302 ;Suppress bank warning
    __CONFIG _WDT_OFF & _XT_OSC & _CP_OFF & _LVP_OFF
     
    cblock 0x20 ; local variables, only in bank 0
    WCYCLE
    endc
    ;*************************************
    ;****** Define stuff *****************
    ;*************************************
    #define RMotor_Dir PORTA,0
    #define Enable_RMotor PORTA,1
    #define Enable_LMotor PORTA,2
    #define LMotor_Dir PORTA,3
     
    ;*****Declaring constants*****
    CONSTANT PRESCstd=b'00000001' ; Standard prescaler value for TMR0
     
    ;*************************************
    ;*****Let's get started***************
    ;*************************************
    org 0x00 ; reset vector -- executed on reset
    goto Start
    ;===================================================================
    ; Interrupts 
    ;===================================================================
    Interrupt org 0x04 ; interrupt vector 
    retfie
     
    ;********Macros***********
    ;***** Bank *****
    BANK0 MACRO
    BCF STATUS,RP1
    BCF STATUS,RP0
    ENDM
    BANK1 MACRO
    BCF STATUS,RP1
    BSF STATUS,RP0
    ENDM
    BANK2 MACRO
    BSF STATUS,RP1
    BCF STATUS,RP0
    ENDM
    BANK3 MACRO
    BSF STATUS,RP1
    BSF STATUS,RP0
    ENDM
    ;***** Wait *****
    WAIT macro timeconst_1
    movlw timeconst_1
    call WAITstd
    endm
    WAITX macro timeconst_2, PRESCext
    movlw timeconst_2
    movwf WCYCLE
    movlw PRESCext
    call WAIT_x
    endm
     
    ;****The main program*****
    Start
    BANK0
    CLRF PORTA ; Initialize PORTA by
    ; clearing output
    ; data latches
    BANK1
    MOVLW 0x06 ; Configure all pins
    MOVWF ADCON1 ; as digital inputs
    MOVLW 0xF0 ; Value used to 
    ; initialize data 
    ; direction
    MOVWF TRISA ; Set RA<5:4> as inputs
    ; RA<3:0> as outputs
    ; TRISA<7:6>are always
    ; read as '0'.
    MAIN
    bsf RMotor_Dir
    bsf Enable_RMotor 
    WAIT .100
    bsf LMotor_Dir
    bsf Enable_LMotor
    WAIT .100
    CLRF PORTA
    goto MAIN
    ;****Subprograms****
    WAITstd
    movwf WCYCLE
    movlw PRESCstd
    WAIT_x
    clrf TMR0
    BANK1
    movwf OPTION_REG
    BANK0
    WAITa
    bcf INTCON,T0IF
    WAITb 
    btfss INTCON,T0IF
    goto WAITb
    decfsz WCYCLE,1
    goto WAITa
    return
     
    END
    viimati muutis kasutaja raitl; 17 m 2008, 07:12.
    Oota! Las ma teen seda natuke paremaks...

    #2
    Vs: Palun abi koodi kontrollil

    Minu meelest puudub sul enne main'i käsk BANK0. Proovi sellega!
    Asi selles, et sa lülitad pangale 1 ja jäädki sinna. Nii aga ei saa pordi väljundregistrit juhtida.
    - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
    - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

    Comment


      #3
      Vs: Palun abi koodi kontrollil

      Nii, korrigeerisin selle ära ja tundus et esimese hooga isegi tahtis asi toimida. Kuid delayd olid liiga lühikesed ja nii tekitasidki mootorid ainult sirinat. Aga kui hakkasin TMR0 prescalerit muutma, siis peale seda saabus vaikus majja ja taas isegi esialgse koodiga enam ei toimi. Nüüd siis BANK0 ikka õiges kohas peale TRISA seadmist...

      Kui programmaator ilusasti kivi ei loeks ja ei kirjutaks, siis hakkaks kartma et raua viga. Aga peale progemist on verify OK.

      No ei saa aru. Ladusin teise prose ilma lisakomponentideta Project Boardile kokku, ainult resonaatori ja MCLR pull-up'i panin paika. progesin ilusasti ära ja lasin toite peale. Siis asusin testriga PORTA jalgu jälgima. No mitte kui midagi ei toimu...
      viimati muutis kasutaja raitl; 17 m 2008, 23:24.
      Oota! Las ma teen seda natuke paremaks...

      Comment


        #4
        Vs: Palun abi koodi kontrollil

        Vaata ossiga. Kui seda pole, sea viiteaeg pikemaks et tester jõuaks reageerida. Sinu prosel vist ei ole analoog-komparaatorit? Kui siiski on, tuleb see välja lülitada (CMCON=0x07).
        Kui muu ei aita, tõsta asjad PORTB külge. See toimib ilma lisa-imevidinateta.
        - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
        - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

        Comment


          #5
          Vs: Palun abi koodi kontrollil

          Täpselt sama tulemus ka PORTB puhul... Tulemus null... Sättisin PORTB väljundid püsivalt kõrgeks, ikka ei midagi. Kahjuks mõõteriistadest ainus kättesaadav seesama multimeeter.
          Oota! Las ma teen seda natuke paremaks...

          Comment


            #6
            Vs: Palun abi koodi kontrollil

            Kui sa nüüd kuidagi valesti ei mõõda või tester vigane ei ole, peab asi olema ikkagi koodis. Viska kood uuesti üles, vaatame.
            - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
            - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

            Comment


              #7
              Vs: Palun abi koodi kontrollil

              Selline on siis viimane kood mida proovisin. Skeemis lisaks picile:

              resonaator, takisti+diood MCLR jalale, skeemi isoleerivad 10k takistid jalgadel PGD ja PGC ning 16v 100uF lüüt toites.

              Kood:
               #include "p16f876a.inc"
               LIST P=16f876a
               
               errorlevel      -302    ;Suppress bank warning
               
               __CONFIG _WDT_OFF & _XT_OSC & _CP_OFF & _LVP_OFF
               
               cblock 0x20   ; local variables, only in bank 0
               endc
               
              ;*************************************
              ;*****Let's get started***************
              ;*************************************
               
              org  0x00  ; reset vector -- executed on reset
               goto Start
               
              ;===================================================================
              ; Interrupts    
              ;===================================================================
               
              Interrupt  org  0x04   ; interrupt vector 
                  retfie
               
               
              ;***** Macros *****
               
              BANK0  MACRO
                BCF STATUS,RP1
                BCF STATUS,RP0
                ENDM
               
              BANK1  MACRO
                BCF STATUS,RP1
                BSF STATUS,RP0
                ENDM
               
              BANK2  MACRO
                BSF STATUS,RP1
                BCF STATUS,RP0
                ENDM
               
              BANK3  MACRO
                BSF STATUS,RP1
                BSF STATUS,RP0
                ENDM
               
               
               
              ;****The main program*****
               
              Start
               
               BANK0
               CLRF PORTB   ; Initialize PORTB
               
               BANK1
               MOVLW 0xFF   ; Set all PORTB Output
               MOVWF TRISB  
               BANK0
               
               MOVLW 0xFF
               MOVWF PORTB  ; Set all PORTB Output HIGH
               
              ;***** Simple loop ******
              MAIN
               
                nop
               
               goto MAIN
               
               
               
               
               END
              Oota! Las ma teen seda natuke paremaks...

              Comment


                #8
                Vs: Palun abi koodi kontrollil

                1. Koodi kirjutaja on vist AVRi fänn, PICil on TRIS registri bitt =1 tähendusega "pin on SISEND". Seega oled PORTB kõik otsad sisendiks defineerinud. Mõni ime siis et midagi huvitavat ei juhtu...
                AVRil on minu teada tõesti vastupidi.
                2. Main tsükli alguses tuleb lülituda mälupangale 0. OK, Su kood ei tee midagi ja hetkel see tõesti ei mõju aga ...hiljem unustad...
                3. Resonaator...mitte kvarts siis? Kvarts oleks parem. Kas tollel PICil sisemist generit ei olegi ?
                Mis takid PORTB,.7 ja .6 otstelt toitesse lähevad? NAd ei sega aga vaja neid ka ei ole.
                MCLR pinni saab konfi bittidega disableda ja siis pole ka sinna takistit vaja (reseti nupu ühendamise võimalus kaob ka, tõsi küll).
                - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                Comment


                  #9
                  Vs: Palun abi koodi kontrollil

                  Niimoodi siis...

                  1. Sisendid sain nüüd TRIS registris õigesti paika.
                  2. BANK0 sai MAIN tsükli ette kirja
                  3. Tegu ikka jah kvartsiga, sellise 4.00 Hz kolmjalaga

                  Takid ei lähe mitte toitesse, vaid isoleerivad PORTB 6. ja 7. jalga süsteemist. Nagu soovitab Microchipi ICSP juhend. Et saaksin neid kasutada ka millekski muuks kui ainult ICSP.

                  Tulemuseks igastahes nüüd see, et PORTB,0 püsib HIGH. Teised ikkagi LOW
                  Oota! Las ma teen seda natuke paremaks...

                  Comment


                    #10
                    Vs: Palun abi koodi kontrollil

                    Kui prosel jookseb sama kood, mis siin viimasena, siis nii peabki olema. A-porti sa ju ei initsialiseeri ja ei torgi muud moodi ka. Vaikimisi on port vist A/D-ga ühendet.
                    PORTB tõstad ise kõrgeks...jällegi nii nagu peab.
                    Kvartsid on enamasti 2 jalaga. Mõnedel on tõesti maaklemm ka. Kui muu ei aita, siis proovi tavaline kvarts skeemi tinutada. Paistb et sul on ikka keraamiline resonaator ja see võib jamada (prose ei käi).
                    - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                    - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                    Comment


                      #11
                      Vs: Palun abi koodi kontrollil

                      Mitte terve PORTB pole HIGH, vaid ainult PORTB,0 ehk siis RB0. Ülejäänud PORTB väljundid on LOW. Ja neid resonaatoreid olen eelnevalt ilusasti kasutanud sama prosega. Mul on skeemi joodetud kolmene aukliist kuhu pistan siis resonaatori sisse. Et saaksin vajadusel ilma jootekolvita vahetada.


                      Aga äkki oleks kõige õigem, kui keegi saaks anda mingi minimalistliku koodi 16f876A jaoks mis on kindlalt toiminud ja mille toimimist oleks ka lihtne kontrollida.

                      Kõrvetaks lihtsalt sisse ja vaataks kas asi toimib.
                      Oota! Las ma teen seda natuke paremaks...

                      Comment


                        #12
                        Vs: Palun abi koodi kontrollil

                        Vahelduseks ka natuke positiivset.

                        Tundub, et hakkas tööle asi. Mootorite pinin oli tingitud sellest, et mootoreid juhtiv kivi nõuab minimaalselt 4.5V mootorite toitesse, mul aga oli 3.6V süsteemi toiteks.

                        Arusaamatuks jääb nüüd vaid veel see, miks tester ei näidanud midagi PORTB jalgadel.
                        Oota! Las ma teen seda natuke paremaks...

                        Comment


                          #13
                          Vs: Palun abi koodi kontrollil

                          Sain siis vahepeal asja kuigipalju toimima kui viisin kogu süsteemi 4.8V peale. Aga siis selguski tõsiasi et mootorid resetivad pici. OK, tegelesin selle probleemi lahendamisega ja nüüd kui tahtsin uuesti katsetada...probleem.

                          Nimelt ei saa ma enam oma 16f876-te progeda ega ka kustutada. Loeb ilusasti, vana kood on peal aga kustutada ega ülekirjutada ei saa. Proovisin nii PicKit 2 softiga kui MPLAB IDE-ga. Olen proovinud toidet peale anda nii progejast kui süsteemist.
                          Oota! Las ma teen seda natuke paremaks...

                          Comment


                            #14
                            Vs: Palun abi koodi kontrollil

                            Nii käitub muu hulgas tuksis prose. Olen isegi 2 niiviisi 12V toitega läbi lasknud. Kivid töötavad v.a. see viik, kuhu 12V läks. Lugeda lubab, progeda/kustutada enam mitte. Kivi oli 16F648.
                            Teisest teemast võis teha järelduse, et su skeemi toitesse vüis (mootoritelt) tulla kõrgema pinge impulsse. See seletaks küll.
                            Kontrollida võiks nii et
                            - sama progejaga kirjutad mõne teise PICi
                            - võtad kivi plaadilt ja ühendad vaid progemiseks vajaikud 5 koiba - kui ei siis on tuksis.
                            - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                            - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                            Comment


                              #15
                              Vs: Palun abi koodi kontrollil

                              hmm....müstika...

                              1) Lugesin hex faili pickit 2 softiga ära.

                              2) Sealsamas programmiaknas muutisn paar väärtust ära ja kirjutasin - toimis

                              3) proovisin erase chip teha, ei mõjunud

                              4) proovisin mõne väärtuse asendada tühjusega (3FFF) Ei kirjuta?


                              Ühesõnaga olemasolevaid väärtusi muuta saan, tühja kohapeale uusi väärtusi kirjutada samuti saan, olemasolevat "mälukohta" tühjendada ei saa!
                              Oota! Las ma teen seda natuke paremaks...

                              Comment

                              Working...
                              X