[ weldinger @ 08.03.2014. 21:35 ] @
Naime imam sledeci problem: Imam na jednoj plocici 16F877A-pic1 i 16F628A-pic2, pa vas pitam da li mogu da komuniciraju preko jednog pina (asihronom komunikacijom serijski 8 bita i jedan stop bit) tako sto ce pic1 da daje komande pic2 u PicBasicu.Ja sam pokusao ovako:
PIC1:
DEO KODA:

TRISC=%00000010
PORTC=%00000000
DEFINE DEBUG_REG PORTC
DEFINE DEBUG_BIT 0
DEFINE DEBUG_BAUD 2400
DEFINE DEBUG_MODE 0
DEFINE OSC 4
DEFINE DEBUG_PACING 10
BROJ VAR BYTE
POCETAK:
WHILE PORTC.1=0
DEBUG BROJ
WEND
GOTO POCETAK
END


PIC2:
TRISA=%00000000
TRISB=%00000010
DEFINE OSC 4
DEFINE DEBUG_REG PORTB
DEFINE DEBUG_BIT 1
DEFINE DEBUG_BAUD 2400
DEFINE DEBUG_MODE 0
DEFINE DEBUG_PACING 10
BR VAR BYTE
POC:
DEBUGIN [BR]
WRITE 00,BR
GOTO POC
END

Ovo je samo deo koda ali dovoljno da mi kazete posto nisam jos imao potrebe da radim komunikaciju izmedju PIC-ova a situacija je takva da ne mogu da koristim vise pinova za njihovu komunikaciju nego samo jedan ( Napomena: PIC2 samo prima informacije ne vraca nazad).Da li moze ovakav nacin kao sto sam opisao?

[Ovu poruku je menjao weldinger dana 09.03.2014. u 11:21 GMT+1]
[ mikikg @ 09.03.2014. 02:50 ] @
U sustini moze, koristis USART modul gde je jedan PIC TX a drugi RX.

Kako to napisati u PicBasic to vec ne znam, slabo stojim za njim …

Isto je pitanje da li ce ti bez obzira ona "suprotna" nozica (RX nozica na prvom i TX nozica na drugom PIC) od USART biti raspoloziva za neke druge potrebe, predpostavljam da nece … ako je to bilo u kontekstu "nedostatka" slobodnih nozica.
[ goran_68 @ 09.03.2014. 07:55 ] @
Genaralno može to kako si opisao. Problem ćeš verovatno imati ukoliko bi da koristiš hardverski USART port na oba PIC-a a kratak si sa brojem pinova. Kada omogućiš serijski hardverski port (SPEN bit se postavi na 1) onda oba pina RX i TX budu "zauzeta" za tu funkciju što znači da ne možeš da koristiš u druge svrhe onaj drugi koji ti ne treba za serijsku komunikaciju. E sad iskreno ja nisam imao ovakvu situaciju ali sudeći po datasheetu to bi bilo to. Drugo rešenje je da koristiš softverski UART na PIC-u. Primera za PicBasic sigurno ima tako da možeš da razmotriš i tu opciju. Treća varijanta je "uzmi veći PIC" :)
[ bogdan.kecman @ 09.03.2014. 08:21 ] @
ako ti treba samo jednosmerno i frka je sa brojem pinova softwerski uart ce ti odraditi posao (neka niza brzina), ako ti treba dvosmerno moras da uzmes neki 1wire protokol

trebalo bi da imas i sw uart i 1wire implementaciju u picbasic-u

[ weldinger @ 09.03.2014. 10:18 ] @
Citat:
goran_68:
Problem ćeš verovatno imati ukoliko bi da koristiš hardverski USART port na oba PIC-a a kratak si sa brojem pinova. Treća varijanta je "uzmi veći PIC" :)


Ne mogu da koristim hardverski USART jer je zauzet.Situacija je takva da mogu da koristim PORTC.0 pa me zanima kako moze da se napise kod za programski USART.Ja sam pokusao, u predhodnom postu, ali ne ide.
[ ZAS011 @ 09.03.2014. 17:25 ] @
Za serijsku komunikaciju imaš u PBP-u SEROUT i SERIN naredbe.
Sve je lepo opisano u Help-u
[ weldinger @ 09.03.2014. 21:49 ] @
Citat:
ZAS011: Za serijsku komunikaciju imaš u PBP-u SEROUT i SERIN naredbe.
Sve je lepo opisano u Help-u

Probao sam i sa SERIN SEROUT naredbama ovako:

TRISC=%00000010
PORTC=%00000000
INCLUDE "Modedefs.bas"
DEFINE OSC 8
DEFINE DEBUG_PACING 100
BROJ VAR BYTE
BROJ=9
POCETAK:
WHILE PORTC.1=0
SEROUT PORTC.0,T2400,[BROJ]
WEND
GOTO POCETAK
END


PIC2:
PCON=%00001011
TRISA=%00000000
TRISB=%00000010
DEFINE OSC 4
INCLUDE "Modedefs.bas"
BR VAR BYTE
POC:
SERIN PORTB.1,T2400,[BR]
WRITE 00,BR
GOTO POC
END

Ne znam da li sam dobro napisao naredbu Serin i Serout, da li je neko radio sa ovim naredbama.Treba samo da mi decimalnu vrednost BROJ-a iz PIC1 ucita PIC2 u BR i to smeti u memorijsku lokaciju 0.
[ goran_68 @ 10.03.2014. 07:24 ] @
Code:

TRISC=%00000010
PORTC=%00000000
INCLUDE "Modedefs.bas"
DEFINE OSC 8
DEFINE DEBUG_PACING 100
BROJ VAR BYTE
BROJ=9
POCETAK:
WHILE PORTC.1=0
SEROUT PORTC.0,T2400,[BROJ]



!!dodaj ovde neku pauzu!!




WEND
GOTO POCETAK
END



Dodatno,
najverovatnije ti je ovaj PIC2 PIC16F628A. Pinove porta A si definisao kao izlazne a nigde nisi isključio komparatore. Pogledaj registar CMCON.
[ weldinger @ 10.03.2014. 19:47 ] @
Da zaboravio sam CMCON=%00000111 ali opet ista stvar.Moracu da pogledam nekim logic analiser-om jer ovako na "slepo" nema pojma.Nego sam samo hteo da znam da li je code gore napisan ispravno, da anuliram tu stranu.
[ weldinger @ 14.03.2014. 16:22 ] @
Sada sam postavio da mi PIC2 bude tx a PIC1 rx zato sto imam LCD out na PIC-u 1 pa mogu sve vreme da vidim sta se prima na portu C.0 ali sam ustanovio osciloskopom da PIC 2 (16F628A) uopste ne salje signal.Evo njegovog koda:

INCLUDE "Modedefs.bas"
DEFINE OSC 4
PCON=%00001011
CMCON=%00000111
TRISB=%00000000
TRISA=%00100000
PORTA=0
PORTB=0
BR VAR BYTE
BR=15
pocetak:
SEROUT PORTB.1,T2400,[BR]
PAUSE 5000
GOTO pocetak
END
[ goran_68 @ 14.03.2014. 19:03 ] @
Kako si postavio konfiguracione bitove kod PIC16F628A? Da li koristiš interni oscilator ili spoljašnji?
[ weldinger @ 14.03.2014. 21:22 ] @
interni osc na 4Mhz
[ bogdan.kecman @ 14.03.2014. 21:29 ] @
interni oscilator ? 877A koliko se secam nema interni oscilator (887
ima), a 628A ima neki kvazi "precision +-1%" koji ni u ludilu nije
dovoljno precizan za malo brzu uart komunikaciju, posebno ne za soft
uart tako da ako ces da teras soft uart na njemu ili mu lepo turi 20MHz
kristal ili teraj uart na 300 boda ..

mozes da koristis isti oscilator za oba, to moze da ti spasi po pin
[ weldinger @ 14.03.2014. 21:33 ] @
16F877A ima spoljni na 8 MHz, a 16F628A sam konfigurisao na njegov interni.Ali problem je sto na Izlaznom pinu PORTB.1 nema nikakvog signala osim konstantnih 5v.
[ bogdan.kecman @ 14.03.2014. 21:47 ] @
ja ne koristim basic ali kapiram da "SEROUT PORTB.1,T2400,[BR]" znaci da posalje na b.1 vrednost BR brzino T2400. Moguce da je taj basic dovoljno pametan da zna da nema teorije da posalje tom brzinom na 4mhz taktu... drugo ne znam sta u basic-u znaci [br] ?

u svakom slucaju za test da bi znao sta te zeza uzmes lepo i promenis program u nesto ovako:

Code:

INCLUDE "Modedefs.bas"
DEFINE OSC 4
PCON=%00001011
CMCON=%00000111
TRISB=%00000000
TRISA=%00100000
PORTA=0
PORTB=0

pocetak:
  SEROUT PORTB.1,T300,85
  PAUSE 50
  SEROUT PORTB.1,N300,170
  PAUSE 50
GOTO pocetak
END 

[ goran_68 @ 15.03.2014. 06:55 ] @
Moguće je da ti taj PIC uopšte ne radi. Pokušaj da napišeš program kojim ćeš stanje jednog pina (bilo kog) menjati periodično. Dakle, u petlji ga podigneš na 1 pa nakon neke pauze spustiš na nulu, sledi pauza, pa nazad na vrh petlje. Samo to i ništa više. Podešavanja konfiguracionih bitova zadrži. Zašto te bitove ne podešavaš u kodu?
[ weldinger @ 15.03.2014. 22:02 ] @
Citat:
goran_68: Zašto te bitove ne podešavaš u kodu?
Kako ide code za podesavanje?Resio sam problem, bio je problem do porta b.1 kod 16f628a.Jednostavno ne mogu da ga konfigurisem kao izlazni digital I/O.Nije dovoljno samo registar TRISB nego mora i jos neki.Ako pokusam da konfigurisem OPTION registar ( OPTION=%00000000) gde se ukljucuju interni pull-up otpornici PBP javlja gresku a sa POKE instrukcijom nisam radio.Tako sam probao sa PORTA.0 i sve radi ok, doduse sa 300 bauda ali meni i ne treba vise.Ako neko zna kako se konfigurisu PORTB kao izlazni digital I/O neka napise kod.Hvala svima puno.
[ goran_68 @ 16.03.2014. 07:16 ] @
Pogledaj temu http://www.elitesecurity.org/t453500-TUTORIJAL-PicBasic-Pro-PICF
[ ZAS011 @ 16.03.2014. 07:27 ] @
Prva i osnovna stvar kod korišćenja mikrokontrolera je posnavanje funkcionisanja istog, a upoznavanje se vrši čitanjem, čitanjem i samo čitanjem datasheet-a za dotični. U datasheet-u je sve lepo napisano. Jeste da ima 150+ strana, ali lako se pronalazi odgovarajuća stranica sa potrebnim objašnjenjima.
Koliko god se dugo bavim PIConjama, kada treba da izkonfigurišem kontroler, uvek mi je otvoren datasheet. Ne vredi pamtiti sve pojedinosti o svakom kontroleru.
[ weldinger @ 16.03.2014. 14:22 ] @
Citat:
ZAS011: Prva i osnovna stvar kod korišćenja mikrokontrolera je posnavanje funkcionisanja istog, a upoznavanje se vrši čitanjem, čitanjem i samo čitanjem datasheet-a za dotični. U datasheet-u je sve lepo napisano.

Pa gospodine nisam toliko malouman da ne znam gde mogu da nadjem karakteristike kontrolera kojeg koristim, vec me zanima zasto mi basic javlja gresku pri konfigurisanju registra OPTION jer se sa njim ukljucuju pull-up otpornici kao i registar TRISB kojim se definise I/O porta B.Samo sam pitao da li je neko raspolozen , ko koristi 16F628A ili ga je koristio, da napise deo koda za konfiguraciju portab da bude digital output sa ukljucenim pull-up om, jer meni ne uspeva, a posto vidim da se ljutite necu vise ni pitati.Hvala svima.
[ foxhunter1 @ 16.03.2014. 15:58 ] @
Citat:
weldinger:
Citat:
goran_68: Zašto te bitove ne podešavaš u kodu?
Kako ide code za podesavanje?Resio sam problem, bio je problem do porta b.1 kod 16f628a.Jednostavno ne mogu da ga konfigurisem kao izlazni digital I/O.Nije dovoljno samo registar TRISB nego mora i jos neki.Ako pokusam da konfigurisem OPTION registar ( OPTION=%00000000) gde se ukljucuju interni pull-up otpornici PBP javlja gresku a sa POKE instrukcijom nisam radio.Tako sam probao sa PORTA.0 i sve radi ok, doduse sa 300 bauda ali meni i ne treba vise.Ako neko zna kako se konfigurisu PORTB kao izlazni digital I/O neka napise kod.Hvala svima puno.


Kad primetis da ti PBP prijavljuje greske tamo gde si siguran da ne bi trebalo (ako covek moze da bude siguran 100% ), onda nadjes u folderu kompajlera INC folder za tvoj kontroler i pogledas da slucajno iz nekog razloga nije promenjeno ime registra koji tebe zanima.
Konkretno, u tvojem slucaju, OPTION registar PBP je prekrstio u OPTION_REG. 'naci, umesto OPTION=%00000000 stavljas OPTION_REG= %00000000.
[ weldinger @ 16.03.2014. 19:53 ] @
foxhunter: OPTION registar PBP je prekrstio u OPTION_REG. 'naci, umesto OPTION=%00000000 stavljas OPTION_REG= %00000000

To sam primetio za PIC 16F 877A, njegov option reg se zove OPTION_REG, nisam se setio da su mozda pogresili u datasheet-u za 16f628a.Hvala puno.
[ goran_68 @ 17.03.2014. 07:27 ] @
Ne, nije greška u datasheet-u već ga kod jednog mikrokontrolera zovu ovako a kod drugog onako. To je problem kod Microchip-a u nedoslednosti pa bezveze izgubiš vreme dok nađeš šta te zeza.
[ bogdan.kecman @ 17.03.2014. 10:32 ] @
pre ce biti nedoslednods u pbp include-u a ne u microchip-u
[ foxhunter1 @ 17.03.2014. 12:30 ] @
Ma postoji include u PBPu, ali su, kao sto vec rekoh, iz nekog razloga OPTION prekrstili u OPTION_REG. Kada prozoves OPTION registar PBP kaze da takav ne postoji.
Ako prozoves OPTION_REG onda nema problema. Negde su pisci kompajlera i objasnili zasto su to preimenovali, ali nesto ne mogu da se setim sta bese razlog.
Godine su odavno presle broj cipela , pa nije ni cudo sto se zaboravilo.
[ goran_68 @ 17.03.2014. 14:28 ] @
Ma kapiram gde je problem kod PBP (uzgred i ne koristim ga pa me baš briga) ali nikako ne mogu da razumem da jedan te isti registar u datasheet-u za PIC16F628A sve vreme zovu OPTION a onda na stranici 23 kaže OPTION_REG. Nalazio sam i da u okviru familije bitove sa istim funkcijom nazovu drugačije. Nije da ćeš da izgubiš silno vreme dok vidiš u čemu je problem ali je glupo.