Teade

Collapse

Foorumi reeglid.

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

PIC12F629 Kood

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

    PIC12F629 Kood

    Tere,
    Kas keegi abivalmis inimene oleks nõus kirjutama koodi sellise asja jaoks.

    Ülesanne:
    *Skeem ei mitte midagi kui prose GP2 ots on mass.
    *Kui vajutada lülitit S2 siis rakenduvad releed üks ja kaks.
    *Releed üks ja kaks on koos seni kui vabastada lüliti S2.
    *Relee kolm rakendub ka kui vajutada lülitit S2 aga tingimusel ,et lüliti S1 on avatud.
    *Relee kolm rakendub ainult 5 sekundiks.
    *Kui prose otsale GP3 tuleb signaal siis relee 3 kohe katkeb.

    Asi läheb kasutusse auto süüte ja starteri juhtimiseks. Senine süsteem oli lihtsalt taimeri ja releede peal üles ehitatud. Aga tahtin 5V releedepeale ümber teha kuna külmaga hakkas süsteem 12V releedega tõrkuma. Ja kui juba siis mõtlesin ,et teen pici peale asja. Aga sellest koodi kirjutamisest ei tule mul midagi endal välja. Vaev ei jää tasumata sellele kes selle ära kribab.


    Skeem siin: http://www.hot.ee/linnu11//start.JPG

    #2
    Vs: PIC12F629 Kood

    Sinu skeem ei taha pic-iga kokku töötada, sisendites GP3 ja GP2 esinev ainult 0 signaal, aga pic ei oska sedasi sisendeid lugeda, tema tahab, et sisendisse saabuks +5v, see oleks tema jaoks = 1 või 0v, see oleks tema jaoks loogiline 0.
    aga sinu skeemis ei saagi loogilit 1 olema, ja pic ei saaks kuidagi toimetama.
    Sama lugu GP0 ja GP1, nood saavad ainult loogilist 1 ja z signaali, aga z ei ole sama, mis 0,
    võib palju saginaid püüda ja hakkab jamama.
    Põhimõtteliselt peaks alati kasutama PIC sisendites analoog signaali teisendust, a-la suurem kui 4v = loogiline 1 ja alla 1v = loogiline 0. Lisaks peaks kasutama ajalist filtrit, ca 0,3 sek, s.t loogiline 1 registreeritakse alles siis, kui signaal suurem kui 4v on olnud sisendis kauem, kui 0,3 sek ja samuti ka loogilise 0 registreerimisel, on olnud madalam, kui 1v kauem, kui 0,3 sek.
    sedasi saab süsteemi häirekindlaks, vastasel juhul hakkavad suvalised kiired impulsid sisendis mikroprotsessorit lolliks ajama, ja vahel sa ei saagi saama mikroprotsessorit stabiilselt tööle.
    GP3 on ainult digitaalne sisend, see ei sobiks selliseks topelt sisend filriga toimetamiseks.
    Ma olen praktikas mässanud nende sisend induktsioonidega ja ei soovita ilma programselt filtreeritud sisenditeta üldse midagi teha.
    12F629 ei oma analoogsignaaliga sisendeid, kuid tema asemel soovitan kasutada 12F675, millel need on olemas.



    sis+12v(kuni 30v) -- takisti2,7k --. ------- . ------------------------ pic GP sis 5v
    -.--.--
    . .
    t .
    a VD+(kollane värv)
    k VD-
    i .
    s stabilitron 3,6V -
    t stabilitron +
    i .
    ca 20k .
    . .
    mass(- 0V)

    selline sisendi skeem võimaldaks lihtsalt ja väheste detailidega pingejägurina konverteerida 12v signaali sisendis 5v taseme signaaliks, kollase valgusdioodi puhul 3,6v stabilitron, rohelise puhul 3,0v
    põhimõtteliselt pingejägur. hea on, kui sisendites on ka visuaalsed indikaatorid, siis on asja lihtsam testida.
    Reageerib alates 6v ja kuni 30v välja, 12 jääb täiesti sisse.
    Releed võta ka 5v ahelast ära ja pane +12v peale, ära koorma 5v pingestabilisaatorit releedega.
    5v stabilisaator ka 1A-ne, 200 ma plastikkestas maksab 16 eek, 1A TO220 metallkõrvaga 8 eek.
    aga kui toidad ainult PIC 5 v pealt, siis pole radikat vajalik panna, mingit kuumenemist pole karta.
    samuti 12v releed saad odavamalt, kui 5v omad.

    Ilus oleks panna releedega paralleelselt 12v ahelasse 2k takistiga rohelised valgusdiodid ka , siis hea kohe väljundite asendeid näha, kui midagi testima peaksid.
    Sisendisse juba pakkusin asendusskeemi koos valgusdioodidega indikaatoritega.
    Tööstusautomaatikas tavaliselt kollane valgusdiood sisend ja rohelin väljund.
    +5v külge ei teeks ka toite olemasolu indikaator paha, seal 390 oomi takistiga.
    Siinses skeemis pic ei jää ühtegi vaba väljundit, aga kui on vabu väljundeid kasutada, siis ma olen tavaliselt pannud selle +5v indikaatori lihtsalt vilkuma pic abil, sedasi kannab tema lisaks +5v olemasolule ka informatsiooni, et pic on elus ja töötab (vilkuv led.)
    viimati muutis kasutaja ahelet; 20 m 2010, 19:10. Põhjus: tuli meelde

    Comment


      #3
      Vs: PIC12F629 Kood

      Vaatasin andmelehelt järgi, kõik sisendid peale GP3 on ,,Bi-directional I/O w/ programmable pull-up" ehk sisemiste takistitega. Samas võiks häirekindluse mõttes muidugi 4,7 k takistitega +5V toitesse tõmmata, sest sisemiste pull-up takistite ekvivalentne takistus on küllaltki suur. Optroniga sisendis on täiendav 1..2,7 k pull-up takisti kindlasti vajalik.

      Sisendite analoogiks tegemine ja seejärel filtreerimine tundub natuke overkill. Kui signaalinivood on paigas ega ripu kuskil 1,5..3,2 V vahel, toide korralik (piisavalt suure mahtuvusega elektrolüüdid ja lahtisidestudkonded väljaviikude lähedal) ja sisendid optronitega lahti sidestatud, ei tohiks impulsid eriti midagi teha. Ajaline filter võiks muidugi olla, vähemalt nupu rakendumise suunas (üleminek +5 V to 0 V). Omal sarnane süsteem juba mõned aastad kasutusel, sisendisignaalidega juhtmestik jookseb koos jõukaablitega ja siiani pole valerakendumisi esinenud.

      Miks lihtsalt 5 V releede ja stabilisaatoriga skeem ei sobi?
      Hoiatus - muudan oma postituse sisu kuni 30 minuti vältel pärast postitamist.

      Comment


        #4
        Vs: PIC12F629 Kood

        ....
        viimati muutis kasutaja ahelet; 20 m 2010, 19:30.

        Comment


          #5
          Vs: PIC12F629 Kood

          ; 12F675
          ; modificated 3 in 1 out with analoque (4v and 1v levels) and time filtering(0,3 sek)
          ;
          list p=12F675 ;tell assembler what chip we are using
          include "P12F675.inc" ;include the defaults for the chip
          errorlevel 0,-302 ;suppress bank selection messages
          __config _CPD_OFF&_CP_OFF & _BODEN_OFF & _MCLRE_OFF &_PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT


          ;###################
          ; USER RAM ADRESSES
          ;###################
          ;USER RAM 020h - 05Fh
          ;TOTAL 64 x 8 registers

          cblock 0x20 ;start of general purpose registers

          TIN1
          DIN1
          TIN2
          DIN2
          TIN3
          DIN3

          FGPIO
          FLAGA
          TMRA

          ADLOW
          ADHIGH
          TVLOW
          TVHIGH


          endc ;END of general purpose registers

          ;###################
          ; INPUTS / OUTPUTS
          ;###################
          ;INPUTS

          IN1 EQU H'00' ;GP0 = IN1 (PIN 7)
          IN2 EQU H'01' ;GP1 = IN2 (PIN 6)
          IN3 EQU H'02' ;GP2 = IN3 (PIN 5)


          ;OUTPUTS

          OUT EQU H'04' ;GP4 = OUT (PIN 3)

          IND EQU H'05' ;GP2 = OUT (PIN 2)

          ;###############
          ; PROGRAM START
          ;###############

          ORG 0h ;startup address = 0000

          BSF STATUS,RP0 ;set RP0 for RAM page 1
          CLRF GPIO ;INIT GPIO

          MOVLW B'01110111' ;SET GP0 - GP2 ARE ANALOG INPUTS
          MOVWF ANSEL ;ALSO FOSC 64 SET HERE

          MOVLW B'11001111' ;SET GP 0,1,2 INPUTS, GP 2,4,5 OUTPUT
          MOVWF TRISIO ;

          MOVLW B'11010111' ;TMR0 IS INTERNAL TIMER WITH MAX DELAY
          MOVWF OPTION_REG

          BCF STATUS,RP0 ;set RP0 for RAM page 0

          MOVLW B'00000111' ;TURN OFF ANALOG REFERENCE
          MOVWF CMCON ;NB! IMPORTANT FOR I/O NORMAN USE

          ;**********************
          ;EXTRA CLEARS and SETS
          ;**********************

          CLRF TIN1
          CLRF DIN1
          CLRF TIN2
          CLRF DIN2
          CLRF TIN3
          CLRF DIN3

          CLRF FGPIO
          CLRF FLAGA
          CLRF TMRA

          CLRF ADLOW
          CLRF ADHIGH
          CLRF TVLOW
          CLRF TVHIGH

          CLRF GPIO ;BECAUSE AT START BY DEFAULT ALL REGISTER ARE SET IN FF

          ;##############
          ; MAIN ROUTINE
          ;##############

          MAIN CALL FAT_GPIO

          CALL TMRACHK

          CALL TEST

          GOTO MAIN

          ;##############
          ; TEST TEMP
          ;##############

          TEST BTFSS TMRA,1
          BCF GPIO,IND
          BTFSC TMRA,1
          BSF GPIO,IND


          BTFSS FGPIO,1 ;TEST RESULT OF XOR
          GOTO NEXT
          BTFSS FGPIO,2
          GOTO NEXT
          BTFSS FGPIO,3
          GOTO NEXT

          BSF GPIO,OUT ;
          RETURN

          NEXT BCF GPIO,OUT ;
          RETURN


          ;#################
          ; TIMERS CHK
          ;#################
          TMRACHK

          A0CHK BTFSS FLAGA,0
          GOTO A1CHK
          BTFSS TMR0,7 ;CHECK TMR0,7
          RETURN
          BCF FLAGA,0
          INCF TMRA,F ;TASK FOR FIRST IMP FRONT
          RETURN

          A1CHK BTFSC FLAGA,0
          GOTO A0CHK
          BTFSC TMR0,7 ;CHECK TMR0,7
          RETURN
          BSF FLAGA,0
          RETURN

          Comment


            #6
            Vs: PIC12F629 Kood

            ;##########################
            ; IN FILTER ANALOG ROUTINE
            ;##########################
            FAT_GPIO MOVLW B'10000011' ;conf adcon for GP0 volt read ALSO SET GO DONE HERE 1
            MOVWF ADCON0
            CALL ADCRESULT
            CALL X400
            BTFSC STATUS,0 ;KONTROLLIDA 4.00 V VÕRDLUSE TULEMUST
            BSF FGPIO,4 ;SET TEMP INDICATOR FOR IN1
            CALL X100
            BTFSS STATUS,0 ;KONTROLLIDA 1.00 V VÕRDLUSE TULEMUST
            BCF FGPIO,4 ;CLR TEMP INDICATOR FOR IN1

            MOVLW B'10000111' ;conf adcon for GP1 volt read ALSO SET GO DONE HERE 1
            MOVWF ADCON0
            CALL ADCRESULT
            CALL X400
            BTFSC STATUS,0 ;KONTROLLIDA 4.00 V VÕRDLUSE TULEMUST
            BSF FGPIO,5 ;SET TEMP INDICATOR FOR IN1
            CALL X100
            BTFSS STATUS,0 ;KONTROLLIDA 1.00 V VÕRDLUSE TULEMUST
            BCF FGPIO,5 ;CLR TEMP INDICATOR FOR IN1

            MOVLW B'10001011' ;conf adcon for GP2 volt read ALSO SET GO DONE HERE 1
            MOVWF ADCON0
            CALL ADCRESULT
            CALL X400
            BTFSC STATUS,0 ;KONTROLLIDA 4.00 V VÕRDLUSE TULEMUST
            BSF FGPIO,6 ;SET TEMP INDICATOR FOR IN1
            CALL X100
            BTFSS STATUS,0 ;KONTROLLIDA 1.00 V VÕRDLUSE TULEMUST
            BCF FGPIO,6 ;CLR TEMP INDICATOR FOR IN1
            ;##########################
            ; IN FILTER 0,3 SEK ROUTINE
            ;##########################
            TCHKIN1 BTFSC FGPIO,4 ;CHK GSM ANALOG OUT RESLUT
            GOTO STCHKIN1
            MOVF TMRA,W ;COPY TMR0 TO W
            ADDLW D'7' ;W + 7 =W
            MOVWF TIN1 ;COPY W TO TGSM
            GOTO DCHKIN1
            STCHKIN1 MOVF TMRA,W ;COPY TMRB TO W
            SUBWF TIN1,W ;ISNT TMRB NOW EQU MATIM
            BTFSC STATUS,0 ;CHK THIS
            GOTO DCHKIN1 ;IF NO, GO AHEAD
            BSF FGPIO,1 ;IF TIME REACHED, ACTIVATE GSM TEMP,0
            ;#####################################
            DCHKIN1 BTFSS FGPIO,4 ;CHK GSM ANALOG OUT RESLUT
            GOTO SDCHKIN1
            MOVF TMRA,W ;COPY TMR0 TO W
            ADDLW D'7' ;W + 7 =W
            MOVWF DIN1 ;COPY W TO TGSM
            GOTO TCHKIN2
            SDCHKIN1 MOVF TMRA,W ;COPY TMRB TO W
            SUBWF DIN1,W ;ISNT TMRB NOW EQU MATIM
            BTFSC STATUS,0 ;CHK THIS
            GOTO TCHKIN2 ;IF NO, GO AHEAD
            BCF FGPIO,1 ;IF TIME REACHED, ACTIVATE GSM TEMP,0
            ;#####################################

            TCHKIN2 BTFSC FGPIO,5 ;CHK GSM ANALOG OUT RESLUT
            GOTO STCHKIN2
            MOVF TMRA,W ;COPY TMR0 TO W
            ADDLW D'7' ;W + 7 =W
            MOVWF TIN2 ;COPY W TO TGSM
            GOTO DCHKIN2
            STCHKIN2 MOVF TMRA,W ;COPY TMRB TO W
            SUBWF TIN2,W ;ISNT TMRB NOW EQU MATIM
            BTFSC STATUS,0 ;CHK THIS
            GOTO DCHKIN2 ;IF NO, GO AHEAD
            BSF FGPIO,2 ;IF TIME REACHED, ACTIVATE GSM TEMP,0
            ;#####################################
            DCHKIN2 BTFSS FGPIO,5 ;CHK GSM ANALOG OUT RESLUT
            GOTO SDCHKIN2
            MOVF TMRA,W ;COPY TMR0 TO W
            ADDLW D'7' ;W + 7 =W
            MOVWF DIN2 ;COPY W TO TGSM
            GOTO TCHKIN3
            SDCHKIN2 MOVF TMRA,W ;COPY TMRB TO W
            SUBWF DIN2,W ;ISNT TMRB NOW EQU MATIM
            BTFSC STATUS,0 ;CHK THIS
            GOTO TCHKIN3 ;IF NO, GO AHEAD
            BCF FGPIO,2 ;IF TIME REACHED, ACTIVATE GSM TEMP,0
            ;#####################################

            TCHKIN3 BTFSC FGPIO,6 ;CHK GSM ANALOG OUT RESLUT
            GOTO STCHKIN3
            MOVF TMRA,W ;COPY TMR0 TO W
            ADDLW D'7' ;W + 7 =W
            MOVWF TIN3 ;COPY W TO TGSM
            GOTO DCHKIN3
            STCHKIN3 MOVF TMRA,W ;COPY TMRB TO W
            SUBWF TIN3,W ;ISNT TMRB NOW EQU MATIM
            BTFSC STATUS,0 ;CHK THIS
            GOTO DCHKIN3 ;IF NO, GO AHEAD
            BSF FGPIO,3 ;IF TIME REACHED, ACTIVATE GSM TEMP,0
            ;#####################################

            DCHKIN3 BTFSS FGPIO,6 ;CHK GSM ANALOG OUT RESLUT
            GOTO SDCHKIN3
            MOVF TMRA,W ;COPY TMR0 TO W
            ADDLW D'7' ;W + 7 =W
            MOVWF DIN3 ;COPY W TO TGSM
            GOTO TCHKEND
            SDCHKIN3 MOVF TMRA,W ;COPY TMRB TO W
            SUBWF DIN3,W ;ISNT TMRB NOW EQU MATIM
            BTFSC STATUS,0 ;CHK THIS
            GOTO TCHKEND ;IF NO, GO AHEAD
            BCF FGPIO,3 ;IF TIME REACHED, ACTIVATE GSM TEMP,0

            ;#####################################
            TCHKEND RETURN
            ;#####################################




            ;############################
            ;ADC RESULT
            ;############################
            ADCRESULT
            BTFSC ADCON0,1 ;CHECK IF ADC CONVERSION IS DONE
            GOTO ADCRESULT
            BSF STATUS,RP0 ;set RP0 for RAM page 1
            MOVF ADRESL,W
            BCF STATUS,RP0 ;set RP0 for RAM page 0
            MOVWF ADLOW
            MOVF ADRESH,W
            MOVWF ADHIGH
            RETURN
            ;######################
            ; 4.00 V LEVEL CONTROL
            ;######################
            X400 ; > 4.00 V = HIGH SIGNAL AT INPUT IS ON
            movlw H'03' ;ADRESH SISU 4.00 V JUURES
            movwf TVHIGH ;COPY TO VOLT COMPARE HIGH REG
            movlw H'32' ;ADRESL SISU 4.00 V JUURES
            movwf TVLOW ;COPY TO VOLT COMPARE LOW REG
            CALL COMVOLT ;KUTSUME VÄLJA PINGE VÕRDLEMISE
            RETURN
            ;######################
            ; 1.00 V LEVEL CONTROL
            ;######################
            X100 ; < 1.00 V = HIGH SIGNAL AT INPUT IS ON
            movlw H'00' ;ADRESH SISU 1.00 V JUURES
            movwf TVHIGH ;COPY TO VOLT COMPARE HIGH REG
            movlw H'CC' ;ADRESL SISU 1.00 V JUURES
            movwf TVLOW ;COPY TO VOLT COMPARE LOW REG
            CALL COMVOLT ;KUTSUME VÄLJA PINGE VÕRDLEMISE
            RETURN
            ;#######################################
            ;SUUREM VÄIKSEM VÕRDNE PINGETE KONTROLL
            ;#######################################
            COMVOLT movf TVHIGH,w
            subwf ADHIGH,w ; subtract Y-X
            skpz ; Are they equal ?
            RETURN ; yes, they are equal -- compare lo
            movf TVLOW,w
            subwf ADLOW,w ; subtract Y-X

            ; if X=Y then now Z=1. (STATUS,3) 4.00 V HIGH = 03 ,LOW = 32
            ; if Y<X then now C=0. (STATUS,0) 1.00 V HIGH = 00 ,LOW = CC
            ; if X<=Y then now C=1. (STATUS,0)

            RETURN
            ;##############################
            END


            siin on programmikene 3 sisendit 1 väljund,
            väljund aktiveerub ainult siis, kui kõik 3 sisendit on 1.

            Sellest saaks suht lihtsalt modifitseerida sulle vajalikku asja.
            Natukene tuleb pusida tolle 5 sek tekitamisega.
            viimati muutis kasutaja ahelet; 20 m 2010, 19:24.

            Comment


              #7
              Vs: PIC12F629 Kood

              Aga on ka selline variant, et teen hardware ja software mõlemad, price?

              Comment


                #8
                Vs: PIC12F629 Kood

                Tere,
                Nii vastan siis küsimustele:
                5V releed selle pärast ,et hetke seisuga 12V releed külmade ilmadega tahavad lahti hüppata samal ajal kui starter järgi läheb ja tekkib surnud ring.

                Mingisuguseid LEDe pole kuhugi vaja panna kuna asi nagu nii pole üldse nähtav ega vaja jälgimist.
                Raua osas on plaat juba tehtud ja nüüd hakkan softiga jagelema.
                Aga arva ,et ei saa hakkama selle softi poolega nii et pakkumised valmis lähte koodi eest postkasti.
                PIC12F629 kasutan selle pärast ,et neid väga palju käes.

                Nii skeemis tehtud muudatused nüüd. Peaks nii toimima.
                viimati muutis kasutaja bisti; 20 m 2010, 23:33.

                Comment


                  #9
                  Vs: PIC12F629 Kood

                  Mingit analoog pingete mõõtmist pole vaja, 100nF keraamilisest piisab, 10kroonisenti maksab, Pici sisendid kõik schmitt triggeriga.
                  Auto elektroonikas ei tohi otse prose sisendit kasutada, veelenam 5V. Keegi yhendab teise sensori vms 12V satub peale sisendile läheb halvemal juhul midagi põlema, paremal juhul ainult see moodul küpse.
                  Ohutu lahendus on sisendisse zener ja 10-50k takk ette. Pullup tuleb seega 12V toitest võtta. Releesid ei tohi otse prose kylge ühendada, sisemised kaitsedioodid pole sellega arvestatud. ksutada transi (Nfet, või NPN) ja dioodi.
                  Toites peab kindlasti olema sulavkaitse ja vastupidise polaarsuse vältimiseks diood.
                  Modelleerimises ja tootmises kehtivad:
                  1. Avariikindel vooluring lühistab kõik teised.
                  2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

                  Comment

                  Working...
                  X