Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)

[es] :: Elektronika :: Mikrokontroleri :: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)

Strane: 1 2

[ Pregleda: 7641 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ruzmarin84
obradovic
kraljevo

Član broj: 141743
Poruke: 33
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)08.07.2010. u 18:51 - pre 168 meseci
Ukapirao sam ovo oko brzina... Ustavri sve pise u datasheetu, samo sto treba da se cita na pravom mestu... Jos sinoc sam uspeo da knfigurisem da svaki pic radi na vise raznih brzina sa raznim oscilatorima, i sve se slaze i u kompajleru... i na terminalu... ali kad se spoje dve plocice medjusobno, nece ni da cuje... Pa sam danas napravio jednu plocicu sa max232, da proverim da li su ove dve dobre... i sve radi 100%. ali kad ih spojim... nista.

Stvarno ne znam vise sta da mu radim, a izgubio sam dosta vremena, pa mi se ne odustaje...
Posto sam trenutno malo bez ideje, da vas priupitam, da li se prilikom spajanja dva mikrokontrolera preko serijskog porta jednostavno sa dve zice spoje RX prvog i TX drugog i RX drugog sa TX prvog, ili treba da ima jos nesto izmedju... Da nisam tu nesto zeznuo...?

Evo i da ostavim link, ako se neko nekad bude zezao sa ovim brzinama za serijski port u zavisnosti od brzine oscilatora meni je dosta koristio Pic Baud Rate Calculator...

http://www.micromagicsystems.com/

Ako neko ima neko knstruktivno resenje, ili predlog, neka baci neku recenicu...



 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.225.*



+28 Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)08.07.2010. u 20:20 - pre 168 meseci
Treba pored Rx i Tx jos zicka za masu.

Podrazumeva se da Tx prvog ide na Rx drugog i Rx prvog na Tx drugog.

Ako bas oces da stavljas max-ove, treba ti 2 komada, kod svakog kontrolera po jedan. Onda mozes pomocu racunara koji ima 2 serijska porta da 'snifujes' komunikaciju izmedju samih kontrolera a jos da ti se vrti i aplikacija koja sa 18F cavrlja USB-om.
 
Odgovor na temu

cat2kill

Član broj: 252782
Poruke: 11



+1 Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)08.07.2010. u 20:54 - pre 168 meseci
REcimo ovako nešto :D cisto shematski :D

- "I have betrayed your heart in fear of my own decline and you will never know about the tears I cried because of that soul that lies in chains." -
 
Odgovor na temu

ruzmarin84
obradovic
kraljevo

Član broj: 141743
Poruke: 33
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)08.07.2010. u 21:53 - pre 168 meseci
Ma necu maxeve, koji ce mi djavo ako ne trebaju... Samo sam pomocu jednog testirao ove dve skalamerije sto sam pravio... i uverio se da su ispravne...
Pretpostavljam da je nesto u kodu greska, ali ko zna dal cu uspeti to da nadjem... Opet kazem, ako neko od vas poznaje picbasic da malo pogleda ove kodove... dal mozda nije greska u formatu podatka koji saljem (ovo DEC)... da li pic to razume na isti nacin kao i pc...

Dal znaci nesto dodati pauze iza svakog slanja/primanja...
jesam malo dosadan, al malo mi fali da ovo ugazim, i odem na pecanje ili tako nesto...

Sa masom sam isprobao... bez uspeha...
Prikačeni fajlovi
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.225.*



+28 Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)08.07.2010. u 22:25 - pre 168 meseci
Malko si se nesto posvadjao sa bajtovima/wordovima

deklarises clanove niza kao Byte
Code:
USBBuffer        Var Byte[USBBufferSizeMax]

a pridodeljujes vrednost koja je veca od 255 (Byte = 0..255 ili $00..$FF)
Code:
uSBBuffer[1]=444

ovo gore NECE DA MOZE posto USBBuffer[1] ne moza da ima vrednost vecu od $FF (255)

tolko za pocetak, trazi dalje ...
 
Odgovor na temu

ruzmarin84
obradovic
kraljevo

Član broj: 141743
Poruke: 33
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)10.07.2010. u 15:05 - pre 168 meseci
Opet moram da gnjavim nekog da malko zrakne u ove PICBASIC kodove... nema teorije da ova dva progovore medjusobno...
Pic 16 uopste nece da odgovori ovom pic18.Kao da ne razume ovo 254. A preko terminala se sve odvija korektno. Kada instrumentom premerim izmedju tx i rx vidim da pic 18 posalje zahtev, ali ovaj 877 ne odgovara. a kada komuniciram preko terminala imam i slanje i odgovor. Juce sam se oko ovog zezao ceo dan, i procitao kilometre teksta, ali jednostavno ne mogu da nedjem nesto korisno. Ovo za byte-ove sam prevideo... ali nista i kad sam to promenio.

Da nije nesto vezano za oscilatore. Da ne moraju biti iste hercaze??? Ne znam gde da gledam...
Prikačeni fajlovi
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.234.*



+28 Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)10.07.2010. u 18:17 - pre 168 meseci
Mislim (ne zamo da mislim, nego znam) gde ti je greska. Turas Dec modifajer gde treba i gde ne treba. Procitaj help ili uputstvo za PBP.

Ovako to izgleda u Proton+ -u

Code:
Device 16F877
Xtal 20

Declare Adin_Res 10
Declare Adin_Tad 8_FOSC
Declare Hserial_Baud 2400

Dim AD_Rez_1 As Word
Dim AD_Rez_2 As Word
Dim AD_Rez_3 As Word
Dim AD_Rez_4 As Word
Dim AD_Rez_5 As Word
Dim AD_Rez_6 As Word
Dim AD_Rez_7 As Word
Dim AD_Rez_8 As Word

Dim i As Byte

Dim USBBufferSizeMax As 18
Dim USBBufferSizeTx As 18
Dim USBBufferSizeRx As 18

Dim test As Byte
Dim USBBuffer[USBBufferSizeMax] As Byte
Dim USBBufferCount As Byte

ADCON0 = %00111111
TRISA  = %11111111
ADCON1 = %10000010

Low PORTE.0
TRISC.7 = 1
TRISC.6 = 1
RCSTA.7 = 1

Pocetak:

ProgramStart:
GoSub DoSerIn
GoTo ProgramStart

DoSerIn:
    USBBufferCount = USBBufferSizeRx
    HSerIn [Dec USBBuffer[0]]
    If USBBuffer[0] = 254 Then
        GoSub DoSerOut
    EndIf
Return
                    
DoSerOut:
    USBBufferCount = USBBufferSizeTx
    USBBuffer[0] = 254
                        
    'REALIZACIJA AD KONVERZIJE
    AD_Rez_3 = ADIn 0        'izvrsi konverziju na RA0 i 10 bita
                            'rezultata smesti u AD_rez_3
    AD_Rez_4 = ADIn 1       'izvrsi konverziju na RA1 i 10 bita
                            'rezultata smesti u AD_rez_4
    AD_Rez_1 = ADIn 2       'izvrsi konverziju na RA2 i 10 bita
                            'rezultata smesti u AD_rez_1
    AD_Rez_2 = ADIn 3       'izvrsi konverziju na RA3 i 10 bita
                            'rezultata smesti u AD_rez_2
    AD_Rez_5 = ADIn 4       'izvrsi konverziju na RA4 i 10 bita
                            'rezultata smesti u AD_rez_5
    AD_Rez_6 = ADIn 5       'izvrsi konverziju na RA5 i 10 bita
                            'rezultata smesti u AD_rez_6
    AD_Rez_7 = ADIn 6       'izvrsi konverziju na RA6 i 10 bita
                            'rezultata smesti u AD_rez_7
    AD_Rez_8 = ADIn 7       'izvrsi konverziju na RA7 i 10 bita
                            'rezultata smesti u AD_rez_8
    
                       
    USBBuffer[1] = AD_Rez_1.LowByte            'Nizi bajt rezultata smesti
                                            'u USBBuffer[1]
    USBBuffer[2] = AD_Rez_1.HighByte        'Visi bajt rezultata smesti
                                            'u USBBuffer[2]
    USBBuffer[3] = AD_Rez_2.LowByte            'Nizi bajt rezultata smesti
                                             'u USBBuffer[3]  
    USBBuffer[4] = AD_Rez_2.HighByte        'Visi bajt rezultata smesti
                                            'u USBBuffer[4]
    USBBuffer[5] = AD_Rez_3.LowByte            'Nizi bajt rezultata smesti
                                             'u USBBuffer[5]
    USBBuffer[6] = AD_Rez_3.HighByte        'Visi bajt rezultata smesti
                                             'u USBBuffer[6]
    USBBuffer[7] = AD_Rez_4.LowByte            'Nizi bajt rezultata smesti
                                             'u USBBuffer[7]
    USBBuffer[8] = AD_Rez_4.HighByte        'Visi bajt rezultata smesti
                                             'u USBBuffer[8]
    USBBuffer[9] = AD_Rez_5.LowByte            'Nizi bajt rezultata smesti
                                             'u USBBuffer[9]
    USBBuffer[10] = AD_Rez_5.HighByte        'Visi bajt rezultata smesti
                                             'u USBBuffer[10]
    USBBuffer[11] = AD_Rez_6.LowByte        'Nizi bajt rezultata smesti
                                             'u USBBuffer[11]  
    USBBuffer[12] = AD_Rez_6.HighByte        'Visi bajt rezultata smesti
                                             'u USBBuffer[12]
    USBBuffer[13] = AD_Rez_7.LowByte        'Nizi bajt rezultata smesti
                                             'u USBBuffer[13]
    USBBuffer[14] = AD_Rez_7.HighByte        'Visi bajt rezultata smesti
                                             'u USBBuffer[14]
    USBBuffer[15] = AD_Rez_8.LowByte        'Nizi bajt rezultata smesti
                                             'u USBBuffer[15]
    USBBuffer[16] = AD_Rez_8.HighByte        'Visi bajt rezultata smesti
                                             'u USBBuffer[16]
                       
    High PORTE.0
    HSerOut  [Dec USBBuffer[1]]
                       
    timeout2:
    HSerIn 5000,timeout2, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[2]]
    EndIf
    Low PORTE.0
                       
    timeout3:
    HSerIn 5000,timeout3, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[3]]
    EndIf
    High PORTE.0
                       
    timeout4:
    HSerIn 5000,timeout4, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[4]]
    EndIf
    Low PORTE.0
                       
    timeout5:
    HSerIn 5000,timeout5, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[5]]
    EndIf
    High PORTE.0
                       
    timeout6:
    HSerIn 5000,timeout6, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[6]]
    EndIf
    Low PORTE.0
                       
    timeout7:
    HSerIn 5000,timeout7, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[7]]
    EndIf
    High PORTE.0
    
    timeout8:
    HSerIn 5000,timeout8, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[8]]
    EndIf
    Low PORTE.0
                       
    timeout9:
    HSerIn 5000,timeout9, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[9]]
    EndIf
    High PORTE.0
                       
    timeout10:
    HSerIn 5000,timeout10, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[10]]
    EndIf
    Low PORTE.0
                       
    timeout11:
    HSerIn 5000,timeout11, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[11]]
    EndIf
    High PORTE.0
                       
    timeout12:
    HSerIn 5000,timeout12, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[12]]
    EndIf
    Low PORTE.0
                       
    timeout13:
    HSerIn 5000,timeout13, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[13]]
    EndIf
    High PORTE.0
                       
    timeout14:
    HSerIn 5000,timeout14, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[14]]
    EndIf
    Low PORTE.0
                       
    timeout15:
    HSerIn 5000,timeout15, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[15]]
    EndIf
    High PORTE.0
                       
    timeout16:
    HSerIn 5000,timeout16, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[16]]
    EndIf
    Low PORTE.0                      ' Ugasi signalnu lampicu
Return

End      

za pic16

Normalno se kompajlira, a nocas cu da ti kazem kako se ponasa na razvojnom sistemu (sa PIC16F887 na 8MHz)
 
Odgovor na temu

ruzmarin84
obradovic
kraljevo

Član broj: 141743
Poruke: 33
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)10.07.2010. u 20:48 - pre 168 meseci
Code:
 High PORTE.0
    HSerOut  [Dec USBBuffer[1]]
                       
    timeout2:
    HSerIn 5000,timeout2, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[2]]
    EndIf
    Low PORTE.0
                       
    timeout3:
    HSerIn 5000,timeout3, [test]
    If test = 111 Then
        HSerOut  [USBBuffer[3]]
    EndIf
    High PORTE.0


Jel na pocetku, iza prvog hserout treba da ide dec?
Nije mi jasno kad se koristi, a kad ne. Meni terminal uglavnom cita hieroglife kad ne stavim dec.
Ako ti nije tesko pojasni mi u dve recenice... (kad budes imao malo vremena naravno...)
Hvala puno...
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.234.*



+28 Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)10.07.2010. u 21:39 - pre 168 meseci
Ajde 'vako:

Kad turis Dec ispred neke promenljive koju saljes serijskim portom dalje, kompajler to pretvori u niz ASCII cifara koje su nama, ljudima citljive, tako da se Dec 111 u terminalskom prozoru vidi kao 111. Ako ne stavis to Dec, onda ces u terminalu da vidis o (malo slovo O).

Sve od 32 do 126 su printabilni ASCII karakteri.

Kada tvom piconji saljes "komandu" tipa 254, ti u stvari saljes BAJT vrednosti 254 ($FE ili %11111110)

Moras da razgranicis sta su nizovi ASCII znakova a sta su promenljive tipa Byte ili Word ili Dword....

I jes zaheb, ne treba to Dec koje si video. Da sam na tvom mestu, ovu rutinu za slanje vrednosti A/D konverzije bih uradio drugacije (ne bih cekao 'test' da stigne da bi se poslao sledeci bajt)
 
Odgovor na temu

Sepa011

Član broj: 161918
Poruke: 1817
212.178.234.*



+28 Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)10.07.2010. u 22:16 - pre 168 meseci
Ovo ispod radi k'o sat kada se iz terminala posalje ASCII 254, ne sekvenca brojeva 2 5 4 ($32 $35 $34)

Code:
'****************************************************************
'*  Name    : PIC16.BAS                                         *
'*  Author  :                                                   *
'*  Notice  :                                                   *
'*          :                                                   *
'*  Date    :                                                   *
'*  Version :                                                   *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F887
Xtal 8

Declare Adin_Res 10
Declare Adin_Tad 8_FOSC
Declare Hserial_Baud 2400

Dim AD_Rez_1 As Word
Dim AD_Rez_2 As Word
Dim AD_Rez_3 As Word
Dim AD_Rez_4 As Word
Dim AD_Rez_5 As Word
Dim AD_Rez_6 As Word
Dim AD_Rez_7 As Word
Dim AD_Rez_8 As Word

Dim i As Byte

Dim USBBufferSizeMax As 18
Dim USBBufferSizeTx As 18
Dim USBBufferSizeRx As 18

Dim test As Byte
Dim USBBuffer[USBBufferSizeMax] As Byte
Dim USBBufferCount As Byte

ADCON0 = %00111111
TRISA  = %11111111
ADCON1 = %10000010

Low PORTE.0
TRISC.7 = 1
TRISC.6 = 1
RCSTA.7 = 1

Pocetak:
DelayMS 100
HSerOut ["Alive", 13, 10]

While 1 = 1
    GoSub DoSerIn
Wend

DoSerIn:
    USBBufferCount = USBBufferSizeRx
    HSerIn [USBBuffer[0]]
    If USBBuffer[0] = 254 Then
        GoSub DoSerOut
    EndIf
Return
                    
DoSerOut:
    USBBufferCount = USBBufferSizeTx
    USBBuffer[0] = 254
                        
    AD_Rez_3 = ADIn 0
    AD_Rez_4 = ADIn 1
    AD_Rez_1 = ADIn 2
    AD_Rez_2 = ADIn 3
    AD_Rez_5 = ADIn 4
    AD_Rez_6 = ADIn 5
    AD_Rez_7 = ADIn 6
    AD_Rez_8 = ADIn 7
    
    USBBuffer[1] = AD_Rez_1.LowByte
    USBBuffer[2] = AD_Rez_1.HighByte
    USBBuffer[3] = AD_Rez_2.LowByte
    USBBuffer[4] = AD_Rez_2.HighByte
    USBBuffer[5] = AD_Rez_3.LowByte
    USBBuffer[6] = AD_Rez_3.HighByte
    USBBuffer[7] = AD_Rez_4.LowByte
    USBBuffer[8] = AD_Rez_4.HighByte
    USBBuffer[9] = AD_Rez_5.LowByte
    USBBuffer[10] = AD_Rez_5.HighByte
    USBBuffer[11] = AD_Rez_6.LowByte
    USBBuffer[12] = AD_Rez_6.HighByte
    USBBuffer[13] = AD_Rez_7.LowByte
    USBBuffer[14] = AD_Rez_7.HighByte
    USBBuffer[15] = AD_Rez_8.LowByte
    USBBuffer[16] = AD_Rez_8.HighByte
                       
    High PORTE.0
    For i = 1 To USBBufferSizeMax - 2
        HSerOut  [USBBuffer[i]]
    Next i
    Low PORTE.0
                       
Return

End
 
Odgovor na temu

ruzmarin84
obradovic
kraljevo

Član broj: 141743
Poruke: 33
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)11.07.2010. u 09:59 - pre 168 meseci
Sepa011

Hvala ti do neba... Proradilo mi je sve... Pretpostavljao sam da je nesto banalno, ali ne bih ja to pronasao jos 100 godina...
Ipak je iskustvo ono sto se stice :) .....

Jos da vidim kako da mu ubacim RS485 komunikaciju na sve ovo... i problem resen

Hvala svim ucesnicima na veoma korisnim komentarima i savetima...
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Povezivanje dva PICa pomocu serijske komunikacije (PICBASIC)

Strane: 1 2

[ Pregleda: 7641 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.