Teade

Collapse

Foorumi reeglid.

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

PIC16F84 programmer

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

    #31
    Vs: PIC16F84 programmer

    LCD juhtimise koodinäiteid saab ühe masina skeemist/koodist (projekt 4). See on Tipi praksis olev Atwoodi masin. Stardil laseb magnet koormuse lahti, mis hakkab kiirenevalt liikuma. Ühtalsi käib ajaarvestus. Vajadusel võetakse ja kuvatakse vaheaeg.
    Proovin varsti oma muud projektid ka veebi riputada, ehk on kellelegi asjaks...
    - 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


      #32
      Vs: PIC16F84 programmer

      Nii.. natuke aega sai niisama trükitud teksti.. väike probleem.. täpitähti ei aktsepteeri. Ja kui kunagi mulle temp andurid tulevad siis üritaks ühendada LCDga nad.

      Comment


        #33
        Vs: PIC16F84 programmer

        Vaata displei Ds-i. Üldjuhul nad ei teagi midagi täpitähtedest, need tuleb ise defineerida (saadad ekraanile 5*7 maatriksi kirjelduse) aga mõnedel siiski on olemas. Kui defineerid, siis üle 4 või 8 sümboli ei saa defineerida, sõltub ekraani mälu mahust.
        Uue sümboli aadressid (koodid) hakkavad 0x00-st. Nt. saadad "Ä" koodid esimesena ja siis tema trükkimiseks palud saata sümboli 0x00. Jne
        DS1820 termoanduri näidiskoodi võin saata.
        - 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


          #34
          Vs: PIC16F84 programmer

          Okei, aga saada / pane kuskile üless seeDS1820 näidiskood :P

          Comment


            #35
            Vs: PIC16F84 programmer

            Kood:
            ; *************************************************************************************************************
            ; *** Loe temp. W=0, tulemus olemas, W<>0, viga, termomeeter puudub või veel mõõdab Tulemus DSMAG ja DSSIGN-s**
            ; *************************************************************************************************************
            GetTemp:        LFSR    .1,termoH0                ; leiame temp. salvestamise koha
                            LFSR    .0,pwm0                    ; kopeerime siia ka et get_pwm saaks lugeda
                            movf    anduri_nr,W
                            sublw    .1
                            btfsc    ZERO
                            goto    GetTemp1
                            LFSR    .1,termoH1                
                            LFSR    .0,pwm1
                            movf    anduri_nr,W
                            sublw    .2
                            btfsc    ZERO
                            goto    GetTemp1
                            LFSR    .1,termoH2            
                            LFSR    .0,pwm2
            GetTemp1:        CALL    DSRXBYTE                ; küsime anduri seisu
                            ADDLW    .1                        
                            BTFSS    ZERO                    
                            goto    NoTemp                    ; W <>0 => not ready
                            bsf        INDF1,.7                ; märgime et temp. olemas
                            bcf        INDF1,.6                ; ja et vigu ei suudetud leida
                            CALL    OW_RESET                ; mõõdetud, puuga pähe
                            btfss    viga                    ; sai veidi valu, rsk... ;)
                            goto    GetTemp2
                            bcf        INDF1,.7                ; temp. puudub
                            bsf        INDF1,.6                ; ja et tehti viga
                            goto    GetTemp3
            GetTemp2:        MOVLW    SkipRom                    ; käsutame: ROMi ei loe
                            CALL    DSTXBYTE
                            MOVLW    ReadScratch                ; käsutame: loe tulemust
                            CALL    DSTXBYTE
                            CALL    DSRXBYTE                ; temperatuur 
                            movwf    DSMAGN
                            CALL    DSRXBYTE                ; märk (FF => -, 00 => +)
                            movwf    DSSIGN
                            andlw    0x01                    ; jätame vaid biti 0
                            bsf        INDF1,.0                ; .0=1 -> miinus temp.
                            btfsc    ZERO
                            bcf        INDF1,.0
                            movf    POSTINC1,W                ; pointer +1
                            bcf        CARRY
                            rrcf    DSMAGN,W
                            movwf    POSTINC1
            ;                movwf    POSTINC0                ; kopeeri temperatuur pseudo-PWMi väärtuseks
            ;    movf    POSTDEC2,W
            ;    movf    POSTDEC2,W
            ;    movf POSTINC2,W
            ;    call SendCHAR
            ;    movf POSTINC2,W
            ;    call SendCHAR
            GetTemp3:        call    start_temp                ; mõõdetud või oli viga, igatahes puuga pähe ja uus mõõtmine käima
            Temp_next:        bcf        CARRY
                            rlcf    anduri_nr,F
                            movf    anduri_nr,W
                            sublw    .8
                            btfss    ZERO
                            return
                            movlw    .1
                            movwf    anduri_nr
                            return
            NoTemp:            bcf        INDF1,.7                ; märgime et temp'i. veel pole
                            bcf        INDF1,.6                ; ja et vigu ka ei suudetud leida, lihtsalt kohmiceb veel
                            goto    Temp_next                ; ei oota seda, võtame järgmise
            ; *******************************************************
            ;       Dallas Semiconductor 1-Wire ROUTINES
            ; *******************************************************
            WAIT1:
                  NOP                                       ;0,2µs
                  NOP                                       ;0,2µs
                  NOP                                       ;0,2µs
                  NOP                                       ;0,2µs
                  NOP                                       ;0,2µs
                        decfsz    TMP0
                        goto    WAIT1
                    return
            ; --------------------------------------------------------
            OW_RESET:        bcf        viga
                            OW_HIZ                          ; tõsta vastava anduri viik kõrgex
                            WAIT    .37                        ; ootame 60 uS
            ;                comf    anduri_nr,W                ; oletame, et on ok
            ;                iorlw    0xF0                    ; temp. rdy bitti ei puudu
            ;                andwf    termostatus,F            
                            movf    PORTB,W                    ; kas liin on vaba (kõrge)?
                            andwf    anduri_nr,W
                            btfsc    ZERO
                            goto    OW_peetis                ; ei, tuksis siis
                              OW_LO                            ; korras, teeme andurile "buutsista päähän" nipi
                              WAIT    .255                    ; 408µs  (480..960us)
                              OW_HIZ
                              WAIT    .43                     ; ootame 70 uS Presence pulssi
                            movf    PORTB,W                    ; loe porti
                            andwf    anduri_nr,W                ; jäta vaid vajaliku anduri bitt
                            btfsc    ZERO
                            goto    OW_ok                    ; oli Presence, kõik kenasti
            OW_peetis:;        movf    anduri_nr,W                ; märgime anduri peetis olevax
            ;                iorwf    termostatus,F            
                            bsf        viga
            OW_ok:            WAIT    .255                    ; oota veel 400µs
                              return
            ; --------------------------------------------------------
            DSRXBYTE:        MOVLW   .8
                              MOVWF   COUNT                   ; loeb 8 bitti
            DSRXLP:            OW_LO
                            WAIT    .3                        ; tekitame 6 uS taktipulsi
                              OW_HIZ
                            WAIT    .2                        ; ootame veel 4 uS
                            movf    PORTB,W                    ; loe porti
                            andwf    anduri_nr,W                ; jäta vaid vajaliku anduri bitt
                            bcf        CARRY                    ; vaatab, mis biti saime
                            btfss    ZERO
                            bsf        CARRY
                              RRCF    IOBYTE,F                ; nihuta saadu IOBYTE-sse
                            WAIT    .22                        ; ootame veel 50 uS
                              DECFSZ  COUNT,F                 ; kuni kõik loetud
                              GOTO    DSRXLP
                            MOVF     IOBYTE,W                ; tulemus W-sse
                              RETURN
            ; --------------------------------------------------------
            DSTXBYTE:       MOVWF   IOBYTE                  ; saadetav
                            MOVLW   .8
                              MOVWF   COUNT                   ; saadab 8 bitti
            DSTXLP:            OW_LO
                            WAIT    .1                        ; tekitame 3 uS taktipulsi
                              RRCF    IOBYTE,F
                              BTFSC      CARRY                   ; mis bitt saata ?
                            goto    DSTX1                    ; saada HIGH
                            OW_LO                            ; saada LOW
            DSTXnxt:        WAIT    .40                     ; 60µs vältel
                              OW_HIZ                          ; edasi HIGH
                            WAIT    .1                        ; recovery aeg 2uS
                            DECFSZ  COUNT,F                 ; kuni kõik saadetud
                              GOTO    DSTXLP
                              RETURN
            DSTX1:             OW_HIZ                          ; saada HIGH
                            goto    DSTXnxt                    ; tsükkel
            ; *******************************************************
            ; Dallas Semiconductor 1-Wire MACROS
            ; *******************************************************
            OW_HIZ:MACRO
                    movf    anduri_nr,W                        ; millise anduriga räägime
                    iorwf    PORTB,F                            ; tõsta selle pordi pinn üles
                    iorwf    tris_andur,W                    ; tris-maskis samuti
                    movwf    tris_andur                        ; seivi
                    movwf    TRISB                            ; muuda vastav pordi otc sisendiks
                  ENDM
            ; --------------------------------------------------------
            OW_LO:MACRO
                    comf    anduri_nr,W                        ; millise anduriga räägime, bitid tagurpidi !
                    andwf    PORTB,F                            ; nulli pordi see pinn
                    andwf    tris_andur,W                    ; tris-maskis samuti
                    movwf    tris_andur                        ; seivi
                    movwf    TRISB                            ; muuda vastav pordi otc väljundiks
                  ENDM
            ; --------------------------------------------------------
            WAIT:MACRO TIME
                  MOVLW         (TIME)                
                  MOVWF         TMP0                        
                  call            WAIT1    
                  ENDM
            - 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


              #36
              Vs: PIC16F84 programmer

              Okei, kuna termokaid pole veel tulnud siis mõtleme veel miskit.. Mul veel üks selline LCD kah : http://i28.tinypic.com/11vqt75.jpg

              Datasheet siin - http://products.egdisplay.com/files/JMK124F.pdf

              pmst peaks seda ka ju interfaceda saama PIC16F84A-ga.. google leiab LCD kirjade peale ainult 1he vaste - see on datasheeti leht
              viimati muutis kasutaja tarmok; 23 m 2009, 21:29.

              Comment


                #37
                Vs: PIC16F84 programmer

                Saab ikka, sul ju datasheedis näidiskood ka olemas ja puha! DSi järgi töötab 3,3V aga võimalik et ka 5Vga. Lubatakse igatahes vist kuni 7V toidet.
                Asi on sarnane mu kasutatavale 12864RGB displeile. Saab samuti järjestikinterfeisi kaudu juhtida (D6,D7 otsad). Koodi ei võrrelnud aga vist on analoogne. Käsustik võib olla veidi teine aga vaatad näidist ja häkid tibakene.
                See näidiskoodi asm on 8051 prose keeles.
                Sa võiksid nüüd juba nii tubli olla et transleerid PICile naksti ära, keevitad külge ja ru(i)neeerid koodi..
                Näide 12864RGB juhtimiseks: (võimalik, et osa koodi on siit puudu, kuna foorumi soft on haige, vingub et kood on liiga pikk. Kirjutagu siis ise parem.... ).
                Kood:
                *************************************************************************************************************
                ; ************************ saadab käsu LCDle ***********************************************************
                ; *************************************************************************************************************
                wr_cmd:            bcf        INTCON,GIE
                                bcf     LCDRS                    ; cmnd
                                   goto    wr_dc
                ; *************************************************************************************************************
                ; ************************ saadab data LCDle ***********************************************************
                ; *************************************************************************************************************
                wr_dat:            bcf        INTCON,GIE
                                bsf     LCDRS                    ; daata
                ; *************************************************************************************************************
                ; ************************ Kirjutab W sisu LCD-sse ************************************************************
                ; *************************************************************************************************************
                wr_dc:            call    Wait_02                    ; 10 us
                                bcf     LCDCS                       ; select Display
                                call    Wait_02                    ; 10 us
                                movwf    SSP_BUF                    ; spi on softiline, siia kirjutame ja ka loeme kaardi vastuse
                                movlw    .8                        ; tegutseme 8 bitiga
                                movwf    spicount
                Swr_spi1:        bcf        _SCLLCD;_SCL
                                call    Wait_02                    ; 10 us
                                btfss    SSP_BUF,.7                ; seame SDO-pinni väärtuse vastavalt daatale
                                goto    Swr_spi2
                                bsf        _SCA
                                goto    Swr_spi3
                Swr_spi2:        bcf        _SCA
                Swr_spi3:        call    Wait_02                    ; 10 us
                                rlcf    SSP_BUF,F                ; nihutame järgmise biti ette
                                bsf        _SCLLCD;_SCL                    ; takti +frondil loetakse daata sisse
                                decfsz    spicount                ; kuni 8 bitti loetud/kirjutatud
                                goto    Swr_spi1                ; ootame veel
                                call    Wait_02        
                                bsf     LCDCS                       ; deselect Display
                    bsf        _SCLLCD;_SCL
                    bsf        _SCA
                                bsf        INTCON,GIE
                                return
                ; *************************************************************************************************************
                ; ************************ init *******************************************************************************
                ; *************************************************************************************************************
                init_LCD:        btfss    DispPres                ; on üldse ekraan olemas ?
                                return                            ; eip
                ;    bcf    USB_dis
                                bsf        LCDCS
                                bsf        _SCLLCD;_SCL
                                bcf        LCDReS
                                movlw    .10                        ; oota 10 ms
                                call    wait
                                bsf        LCDReS
                                movlw    .1
                                call    wait
                                movlw    0xE2                    ; reset
                                call    wr_cmd
                                movlw    0xA0;A1                    ; ADC select: normal (1->132)
                                call    wr_cmd
                                movlw    0xC0;C8                    ; SHL select: reverse (64->0)
                                call    wr_cmd
                                movlw    0xA2                    ; LCD bias select
                                call    wr_cmd
                                movlw    0x2C                    ; Voltage converter ON
                                call    wr_cmd
                                movlw    .1
                                call    wait
                                movlw    0x2E                    ; Voltage regulator ON
                                call    wr_cmd
                                movlw    .1
                                call    wait
                                movlw    0x2F                    ; Voltage follower ON
                                call    wr_cmd
                                movlw    0x25                    ; Regulator resistor select 0x20..0x27
                                call    wr_cmd
                                movlw    0x81                    ; Reference voltage register set
                                call    wr_cmd
                                movlw    0x18                    ; Reference voltage 0..63
                                call    wr_cmd
                                movlw    .10                        ; oota 10 ms
                                call    wait
                                movlw    0x40                    ; initial display line (=0, rea number on 5 nooremat bitti)
                                call    wr_cmd
                                movlw    0xAF                    ; display ON
                                call    wr_cmd
                ;    bsf    USB_dis
                                return
                ; *************************************************************************************************************
                ; ********************************************* goto X,Y (dispX, DispY)****************************************
                ; *************************************************************************************************************
                goto_XY:        btfss    DispPres                ; on üldse ekraan olemas ?
                                return                            ; eip
                                movf    dispY,W
                                andlw    0x0F
                                iorlw    0xB0
                                call    wr_cmd                    ; set GDDRAM page address 0..7 (for 8 rows)
                                movff    dispX,tmpdspX
                                rrcf    tmpdspX,F                    
                                rrcf    tmpdspX,F                    
                                rrcf    tmpdspX,F                    
                                rrcf    tmpdspX,W
                                andlw    0x0F
                                iorlw    0x10
                                call    wr_cmd                    ; set higher column address
                                movf    dispX,W
                                andlw    0x0F
                                call    wr_cmd                    ; set lower column address    
                                return  
                ; *************************************************************************************************************
                ; ************************ clear screen ***********************************************************************
                ; *************************************************************************************************************
                lcd_cls:        btfss    DispPres                ; on üldse ekraan olemas ?
                                return                            ; ei
                                bcf        invtxt
                            movlw    .0                        ; pos. 0,0
                                movwf    dispX
                                clrf    dispY
                                clrf    fontnr
                                movlw    .8                        ; 8 reatäit tühikuid
                                movwf    LCD_Count
                lcd_cls1:        movlw    LOW mess_11                ; kirje 11: tühi rida
                                movwf    Messi_nr
                                movlw    HIGH mess_11
                                movwf    Messinr_H
                                call    print_msg_XY
                                dcfsnz    LCD_Count
                                return
                                movlw    .0
                                movwf    dispX
                                incf    dispY,F
                                goto    lcd_cls1
                - 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


                  #38
                  Vs: PIC16F84 programmer

                  miskit vist puudu jep.. aga saada txt failina äkki vms :P homme üritan poest saada pesa lintkaablile... muudmoodi vist seda ei kasuta

                  Comment


                    #39
                    Vs: PIC16F84 programmer

                    "Puhtam variant" on jah pesa otsida või ise midagi välja mõelda.
                    Nii ilusat LCD'd on kahju rikkuda.

                    Comment


                      #40
                      Vs: PIC16F84 programmer

                      Just tulin poest, polnud sellist :O 28pin DSi järgi, 26 ja 30 pin olid olemas aga 28 ple :S

                      Comment


                        #41
                        Vs: PIC16F84 programmer

                        kus poes käisid?
                        oomipoe/farnelli kaudu miskit pool aastat tagasi omale samasuguse display jaoks sain. täpse koodi saaksin kuskilt tellimislehelt järgi vaadata, kui huvi on

                        Comment


                          #42
                          Vs: PIC16F84 programmer

                          oleneb kui kalliks läheb ma vaene õpilane. Käisin pärnus nn "keldri poes ", elfa edasimüüja vist see pood

                          Comment


                            #43
                            Vs: PIC16F84 programmer

                            oomipoe/farnelli oma oli tookord mingi umbes 30eek. praegu vaatasin, et koguni 50eek.
                            pärnu keldripood muidu oli hea koht, aga nad millegipärast 100% ainult tevaloga seotud ja piiratud valik ja teisi ei vahenda kahjuks. oomipoodi kui ise ei saa järgi minna kaubale, tuleb kopsakas postiga saatmise tasu veel otsa ~70eek

                            Oomipoe eesmärgiks on pakkuda kõike seda, mida vajab elektroonikahuviline, elektroonikat tootev või parandav ettevõtja või tavakasutaja oma igapäevaelus.

                            Oomipoe eesmärgiks on pakkuda kõike seda, mida vajab elektroonikahuviline, elektroonikat tootev või parandav ettevõtja või tavakasutaja oma igapäevaelus.

                            Comment


                              #44
                              Vs: PIC16F84 programmer

                              Osta PIC kit 3 ja ära jama ise tegemisega.

                              Comment


                                #45
                                Vs: PIC16F84 programmer

                                Omale tegin PIC programmaatori ise ja on hea näpuharjutus enne PIC projektide tegemist. Kuid ise saab teha LPT ja com portidele, USB-ga on natsa liiga probleemne. Samuti netist leitud skeemid on tihti trikiga, tuleb kindlasti veenduda, et seal ei ole teist programmeeritud kivi ees. Teine puudus on, millises windows, DOS või arvuti peal töötavad. Mitmetel skeemidel selgus üllatav lisaasi, et nad töötavad normaalselt 386-486 peal, kiiremate arvutitega mitte. Samuti on suur vahe, kas oli Win 9X või XP (Nt 4.0) keskkond. Osadel oli win 9X võimalik lisadraiveriga XP keskkonnas tööle saada. Veel on suur vahe, kas oli laptop või lauaarvuti, nimelt laptop andis vähem voolu ja pinget välja ning skeem ei töödanud.
                                USB baasil ei soovita ise teha, osta parem valmis asi.

                                Comment

                                Working...
                                X