[ milan kovacevic 85 @ 11.10.2013. 18:14 ] @
Pokusavam da spoim dva pica 12f683 i 16f877a uspeo sam to da uradim al radi samo u simulaciji,kad sam udasio kodove u obadva pika svaki radi svoje al nesalje jedan broj na drugi znaci 12f683 treba da ozciluje i da povecava i smanjuje pauze i to radi po ledici vidim a pic 16f877a treba taj broj da pokaze na displeju u sumulaciji to radi odlicno a na uredjaju nece nogice sam povezao otpornikom 10k,dali mi neko moze reci gde sam pogresio evo kodova u pbp-u micro codu radim
Code:
  #config
     __CONFIG _HS_OSC  & _WDT_OFF & _LVP_OFF & _CP_OFF
    #endconfig
    DEFINE OSC 20
    ADCON1 = 7 'Turn off ADC
    CMCON = 7 'Turn off comparator
'************************
'*   DISPLEY            *
    DEFINE LCD_BITS 4
    DEFINE LCD_DREG PORTA
    DEFINE LCD_DBIT 0
    DEFINE LCD_RSREG PORTB
    DEFINE LCD_RSBIT 7
    DEFINE LCD_EREG PORTA
    DEFINE LCD_EBIT 5
    DEFINE LCD_LINES 2
    pause 100          
   lcdout $fe,1, "BROJ PROLAZA"
    pause 1000          
'*********************
'*definisanje portova*
trisc=%00000000
trisd=%00000000
trisb=%00000000
trisa=%01000
'**********************
'***************************************
'*stavljanje portova na izlazne /ulazne*
portc=%11111111
portd=%10000000
portb=%00000000
porta=%01000


  include "modedefs.bas"

B VAR WORD
x var word
pocetak:
'a=0

'lcdout $fe,$C0, "                          "



 pinin VAR PORTB.6  ' Define pinin as PORTC.7
'******PRIMA PODATKE**************************
    do
 Serin2 pinin,396,[WAIT("3: "),DEC B]
 '*******************************************
 'DISPLEJ
  x=1000/b
  
  lcdout $fe,$C0, "X+Y=", dec b, "  ", DEC x, "HZ   "
  
  
     loop

a ovo je kod od 12f683
Code:
#CONFIG 
     __CONFIG  _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF  & _BOD_OFF & _CP_OFF & _PWRTE_ON
    #ENDCONFIG
    DEFINE OSC 4


'-------------------------- PDESAVANJA -------------------------------
    
    ANSEL = $30
    WPU = $37
    
    CMCON0 = 7                ' Analog comparators off

    TRISIO = %111100          '5-ULAZ
 '------------------------PROOGRAM------------------------------------        
   include "modedefs.bas"
   'DEFINMISANJE PORTOVA
   izlaz var GPIO.0
   IZLAZ=0
   
   prelaz var GPIO.3
   INPUT PRELAZ
   
   taster var GPIO.4
   INPUT taster  
  
   taster1 var GPIO.5
   input taster1 
   
   
    pinout var GPIO.1
   
     i var byte
     
    a VAR WORD
    A=0  
    b var word
    b=0
 
 '*************************
 ' NEPARAN BROJ X JE VECE *        
 '****************************  
    x var word              '*
    x=47 'pra pauza         '*
                            '*
    y var word 'druga pauza  *
    y=47                    '*
'*****************************    
    
   
   ' FREKVENCA KAD JE PRAZNA
   '********************************
   do WHILE prelaz = 1
  '**********
   izlaz=1 '*
   pause x '*
   izlaz=0 '*
   pause y '*
 '***********  
  
  'UVECAVANJE BROJA
  '******************************** 
   if taster1 = 0 and a = 0 then '*
   A=1                           '*
   x=x+1                         '*
   call provera                  '*
   endif                         '*
 '***************************    '*
   if taster1 = 0 and a = 1 then '*
  A=0                            '*
   Y=Y+1                         '*
   call provera                  '*
   endif                         '*
  '******************************** 
  
        
 '******************************** 
  IF TASTER = 0 AND A = 1 and x>25 then
  A=0                            
  X=X-1
  call provera
  endif
 '******************************** 
  if taster = 0 and a = 0 and y>25 then
  a=1
  y=y-1
  call provera 
    
  endif
 '*********************************  
  
  
   loop
   
   provera:
    
   for i = 1 to 5
      B=X+Y
   Serout2 pinout,396,["3: ",DEC B ,13,10]   ' 3: 546
     next i
      return
      
       END
[ bogdan.kecman @ 12.10.2013. 20:42 ] @
problemi sa prvim programom (kod ti je odvratan btw, nauci da zubis kod, dodajes razmake..)

- nisam 100% siguran kako basic pise po lcd-u ali si TRIS setovao posle pisanja po lcd-u, TRIS treba da setujes pre nego krenes da pises po portovima
- komentari su ti pogresni:
Code:

'*definisanje portova*
trisc=%00000000
trisd=%00000000
trisb=%00000000
trisa=%01000
'**********************
'***************************************
'*stavljanje portova na izlazne /ulazne*
portc=%11111111
portd=%10000000
portb=%00000000
porta=%01000


?!? o kakvom ti definisanju ovde pises? TRISx postavlja port na ulaz/izlaz a PORTx setuje izlaz odnosno cita ulaz
u startu ne znam sta ti je A3 na ploci ali si prvo gora napravi da ti je A3 ulazni pin a onda si dole probao da upises jedan u njega (ne moze, to je ulazni pin)

dakle setovanje da li je port I ili O ti nije kako valja (ili si pogresio ili nisi dobro shvatio sta radi TRIS a sta PORT)

- nigde nisi konfigurisao seriski port?!
- C7 sta ovo treba da radi?
Code:

 pinin VAR PORTB.6  ' Define pinin as PORTC.7
'******PRIMA PODATKE**************************
    do
 Serin2 pinin,396,[WAIT("3: "),DEC B]

kao sto rekoh, ne trosim basic, ali
1. B6 ti nije setovan kao ulaz (trisb=%00000000 znaci da je ceo portB izlaz)
2. gde si konfigurisao brzinu seriskog porta?


drugi program nema svrhe ni gledati dok prvi ne sredis (kapiram da imas iste probleme i u drugom)
[ milan kovacevic 85 @ 12.10.2013. 21:09 ] @
Mgu dobitii primer prepravio sam opet neradi
[ ColdKeyboard @ 12.10.2013. 21:24 ] @
Primera imas milion samo treba da znas sta hoces i gde da gledas. Connect two PIC microcontrollers together

Ne ocekuj da neko uradi sav posao za tebe a ti samo da kliknes compile i ono radi. Posalji kod, reci sta te muci, ko moze pomoci ce ti.
Prije ces nauciti kad sam nesto otkrijes i razumijes zasto je tako nego kad ti neko da gotov kod a ti tumacis sta je sta.

Pogledaj datasheet-ove kontrolera. Nadji kako se portovi definisu kao ulazi/izlazni. Odredi na kojem kontroleru koji pin zelis da koristis i podesi
ga tako. Provjeri da li ga neka druga periferija ne koristi (koju takodje koristis u kodu). Podesi oscilatore da rade na frekvenciji na kojoj zelis.
Pin jednog kontrolera mozes spojiti direktno na pin drugog kontrolera (ako oba rade na istom naponu), pinovi bi trebali da imaju interno regulisan napon i struju koju soursuju/sinkuju,
ako su razlicite (pise u datasheet-u maksimalna vrednost) onda ogranici sa otpornikom (na 5V 1k bi ti trebao dati oko 5mA, 10K ti je mozda previse, opet proveri u datasheet-u).

Radi debug deo po deo. Napravi jedan MCU da salje 1/0 na izlaz, nakaci ledovku sa otpornikom i gledaj da li blinka kao sto bi trebala (kao sto ti hoces/ocekujes), kad to dobijes da radi onda
predji na drugi MCU, napravi mu da kad na nekom pinu dobije 1 da izbaci 1 na nekom drugom pinu na kojem ces imati isto spojenu ledovku. Uzmi rucno spoj taj ulazni pin na VCC/GND i gledaj da li
dioda svetli, ako i to radi onda ti je kod (barem taj deo) ok. Spoj ih direkno i gledaj da li ce ta dioda i dalje da svetli kad prvi posalje podatak. Ako sve radi onda nastavi da radis dalje sta si zamislio.

Takodje ako ne koristis UART za neku drugu operaciju, mozda da razmislis da koristis UART za komunikaciju izmedju dva kontrolera, to bi ti verovatno dosta olaksalo zivot (pod uslovom da ih pravilno iskonfigurises).
[ bogdan.kecman @ 12.10.2013. 23:17 ] @
ja ne mogu da ti dam primer posto koristis basic, potrazi na netu
pic2pic communication basic ili tako nesto ima sigurno primera ..
[ milan kovacevic 85 @ 12.10.2013. 23:50 ] @
Sad vidim greske u definicijama,nisam pocetnik al prepravljo sam program jedan zato komentari nisu dobbri i nisam ispravio tris i ulazne portove sad sam to uradio al opet radi u simulatoru a na ploci ne 12f683 salje a 16f877 nece da primi gde je greska hm..vezo sam ledicu na komunikacioni vod blinka znaci da salje a sto ovaj neprina ne znam naravno raskacio sa led vezao sam je samo da vidim jese desava sta
[ bogdan.kecman @ 12.10.2013. 23:56 ] @
aj opet c/p ispravljenog programa koji treba da prima da vidimo sta si radio :D
[ milan kovacevic 85 @ 13.10.2013. 00:13 ] @
Code:
    #config
     __CONFIG _HS_OSC  & _WDT_OFF & _LVP_OFF & _CP_OFF
    #endconfig
    DEFINE OSC 20
    ADCON1 = 7 'Turn off ADC
    CMCON = 7 'Turn off comparator
'************************
'*   DISPLEY            *
    DEFINE LCD_BITS 4
    DEFINE LCD_DREG PORTA
    DEFINE LCD_DBIT 0
    DEFINE LCD_RSREG PORTB
    DEFINE LCD_RSBIT 7
    DEFINE LCD_EREG PORTA
    DEFINE LCD_EBIT 5
    DEFINE LCD_LINES 2
    pause 100          
   lcdout $fe,1, "BROJ PROLAZA"
    pause 1000          
'*********************
'*definisanje portova*
trisc=%00000000
trisd=%00000000
trisb=%11000000
trisa=%01000
'**********************
'***************************************
'*stavljanje portova na izlazne /ulazne*
portc=%00000000
portd=%00000000
portb=%11000000
porta=%01000


  include "modedefs.bas"

B VAR WORD
x var word
pocetak:






 pinin VAR PORTB.6  ' Define pinin as PORTB.6
'******PRIMA PODATKE**************************
    do
 Serin2 pinin,396,[WAIT("3: "),DEC B]
 '*******************************************
 'DISPLEJ
  x=1000/b
  
  lcdout $fe,$C0, "X+Y=", dec b, "  ", DEC x, "HZ   "
  
  
     loop

Code:
 
 '---------------------------OSIGURACI--------------------------------
 #CONFIG 
     __CONFIG  _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF  & _BOD_OFF & _CP_OFF & _PWRTE_ON
    #ENDCONFIG
    DEFINE OSC 4


'-------------------------- PDESAVANJA -------------------------------
    
    ANSEL = 0
    WPU = $37
    
    CMCON0 = 7                ' Analog comparators off

    TRISIO = %111100          '5-ULAZ
 '------------------------PROOGRAM------------------------------------        
   include "modedefs.bas"
   'DEFINMISANJE PORTOVA
   izlaz var GPIO.0
   IZLAZ=0
   
   prelaz var GPIO.3
   INPUT PRELAZ
   
   taster var GPIO.4
   INPUT taster  
  
   taster1 var GPIO.5
   input taster1 
   
   
    pinout var GPIO.1
   
     i var byte
     
    a VAR WORD
    A=0  
    b var word
    b=0
 
 '*************************
 ' NEPARAN BROJ X JE VECE *        
 '****************************  
    x var word              '*
    x=47 'pra pauza         '*
                            '*
    y var word 'druga pauza  *
    y=47                    '*
'*****************************    
    
   
   ' FREKVENCA KAD JE PRAZNA
   '********************************
   do WHILE prelaz = 1
  '**********
   izlaz=1 '*
   pause x '*
   izlaz=0 '*
   pause y '*
 '***********  
  
  'UVECAVANJE BROJA
  '******************************** 
   if taster1 = 0 and a = 0 then '*
   A=1                           '*
   x=x+1                         '*
   call provera                  '*
   endif                         '*
 '***************************    '*
   if taster1 = 0 and a = 1 then '*
  A=0                            '*
   Y=Y+1                         '*
   call provera                  '*
   endif                         '*
  '******************************** 
  
        
 '******************************** 
  IF TASTER = 0 AND A = 1 and x>25 then
  A=0                            
  X=X-1
  call provera
  endif
 '******************************** 
  if taster = 0 and a = 0 and y>25 then
  a=1
  y=y-1
  call provera 
    
  endif
 '*********************************  
  
  
   loop
   
   provera:
    
   for i = 1 to 5
      B=X+Y
   Serout2 pinout,396,["3: ",DEC B ,13,10]   ' 3: 546
     next i
      return
      
       END
[ bogdan.kecman @ 13.10.2013. 00:52 ] @

ovaj bi trebalo da prima

Code:
    
trisc=%00000000
trisd=%00000000
trisb=%11000000
trisa=%00001000


dakle B6, B7 i A3 su ulaz

Code:

include "modedefs.bas"


ako ja dobro kapiram google, ovo su definicije brzine za serin/serout basic naredbe ..
ali ti onda koristis SERIN2 PININ, 369 .. ne znam koja je to brzina "396", mozda da iskoristis neku standardnu (sa obe strane) npr "N2400" to je u primeru za serin dakle umesto:

Code:

 Serin2 pinin,396,[WAIT("3: "),DEC B]


ti uradis

Code:

 Serin2 pinin, N2400, [WAIT("3: "), DEC B]


isto i za slanje ...

neko ko radi PBP bi trebalo da zna sta te muci, meni sve ovo izgleda vrlo ... basic .. nisam ga koristio vise od 30 godina .. ali pitanja su sledeca

sto serin2 ? kapiram da radis primanje bajta na 16f877a on ima jedan seriski port tako da zasto serin2? kada on nema drugi seriski port, dalje zasto port B6, to je ako se dobro secam na 877A PGC pin?! zasto ne iskoristis postojeci seriski port na 877A sa RX pinom na C7 ?

ili je problem u tajmingu, ili ti je brzina prevelika za softwerski serial, ili pbp software serial ne valja (sw serial generalno nije preterano pametna stvar posebno kada imas hw serial dostupan u cipu koji vec koristis) ili ne saljes kako valja pa ti ovaj WAIT nikad ne saceka tu trojku i dvotacku

moras da razdvojis ta dva pica, da okacis seriski port na komp (ili uzmes neki logic analyzer) i proveris da li ti onaj sto salje stvarno salje to kako valja i odgovarajucom brzinom .. kada si siguran da je to ok (vatas na pc-u na seriskom tu datu) onda to stavis sa strane i saljes sa pc-a na ovaj primac datu i gledas da radi, kad to proradi onda ih spojis zajedno
[ bogdan.kecman @ 13.10.2013. 00:55 ] @
pic12f683 takodje nema 2 uart-a na sebi te serout2 je takodje !?!??!?! zasto 2 ? mislim on nema ni prvi uart?! ako si planirao da pricas seriskim portom, zasto uopste koristis pic koji nema uart kada imas stotine verzija sa uartom?
[ milan kovacevic 85 @ 13.10.2013. 01:19 ] @
Moj problem je sto sam napravio uredjaj sa 12f683 i to lepo radi al treba jedan broj da iscitam a malo mi je nogica da nakacim displey na 683 a imam neku plocu sa 877a i displejom pa hocu da ih uparim samo broj da vidim zato mi treba spajanje ta dva pika
[ milan kovacevic 85 @ 13.10.2013. 01:29 ] @
Upravu si pgc pin koristim zato sto mi je na letvici sa spajanje sa pickitim pa nemoram vaditi uredjaj iz kutije a na kraju krajeva ako neuspem da nateram da komuniciraju znam sta cu nateracu da 877 broi impulse a da 683 u for next petlji otkuca tolko puta kolki je broj,a da 16f877 sabere kolko puta je bobio impuls i taj broj da mi pokaze na displeju
[ ZAS011 @ 13.10.2013. 09:00 ] @
Bogdane, SERIN i SERIN2 su softverske zamene za "serijski" port. 12F683 nema hardversku implementaciju serijskog porta tako da za tu stranu je ok SERIN/SERIN2

Na prijemnoj strani bih radije koristio HSERIN. HSERIN2 je rezervisan za DRUGI serijski port kod mikrokontrolera koji imaju više od jednog.

Kombinacija sa SEROUT/SEROUT2 na predajnoj strani + HSERIN na prijemnoj strani bi, pod uslovom da su brzine za komunikaciju pravilno podešene, trebalo da radi 1/1.
Malko me samo buni zašti si na predajnoj strani koristio DEC kvalifikator?
Sasvim je dovoljno da podatak pošalješ u "sirovom" obliku i.e. B, a na prijemnoj strani upotrebiš DEC kvalifikator kako bi ti promenljiva bila u formi koja ti odgovara.
Ako broj 4 pošalješ modifikovan, na prijemnoj strani to nije 4 već 54d(34h) pošto si modifikatorom DEC baš to uradio, poslao Decimalni broj.
Probaj prvo da središ da ti komunikacija proradi sa što manje komplikacija pa zatim zakomplikuj život "do daske"

@milan kovacevic 85:
Da li su ti te PIConje na istoj ploči ili su "razmaknuti" više od 5 cm?
Ako su na istoj pločici ne vidim svrhu postojanja 12F.
BTW: Kada već koristiš moderniji 12F, mogao bi da koristiš i moderniji 16F (16F887).
[ milan kovacevic 85 @ 13.10.2013. 16:19 ] @
Razmaknuti su nisu na istoj ploci al koristim kratak kabel da ih povezem i na istom su napajanju,zaso011 dali mi mozes ispisati kratak kod da 123f683 posalje broj a 16f877a da ga primi,star je kontroler to mi je kontroler za testiranje jako dugo postoji a ima displei i zato hocu da ga nakacim treba samo neke brojeve da vidim od 12f683