Teade

Collapse

Foorumi reeglid.

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

Mis on LCD koodis valesti. pic 16f628

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

    Mis on LCD koodis valesti. pic 16f628

    Lcd le kirjete saamine pidi küll olema kui lumme lasta, aga ma siin mõtlen varsti oma pea pooleks. Antud kood on ühe pici raamatu põhjal koostatud, muutsin vaid viivituste pikkusi, sest Pic Simulator IDE 6.65 andis errorit, et lcd ei jõudnud vana käsku realiseerida, kui uus juba peale anti. Sain sellest jamast lahti, aga ega palju paremaks ikka ei läinud. Antud koodi tulemusena peaks lcd esimesele tähemärgikohale ilus suur "M" täht ilmuma, ainus, mis ma saan on suur täismahus vilkuv ruut (kursor) tollel kohal. Kui too kood rauda lasta, siis ei saa niigi palju. Ma üritasin ka Nigeli õpetustes antud esimest lcd koodi - jällegi ainult ajaerrorid ja kursorite vilkumine. Nigeli koodis on hirmus palju alamprogramme ning jälgimine läks väga raskeks, et võrrelda enda koodi vea avastamiseks. RS otsaks on RA1, E on RA2 ja RW istub mättas. Teadjad mehed ehk vaavad mu leiutise üle ja kommenteerivad.
    Tänulik oleksin ka mõne kindlalt töötava ja lihtsa koodi eest, et kontrollida simulaatorit ja raudvara.

    Kood:
    LIST    p=16F628        
       include "P16F628.inc"        
       ERRORLEVEL    0,    -302    
        __config 0x3D18        
    [COLOR=SeaGreen];Ekud[/COLOR]
    status equ 03h
    trisa equ 85h
    trisb equ 86h
    porta equ 05h
    portb equ 06h
    counta equ 20h
    countb equ 21h
    countc equ 22h
    
    [COLOR=SeaGreen];A ja B port väljunditeks[/COLOR]
    bsf status,5
    movlw b'00000000'
    movwf trisa
    movlw b'00000000'
    movwf trisb
    bcf status,5
    
    
    [COLOR=SeaGreen] ;LCD konfiguratsioon[/COLOR]
    movlw 03h
    movwf portb
    call clock
    call delay2
    movlw 02h
    movwf portb
    call clock
    call delay2
    movlw 02h
    movwf portb
    call clock
    call delay2
    
    [COLOR=SeaGreen] ;4 bit inf, 2le reale, läbi b0...b3[/COLOR]
    movlw 08h
    movwf portb
    call clock
    movlw 03h
    movwf portb
    call clock
    
    [COLOR=SeaGreen];Harjutust alga[/COLOR]
    Start
    call clear
    clrf porta
    movlw 08h
    movwf portb
    call clock
    movlw 00h
    movwf portb
    call clock
    
    call M
    call delay
     call M
    call delay
    
    goto Start
    
    
    [COLOR=SeaGreen] ;M täht[/COLOR]
    M
    movlw 02h
    movwf porta
    movlw b'0010'
    movwf portb
    call clock
    movlw b'1101'
    movwf portb
    call clock
    retlw 0 
    
    
    
    [COLOR=SeaGreen] ;Viivitus[/COLOR]
    delay
    movlw d'255'
    movwf counta
    movlw d'8'
    movwf countb
    loopa
    decfsz counta,1
    goto loopa
    return
    
    [COLOR=SeaGreen] ;Pikem viivitus[/COLOR]
    delay2
    movlw d'255'
    movwf counta
    movlw d'8'
    movwf countb
    loopb
    decfsz counta,1
    goto loopb
    decfsz countb,1
    goto loopb
    return
    
    [COLOR=SeaGreen] ;Displei puhtaks[/COLOR]
    clear
    clrf porta
    movlw 00h
    movwf portb
    call clock
    call delay2
    movlw 01h
    movwf portb
    call delay2
    retlw 0
    
    [COLOR=SeaGreen] ;Data displeisse[/COLOR]
    clock
    bsf porta,02h
    nop
    call delay2
    call delay2
    bcf porta,02h
    nop
    call delay2
    call delay2
    retlw 0
    end
    Igaks petteks ka link Nigeli tutorialile: http://www.winpicprog.co.uk/pic_tutorial3.htm

    #2
    Vs: Mis on LCD koodis valesti. pic 16f628

    Lisan veel, et kasutan oomi poest ostetud LCD ja ehk on sel kontrolleritüüp selline, mis nõuab mõnd teistmoodi lähenemist.?
    Kontrolleril kiri wc1602a 0stylon06
    Link: http://www.oomipood.ee/index.php?t=k_ki&i=LCD16X2ZN-ORA

    Comment


      #3
      Re: Vs: Mis on LCD koodis valesti. pic 16f628

      Jup Vale kivi. sul vaja seda, mida teised ka kasutavad (arvatavasti)
      otsi selle kivi datasheet ja võrdle seda teiste omadega (misiganes see teine on)...

      Comment


        #4
        Vs: Mis on LCD koodis valesti. pic 16f628

        http://www.tevalo.ee/foorum/showthread.php?t=24266

        Comment


          #5
          Vs: Re: Vs: Mis on LCD koodis valesti. pic 16f628

          Esmalt postitatud bloody-orc poolt
          Jup Vale kivi. sul vaja seda, mida teised ka kasutavad (arvatavasti)
          otsi selle kivi datasheet ja võrdle seda teiste omadega (misiganes see teine on)...
          Kontroller on ju KS0066u, mis on hd44780 täpne analoog('kompatiibel' vähemalt). Endal ka selle tükiga 16x2LCD ja 44780 koode sööb edukalt

          Comment


            #6
            Re: Vs: Re: Vs: Mis on LCD koodis valesti. pic 16f628

            Kontroller on ju KS0066u, mis on hd44780 täpne analoog('kompatiibel' vähemalt). Endal ka selle tükiga 16x2LCD ja 44780 koode sööb edukalt
            ei teadnud seda... sry.

            Comment


              #7
              Vs: Mis on LCD koodis valesti. pic 16f628

              Ma ka mitte, kui oma LCD kätte sain ja kontrolleri mark välja tuli. Paanika missugune

              Comment


                #8
                Vs: Mis on LCD koodis valesti. pic 16f628

                Mitte ei saa pihta, mismoodi sa eristad daata ja käskude saatmist? Mõlemal juhul kasutad funktsiooni clock kui otsa RS nagu ei juhi?! Kui nii, siis selles viga peitubki.
                Teine asi on see, et (hiljem) päris tekste saates pead iga baidi saatma kahe poole kaupa. SWAPF käsk on siin abiks.
                Kolmandaks, kas saadad ikka daata LCD otstele D7..D4 (sul on 4-bitine siin)?
                - 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: Re: Vs: Mis on LCD koodis valesti. pic 16f628

                  Esmalt postitatud Eggy poolt
                  Kontroller on ju KS0066u, mis on hd44780 täpne analoog('kompatiibel' vähemalt). Endal ka selle tükiga 16x2LCD ja 44780 koode sööb edukalt
                  Viimases ajakirjas "Радио" (nr. 5/2007) lk. 43 just kirjeldatakse
                  HD44780U (Hitachi) ja KS0066U (Samsung) initsialiseerimise erinevust.''Radio'',2007,N05.[djv].zip
                  Elektroonika töötab suitsu baasil.
                  Tähendab - igasse detaili on doseeritud täpne kogus suitsu.
                  Kui mõnest suits välja lasta, siis värk enam ei käi.

                  Comment


                    #10
                    Vs: Mis on LCD koodis valesti. pic 16f628

                    RS juhtimises oli küll jama jah. Raamatust näpuga järge ajades oli nagu kõik õige, kui pikalt Nigeli koodi uurida ja simulaatoris jälgida, siis sain veale jaole. Simulaatoris hakati ka minu koodi kenasti kuvama. Teksti saadan 4 biti kaupa, aga SWAPF asemel saadan lihtsalt kaks korda manuaalselt.

                    Ei hakanud selle samsungi lcd ga hetkel rohkem jamama, sain ühe hitachi kontrolleriga variandi ja proovisin sellega. Nigeli koodid töötavad jällegi kenasti, kiri ilmub ja on just see mis peab. Aga häda jälle minu omaga. alustuseks tegin nii, et ekraanile imuks 3 de rida. Kui kood kivis, on ca 5 sekundit vaikus ja siis hakatakse 3 sid ekraanile kuvama, aga valesti, ilmub 2 kolme, siis kustuvad, siis ilmub miski uue koha peale paar tükki jne, kombinatsioone on igasuguseid. Aegajalt on ekraan hoopis tühi ja siis jälle suvaline kolmede loopimine. Oletasin, et lcd le tuleb rohkem aega anda ja toppisin kõikjale, kuhu vajalikuks pidasin, hunniku viiteid, max oli 255*255*4 us (ca 260 ms ) ning lühim ca 120 ms. Kas liigne viivitus võib ehk hoopis halb olla? Huvitav on just see, et Pic simulatoris töötab nagu meepüss, aga rauas väga mitte.

                    Kel viitsimist võiks korra koodi kaeda, ehk mingi jama sees jälle. Sinise kirjaga on märgitud viited, mis ühe või teise käsu järgi antsin.
                    Kood:
                    LIST    p=16F628        
                        include "P16F628.inc"        
                        ERRORLEVEL    0,    -302    
                        __config 0x3D18            
                    
                    status equ 03h
                    trisa equ 85h
                    trisb equ 86h
                    porta equ 05h
                    portb equ 06h
                    counta equ 20h
                    countb equ 21h
                    countc equ 22h
                    
                    bsf status,5
                    movlw b'00000000'
                    movwf trisa
                    movlw b'00000000'
                    movwf trisb
                    bcf status,5    
                    clrf porta
                    clrf portb
                    
                    [COLOR=DarkGreen];LCD konf[/COLOR]
                    movlw 01h 
                    movwf portb
                    call clock
                    movlw 00h 
                    movwf portb
                    call clock
                    
                    [COLOR=Blue]Viivitus 250ms[/COLOR]
                    movlw 02h
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 08h
                    movfw portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 00h
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 06h 
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 00h
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 0dh 
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    
                    call clear
                    [COLOR=Blue]Viivitus 60ms[/COLOR]
                    clrf portb
                    movlw 08h
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 00h
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    Start
                    call NR3
                    [COLOR=Blue]Viivitus 250ms[/COLOR]
                    goto Start
                    
                    
                    [COLOR=DarkGreen];NR3 tähemärk[/COLOR]
                    NR3
                    movlw 03h 
                    movwf portb
                    call char
                    [COLOR=Blue]Viivitus 60ms[/COLOR]
                    movlw 03h
                    movwf portb
                    call char
                    [COLOR=Blue]Viivitus 60ms[/COLOR]
                    retlw 0 
                    
                    [COLOR=DarkGreen]; Viivitus[/COLOR]
                    delay
                    movlw d'255'
                    movwf counta
                    movlw d'255'
                    movwf countb
                    loopb
                    decfsz counta,1
                    goto loopb
                    decfsz countb,1
                    goto loopb
                    return
                    
                    [COLOR=DarkGreen];displei puhtaks[/COLOR]
                    clear
                    clrf portb
                    movlw 00h
                    movwf portb
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    movlw 01h
                    movwf portb 
                    call clock
                    [COLOR=Blue]Viivitus 120ms[/COLOR]
                    retlw 0
                    
                    [COLOR=DarkGreen];data displei registrisse[/COLOR]
                    clock
                    bsf portb,07h
                    nop
                    bcf portb,07h
                    nop
                    retlw 0
                    
                    [COLOR=DarkGreen];Tähemärgid ekraanile[/COLOR]
                    char
                    bsf portb,04h
                    bsf portb,07h
                    nop
                    bcf portb,07h
                    nop
                    retlw 0
                    
                    end
                    viimati muutis kasutaja Marko238; 26 m 2007, 19:02.

                    Comment


                      #11
                      Vs: Mis on LCD koodis valesti. pic 16f628

                      Sa ei ole arvestanud seda, et displei rida saab ükskord ka täis. Edasi trükitakse niikaua tühja kuni LCD sisemine aadresipointer nulli keerab. Tulemuseks on just selline hüpleva sisuga displei.
                      Saada parem "3" niimitu korda kuimitu märgikohta ekraanil on.
                      Pika viite pead jätma numbri trükkimise järele sest muidu täitub ekraan liiga kiiresti ja sa ei näe midagi. Mujale piisab kuni 10ms viitest.
                      Saatmise proges ei tõstaks RS ja E-d korraga vaid esiteks RS, siis NOP ja siis E.
                      LCD 2. reale saamiseks tuleb anda ette aadress. See on igal displeil oma imalik number. Tutorialis seletatakse.

                      PS. Alguses on kasulik saata käsk "cursor home".
                      - 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


                        #12
                        Vs: Mis on LCD koodis valesti. pic 16f628

                        Mida sa jamad, tiri endale microC www.mikroe.com Seal juba librari sees sellele kivile ja kasutanud ka. Vaeva hulga vähem. Aga kui jalgratast tahad leiutada siis datasheet ainuke lahendus.
                        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


                          #13
                          Vs: Mis on LCD koodis valesti. pic 16f628

                          Näide 2*16 LCD juhtimisest: http://parsek.yf.ttu.ee/~felc/PICfiza.asm
                          Tegemist on fonoluku juurde käiva RFID-kaartidega läbipääsusüsteemiga millest ehk kunagi kirjutan AK-sse loo. LCD on ühendatud 4-bitise siini külge (PORTA). Otsi tekstist "LCD funktsioonid". Samas on ka lcd init ja viited. Takt: 11,0592 MHz. Prose on küll 18 - seeriast aga see ei sega.
                          Asju on huvitav ise teha...
                          - 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


                            #14
                            Vs: Mis on LCD koodis valesti. pic 16f628

                            Esmalt postitatud felch poolt
                            Asju on huvitav ise teha...
                            Justnimelt. Ma ei või muidu edasi minna oma projektiga, kui midagi jääb koodis arusaamatuks. Kokkuvõttes tuleb mul mitu erinevat süsteemitüüpi (LCD, AD, nupud, ledid jne) kokku panna ühtseks programmiks. Kui erinevate valmisjuppide koostöö ei peaks toimima, siis on kergem vigu leida.

                            Nüüd läsksin sujuvalt üle 16F870 le millel AD konv. ka sees. Esialgu siis katsetused simulaatoris ja lihtsam koodijupp hakkama. Oskab keegi ütelda, miks antud koodi analoogsisendit justkui neljaga jagatakse. Kui annan an sisendisse 0001, siis ei juhtu midagi, kuni an=0100, alles siis, lüüakse PortBs esimene pin püsti, mis peaks tähistama, et an=0001. Et kontrollida, kas mu omasäätud registrisse ka AD registrist kirjutatkse ja loetakse, siis panin vastava käsu vahele. Proovisin ka otse adresh st saata Wsse ja siis sealt PortB sse, aga sama jama ikka.
                            Kood:
                                LIST    p=16F870    
                                include "P16F870.inc"
                            __CONFIG    3d39h
                            
                            MINU EQU 21H
                            bsf STATUS,5
                            movlw 00h
                            movwf TRISB
                            movlw 01h
                            movwf TRISA
                            movlw b'00001110'
                            movwf ADCON1
                            bcf STATUS,5
                            
                            MOVLW B'00000001'
                            MOVWF ADCON0
                            
                            start
                            bsf ADCON0,0
                            bsf ADCON0,2
                            btfsc ADCON0,02h
                            goto $-1
                            movf ADRESH,0
                            movwf MINU
                            movf MINU,0
                            movwf PORTB
                            goto start
                            end
                            Et läheks veel teema pealkirjaga kokku, siis kavatsen AD tulemi LCDle kuvada
                            viimati muutis kasutaja Marko238; 31 m 2007, 16:15.

                            Comment


                              #15
                              Vs: Mis on LCD koodis valesti. pic 16f628

                              Esmalt postitatud Marko238 poolt
                              Oskab keegi ütelda, miks antud koodi analoogsisendit justkui neljaga jagatakse. Kui annan an sisendisse 0001, siis ei juhtu midagi, kuni an=0100, alles siis, lüüakse PortBs esimene pin püsti, mis peaks tähistama, et an=0001. Et kontrollida, kas mu omasäätud registrisse ka AD registrist kirjutatkse ja loetakse, siis panin vastava käsu vahele. Proovisin ka otse adresh st saata Wsse ja siis sealt PortB sse, aga sama jama ikka.
                              Kood:
                                  LIST    p=16F870    
                                  include "P16F870.inc"
                              __CONFIG    3d39h
                               
                              MINU EQU 21H
                              bsf STATUS,5
                              movlw 00h
                              movwf TRISB
                              movlw 01h
                              movwf TRISA
                              movlw b'00001110'
                              movwf ADCON1
                              bcf STATUS,5
                               
                              MOVLW B'00000001'
                              MOVWF ADCON0
                               
                              start
                              bsf ADCON0,0
                              bsf ADCON0,2
                              btfsc ADCON0,02h
                              goto $-1
                              movf ADRESH,0
                              movwf MINU
                              movf MINU,0
                              movwf PORTB
                              goto start
                              end
                              Sa loed andmed aadressist "ADRESH", sellepärast lülitataksegi PORTB alles 0100 peal. Loe andmeid ADRESL registrist, siis saad kätte vajaliku 0001 väärtuse.

                              Comment

                              Working...
                              X