skraceni kurs ucenja picbasica

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
Branez
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 457
Joined: 22-04-2008, 16:27
Location: Maribor(SLO) Koprivnica(HR)
Contact:

Re: skraceni kurs ucenja picbasica

Post by Branez »

Ako se ne može spremit na desktop, spremi negdje na disk!
Real Radios Glow in the Dark!
User avatar
LegoMan4
Penjem se :)
Penjem se :)
Posts: 92
Joined: 09-05-2012, 21:47
Location: split

Re: skraceni kurs ucenja picbasica

Post by LegoMan4 »

cujte par glupih itanja sa strane 4

u ovoj shemi treba li se staviti kristal na eeprom?
http://www.elektronika.ba/forum/download/file.php?id=49
na ovoj slici

http://www.elektronika.ba/forum/download/file.php?id=50
jel koliko b-ova +1na toliko se mjesta djeli memorija?

i ne kuzim ove pinove sda i scl sto oni rade

a ovi pinovi a0 a1 a2 jesu li to inputi i outputi tog eeproma

a kontroliranje eeproma ( pisanje brisanje,čitanje..) se nemoze obaviti osim sa programatorom (jesam li u pravu?
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Post by Kukinjos »

LegoMan4 wrote: u ovoj shemi treba li se staviti kristal na eeprom?
http://www.elektronika.ba/forum/download/file.php?id=49
na ovoj slici
Ne, a i gdje bi ga ti stavio i zašto?
download/file.php?id=50
jel koliko b-ova +1na toliko se mjesta djeli memorija?
Malo nejasno pitano, ali točno!
i ne kuzim ove pinove sda i scl sto oni rade
sda - serial data, preko ovog pina prenosiš podatke u i iz memorije sinkronizirane s scl - serial clock.
a ovi pinovi a0 a1 a2 jesu li to inputi i outputi tog eeproma
To su inputi ili ulazi u memoriju, ako imaš više memorija paralelno vezanih, onda ovdje namještaš adresu svake pojedinačne memorije.
a kontroliranje eeproma ( pisanje brisanje,čitanje..) se nemoze obaviti osim sa programatorom (jesam li u pravu?
Nisi, jer to može obaviti i bilo koji procesor s software-om za I2C protokol. Evo prvo s googla:
http://www.robot-electronics.co.uk/acat ... orial.html
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
LegoMan4
Penjem se :)
Penjem se :)
Posts: 92
Joined: 09-05-2012, 21:47
Location: split

Re: skraceni kurs ucenja picbasica

Post by LegoMan4 »

pa odakle scl-u takt? od pica ili cega?

a pinovi a1 a2 a0 i sda sluze za isto, samo sda moze i citati podatke? a,a-ovi su za vise paralelnih piceva (ili cega god) a sda je samo za 1 pic ( ili cega god) klanjavam se na vremenu i trudu koje ste ulozili u mene
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Post by Kukinjos »

Linijom SCL upravlja procesor, memorija samo "sluša" SCL i SDA i prima naredbe i podatke,ili šalje podatak na SDA kad je SCL = 1. Pinove A0, A1 i A2 spajaš na masu ili Vcc i time binarno određuješ adresu te memorije, što znači da se memorija neće javiti procesoru, ako ovaj preko SDA i SCL ne "prozove" baš tu namještenu adresu. I2C bus radi samo pomoću ove dvije linije (SDA i SCL) i mase, a mogu se spajat više različitih chipova (memorije, ADC, DAC, video procesori, audio proc. i ....), s tim da svaki uređaj u tom lancu mora biti na različitoj adresi (A1, A2, A3).
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Post by Kukinjos »

@LegoMan

Evo ti samo dio koda za pisanje u I2C memoriju, pokušaj čitanje sam, za trening.

Code: Select all

'****************************************************************
'*  Name    : LegoMan4 - I2C upis u memoriju                    *
'*  Author  : Kukinjos                                          *
'*  Notice  :                                                   *
'*          :                                                   *
'*  Date    : 08.07.2012.                                       *
'*  Version :                                                   *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

' Zelimo upisati u memoriju 24LC65, broj 8, u memorijski blok 2, na adresu 5
' kontrolni byte se sastoji od dva dijela, gornji dio ($a) "proziva" memoriju
' 24Cxx, jer se samo I2C memorije javljaju na taj poziv, donji dio (0) je adresa
' koju si postavio na 24C65, spajanjem pinova A3, A2 i A1 na masu ili Vcc. Ako
' su svi na masi onda je adresa 0, kao i u ovom primjeru. Obrati paznju da se ova
' adresa sastoji od 4 bita a ti koristiš GORNJA 3 bita, zadnji bit je uvijek 0.
' Primjer: zalemio si A2 na masu,  A1 na +Vcc i A0 na +Vcc, znaci binarno 011 i zadnji
' bit je uvijek 0, ili binarno = 0110 ili hex. = 6. Tada bi kontrolni byte bio $a6


define i2c_sda porta.0                          ' obvezno definiranje SDA prikljucka
DEFINE i2c_scl porta.1                          ' obvezno definiranje SCL prikljucka


'        naredba    SDA      SCL  kont-   memo-      adresa    podatak kojeg
'        za upis u   .        .   rolni   rijski     u bloku   zelimo
'        memoriju    .        .   byte    blok (02)   (05)     upisati [8]
'           .        .        .     .       .           .          .
'           .        .        .     .    ....           .          .
'           .        .        .     .    . ..............          .
'           .        .        .     .    . .   .....................
'           .        .        .     .    . .   .
'           v        v        v     v    v v   v

       i2cwrite porta.0, porta.1, $a0, $0205, [8]   ' upiši 8 na bl.2 adr. 5
                                                    ' 
       pause 10                                     ' obvezno pričekaj završetak upisa
       




  
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Post by Kukinjos »

@LegoMan4:
Evo ti traženi program, čisto za učenje. Morao sam na breadboard-u složit "razvojni sustav" :lol: za probat kako ovo radi.

Code: Select all

'****************************************************************
'*  Name    : LegoMan4                                          *
'*  Author  : Kukinjos                                          *
'*  Notice  : Spremanje uzoraka blinkanja LED-a u EEPROM        *
'*          : i izvršavanje istih                               *
'*  Date    : 11.07.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

define osc 4                                        ' Označava basicu frekv. oscilatora
                                                    ' kako bi mogao točno odredit timing 
                                                    ' za npr. instrukciju PAUSE
                                                    
CMCON = $07                                         ' Radim s chip-om 16F628A, pa moram
                                                    ' PORTA proglasit za digitalni I/O
                                                    ' jer je inače prilikom reseta u
                                                    ' modu analognog komparatora

symbol SDA = PORTA.0                                ' dodjelio sam ovim portovima imena
symbol SCL = PORTA.1                                ' radi lakšeg snalaženja u programu

SYMBOL LED = PORTB.7                                ' isto kao gore navedeno
OUTPUT LED                                          ' port za LED je izlazni

SVIJETLI var byte                                   ' varijabla koliko dugo će LED
                                                    ' svjetlit x 100 ms
                                                    
NE_SVIJETLI var byte                                ' varijabla koliko dugo će LED
                                                    ' biti ugašen x 100 ms
                                                    
PONAVLJANJE var byte                                ' varijabla koliko će se puta
                                                    ' ponovit SVIJETLI / NESVIJETLI

i var byte                                          ' pomoćne varijable brojača
x var byte                                          ' isto kao gore navedeno


adr var word                                        ' koristim I2C EEPROM 24C64
                                                    ' a njegova adresa je dužine 2 byte-a

CTRL var byte                                       ' kontrolni byte
CTRL = %10100000                                    ' za memorije je %10100000 binarno
                                                    ' ili $A0 hexadecimalno

'****************************************************************
'*                    UPIS "UZORKA" U MEMORIJU                  *
'*   PRVI UZORAK SE NALAZI NA LOKACIJI 0, DRUGI NA LOKACIJI 3   *
'****************************************************************

Uzorak_1:                                           ' informacije radi, iako nije potreno

adr = 0                                             ' adresa prvog uzorka = 0
SVIJETLI = 5                                        ' 0,5 sekundi
NE_SVIJETLI = 3                                     ' 0,3 sekunde
PONAVLJANJE = 20                                    ' LED će zablinkat 20 puta

I2cwrite SDA, SCL, CTRL, adr, [SVIJETLI, NE_SVIJETLI, PONAVLJANJE]' upiši u memoriju 
pause 10                                            ' obvezno pričekaj kraj upisa



Uzorak_2:                                           ' informacije radi, iako nije potreno

adr = 3                                             ' adresa drugog uzorka = 3
SVIJETLI = 10                                       ' 1 sekunda
NE_SVIJETLI = 10                                    ' 1 sekunda
PONAVLJANJE = 8                                     ' LED će zablinkat 8 puta

I2cwrite SDA, SCL, CTRL, adr, [SVIJETLI, NE_SVIJETLI, PONAVLJANJE]' upiši u memoriju 
pause 10                                            ' obvezno pričekaj kraj upisa



'****************************************************************
'*                         GLAVNA PETLJA                        *
'****************************************************************

Pocetak:                                            ' početak petlje

adr = 0                                             ' adresa prvog uzorka = 0

i2cread SDA, SCL, CTRL, adr, [SVIJETLI, NE_SVIJETLI, PONAVLJANJE]  ' pročitaj prvi uzorak

gosub pali_gasi                                     ' odradi uzorak




adr = 3                                             ' adresa drugog uzorka = 3

i2cread SDA, SCL, CTRL, adr, [SVIJETLI, NE_SVIJETLI, PONAVLJANJE]   ' pročitaj drugi uzorak

gosub pali_gasi                                     ' odradi uzorak




goto pocetak                                        ' vrati se na početak petlje



'****************************************************************
'*                          PODPROGRAMI                         *
'****************************************************************

'****************************************************************
'*               PODROGRAM ZA IZVOĐENJE UZORKA                  *
'*             (ovo mi se ne da objašnjavat :)))                *
'****************************************************************


pali_gasi:

for i = 1 to PONAVLJANJE 

    HIGH LED
         
        for x = 1 to SVIJETLI
        pause 100
        next x
    
    LOW LED       
    
        for x = 1 to NE_SVIJETLI
        pause 100
        next x

next i

return

'****************************************************************

end                                                 ' fala Bogu KRAJJJJJJ
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Zasto dva jednostavna koda razlicito rade na 16F877A radi kako sam zamislio:

Code: Select all

symbol led5=PORTB.3     
symbol led4=PORTB.0     
SYMBOL led3=PORTB.4    
symbol LED2=PORTB.5  
symbol LED1=PORTB.6  

TRISB=$00 
 
  proba:
 
 
 led2=0:led1=1
 led3=1
 Pause 5000
 led3=1
 led5=1
 pause 5000
 led3=1
 led5=1
 led4=1
 pause 10000
 portb=0
 end
a na 16F887 radi bzv tj neradi isto kao na 877A

Code: Select all

OSCCON = %01100001          
DEFINE OSC 4 

ANSEL = %00000000           
OPTION_REG.7 = 0            
               
          
symbol led5=PORTB.3     
symbol led4=PORTB.0     
SYMBOL led3=PORTB.4    
symbol LED2=PORTB.5  
symbol LED1=PORTB.6  

TRISB=$00  

 proba:
 
 led2=0:led1=1
 led3=1
 Pause 5000
 led3=1
 led5=1
 pause 5000
 led3=1
 led5=1
 led4=1
 pause 10000
 portb=0
 end
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

Moguce da je problem RMW... Stavi pauze izmedju paljenja led-a.
Isto tako 887 nema istu konfiguraciju kao 877, ima analognih ulaza i po portu b.
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Jednostavno mi treba da mi se upali led1, pa posle par sekundi led1 i led2 tj led1 nastavlja sa radom, a pali se tj nadodaje led 2, pa posle izvesnog vremena se nadodaje led3, pa recimo led4 (znaci led1,2,3 rade a nadodeje se i led4) sve su upaljene rade npr 5 sec i recimo na kraju ostaje da radi samo led1 i led 4, a ostale se gase, redosled je nebitan ovo sam samo probao na 16f877A radi ok, a na 16F887 upali se led1 drzi do kraja programa sto je ok ali ostale se pale i gase redom, a trebale bi da se nadovezju :?:
Mislis da je do konfig porta b ?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

Smrdi mi na RWM...
Stavi pauze od 10mS izmedju svake promene stanja na portu b.
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Nemam ideju, mozda nesto u podesavanju, jel neko radio sa 16F887?
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: skraceni kurs ucenja picbasica

Post by _heX »

Radis s PORTB, a ANSEL kontrolira analogne funkcije PORTA. ANSELH kontrolira PORTB.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Post by Kukinjos »

LVP = 0
OPTION_REG.7 = 1

Ovo bi po datasheet-u trebalo biti za oslobodit PORTB za I/O funkciju, probaj, ja mogu tek sutra tijekom dana.

edit:
uh sad vidjeh 887, a ja gledam 877, sorry!
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Post by Kukinjos »

Code: Select all

ANSELH = %00000000
OPTION_REG.7 = 1
OSCCON = %01100001
TRISB = $00
A ovo bi valjda trebalo radit.

Ne govoriš o napretku, jesi li uspio, ili si još u problemu?
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Nisam nista uspeo, bio sam do kasno na poslu, definitivno je nesto do podesavanja, kod sam radio i probao na 877A, a na kraju sam se predomislio i uzeo 887 i uradio plocicu. Da jos napomenem da cu koristiti RA0-RA3 i RC0-RC3 kao digitalne ulaze, RB0-RB7 kao digitalne izlaze (analogne ne koristim) Na port D bi stavio LCD displ.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

A da probas staviti samo male pauze izmedju menjanja stanja led. Pa da vidis jel pomaze... Glupo mi vec treci put pisem istu stvar...
_heX
Napredujem
Napredujem
Posts: 136
Joined: 29-10-2009, 20:09
Location: Republika Zagorje

Re: skraceni kurs ucenja picbasica

Post by _heX »

Pa jesi li obrisao ANSELH? Kak su ti vezane te ledice, jel imas otpore u seriji? 4MHz-a mi je malo za rmw (osim ako nemas kondenzatore spojene na pinove).
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

Oce i led bez otpora da pravi probleme...
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Recimo ovaj kod radi dobro na 16F84A i na 16F877A, a na 16F887 brljavi, ili sam ja nesto zez... :roll:

Code: Select all

define OSC 4
TRISB = $00           
               
          
symbol LED5=PORTB.3     
symbol LED4=PORTB.0     
SYMBOL LED3=PORTB.4    
symbol LED2=PORTB.5  
symbol LED1=PORTB.6  

 TRISB=$00  

 proba:
 
 PORTB = $FF    ' Upali sve LED diode
 pause 500
 PORTB = $00    ' Ugasi sve LED diode
 pause 500  
 
 led1=1:led2=1:led3=1 'Upali LED1,LED2,LED3 i zadrzava 2 sec
 Pause 2000
 led1=1:led2=1:led3=0:led5=1 'Nastavlja sa radom LED1,LED2, gasi se LED3, pali se i zadrzava 2 sec
 pause 2000
 led1=0:led2=0:led3=1:led5=0  'Gasi se LED1, LED2, pali se LED3, gasi se LED5 i zadrzava 0,5 sec
 pause 500
 portb=0       'sve se gasi i zadrzava 1 sec
 pause 1000
 led1=1:led2=1:led3=1:led4=1:led5=1    'sve se pali i zadrzava 1,5 sec
 pause 1500
 PORTB = $00
 pause 500    'Ugasi sve LED diode i zadrzi ugasene 0,5 sec
 
 
 goto proba
 end
Post Reply