 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
m.matic Član

Pridružen-a: Sre 22 Sep 2004 22:43 Prispevkov: 189 Aktiv.: 0.80
|
Objavljeno: Sob Nov 11, 2006 1:04 pm Naslov sporočila: PIC in MAX232 |
|
|
Zanima me kako naj vzpostavim to komunikacijo?
Sprogramiral sem v PIC-Basicu in sicer:
SPBRG = 129 'registri USART-a, brzina 9600 bps
TXSTA = $24
RCSTA = $90
.
.
.
'hserout["Temp = ",sign,dec2 TempC,".",dec4 float,"C"]
'hserout["Raw", ibin16 R_Temp]
serout2 PORTC.6,16468,["Temp = ",sign,dec2 TempC,".",dec4 float,"C "]
serout2 PORTC.6,16468,["Raw", ibin16 R_Temp]
definicija hserout:
HSEROUT [Item{,Item...}]
Send one or more Items to the hardware serial port on devices that
support asynchronous serial communications in hardware.
HSEROUT is one of several built-in asynchronous serial functions. It can
only be used with devices that have a hardware USART. See the device
data sheet for information on the serial output pin and other parameters.
Uporablja se za USART...
definicija serout2:
SEROUT2 DataPin{\FlowPin},Mode,{Pace,}
{Timeout,Label,}[Item...]
Send one or more Items to DataPin in standard asynchronous format.
SEROUT2 is similar to the BS2 Serout command. DataPin is
automatically made an output. The optional FlowPin is automatically
made an input. DataPin and FlowPin may be a constant, 0 - 15, or a
variable that contains a number 0 - 15 (e.g. B0) or a pin name (e.g.
PORTA.0).
Problem pa se pojavi pri hardverski povezavi med PIC16f876 in PC:
Zvezal sem po tej shemi:
http://www.electronic-engineering.ch/microchip/projects/rs232/rs_test/RS232-Interface.pdf
Problem je pomoje v tem, da sem jaz vezal vse na ženski DB9 konektor in tega direktno na COM port.
Testiral sem z Hyper Terminal in ni bilo učinka kljub pravilnim nastavitvam...
Kakšna ideja? |
|
Nazaj na vrh |
|
 |
m.matic Član

Pridružen-a: Sre 22 Sep 2004 22:43 Prispevkov: 189 Aktiv.: 0.80
|
Objavljeno: Sob Nov 11, 2006 1:29 pm Naslov sporočila: |
|
|
No rešil sem problem, ker sem pozabil zvezati 5V DSR in 5V DTR na 5V
Temp = +19.9375CRaw%0000000100111111
Temp = +19.9375CRaw%0000000100111111
Temp = +20.7500CRaw%0000000101001100
Temp = +23.0625CRaw%0000000101110001
Temp = +22.4375CRaw%0000000101100111
Temp = +24.0625CRaw%0000000110000001
Temp = +23.0625CRaw%0000000101110001
Temp = +22.5625CRaw%0000000101101001 |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Pon Nov 13, 2006 9:35 am Naslov sporočila: |
|
|
dojaja je napisal/a: |
No rešil sem problem, ker sem pozabil zvezati 5V DSR in 5V DTR na 5V  |
Delovalo bi, če bi ju na konektorju zvezal skupaj. Predvsem pa ne vem zakaj si izhod priklopil na 5V.
Data Set Ready in Data Terminal Ready sta en izhodni in en vhodni signal, ki se ju zveže skupaj če želiš imeti kontrolo kdaj imaš priklopljen konektor v PC. Drugače se pa uporabljata za kontrolo komunikacije. Torej DTR lahko odklopiš.  |
|
Nazaj na vrh |
|
 |
tonic Član


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Sre Nov 22, 2006 11:45 pm Naslov sporočila: |
|
|
Bom kar tule vprašal, ker se nanaša na "enako" vezavo:
na izhodu MAX232 dobim ravno "inverzne" signale kot pa na koncu 16F84;
ko berem signal iz 16F84 dobim vse OK, ko pa berem preko MAX232 pa ravno inverzno oz. kvake
primerjava signalov:
spy podatkov na COMu:
Sedaj pa je nastal majhen problem; imam že napisan kos lastnega SWja, katerega sem seveda razvijal brez MAX232; seveda mi SW sedaj bere "kvake"...
Programiram v PicBasicu, in prav tako uporabim funkcijo serout2
Kje se mi sedaj splača predelat program:
- za mikrokontroler? (uporabit hserout, hserout2)
- ali program za branje iz COM porta? (kakšen je "algoritem" pretvorbe "inverznih" baytov oz. ali se samo drugače skonfigurura port ob inicializaciji (npr. hitrost itak ostane enaka, še kaj drugega... like delaj inverzno...))
aja, UART izhod iz PICa je na RA2 (1 pin )
Hvala za kak namig in lep pozdrav,
Toni |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 23, 2006 12:41 am Naslov sporočila: |
|
|
C, c, c, osnove. Vse ti deluje povsem pravilno, le navodil ne znas brati  _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
tonic Član


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Čet Nov 23, 2006 10:05 am Naslov sporočila: |
|
|
Dobro, torej dela OK
Kako pa to programsko rešit:
- ob receive podatkov iz COM porta, pretvorit znak za znakom oz. cel buffer?
- ali priklopit en inverter med izhodom PICa in vhodom MAXa?
lp,
Toni |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 23, 2006 11:48 am Naslov sporočila: |
|
|
Vidim, da si ignoriral link v prejsnjem sporocilu ... Kaj bi sploh rad spremenil ?
Ce si program za MCU napisal tako, da poslje recimo vrednost 0x30 (ASCII "0"), potem bo MAX to spremenil v ustrezne (active-low) nivoje za RS232 (gledano na osciloskopu v active-high logiki to sicer izgleda kot 0xCF), UART v PCu pa spet nazaj v active-high vrednost 0x30, tako kot je bila na zacetku. Podatek pride na drugo stran tak, kot ga odposlje naprava, ki se nahaja pred MAX232.
Ce na vsak nacin zelis invertirati verdnost pred oddajo, potem to pac naredi; v C-ju je to recimo takole:
vrednost ^= 0xff;
Kako uporabis logicne operatorje v tvojem Basicu, pa bos prebral v navodilih. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Čet Nov 23, 2006 12:21 pm Naslov sporočila: |
|
|
Zadeva pri RS232 je taka, da driverji in transceiverji na obeh straneh povezave vedno obrnejo logični nivo. Če med seboj povežeš dva mikrokontrolerja preko RS232, se bo bit na kontrolerju postavljen na 1 v prvem maxu spremenil na 0. Po žici bo šel do drugega maxa, kjer se bo spet invertiral in prišel na drugi mikrokontroler povsem pravilno kot logična 1. Tudi COM port na PCju deluje tako. Primer: če iz mikrokontrolerja preko max232 pošlješ črko "A" na PC, bo PC izpisal "A". Ne glede na to, da je na izhodu tvojega maxa nivo obrnjen.
Pravzaprav ne smeš primerjati logičnih nivojev na strani procesorja in na strani RS232 povezave. RS232 deluje na nivojih od +/- 3V do +/-12 V. To pomeni, da na maxovem izhodu nimaš logične ničle ali enke, ampak z mikroprocesorjem povsem nekompatibilen signal. Praviloma ne sme biti 0 voltov, ampak mora biti večji kot 3 volte ali manjši od - 3 volte. Če je dejansko 0 voltov, je nekaj narobe. Verjetno narobe zvezan max232.
Povzetek:
max 323 in podobni chipi pri oddaji bite obrnejo, ravno tako pri sprejemu. Preko povezave pridejo biti tako kot morajo.
Napetosti na izhodu maxa niso mikrokontrolersko kompatibilne. Priključijo se lahko le na vhod drugega maxa.
Jur |
|
Nazaj na vrh |
|
 |
tonic Član


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Čet Nov 23, 2006 6:31 pm Naslov sporočila: |
|
|
Problem je ravno v tem, kot je prikazano na drugem prilepljenem printscreenu, da če imam RX com porta priklopljen direkt na PIC dobivam signale OK (HyperTerminal, COM Port Toolkit, moj program...) oz. dobivam tisto kar pričakujem.
Ko pa vmes priključim MAXa, pa dobim obrnjeno logiko, in s tem posledično neprave podatke oz. kvake.
če še enkrat prilimam ta printscreen:
Tu sem ves čas bral podatke na COMu in RX preklopil iz MAXa na PIC. In se lepo vidi da COM port dobi active-high logiko, in je UART PCja nič ne "pretvarja".
Tista 23.5 je pravi podatek, se pravi RX je bil priklopljne direkt na PIC, kvake pa so preko MAXa or. ravno to 0x30, v inverznem pa je 0xCF.
In UART na PCju ne obrne iz active-high logike nazaj na active-low; ampak sprejema active-high in s tem kvake.
In se s tem ne strinjam:
Citiram: |
Ce si program za MCU napisal tako, da poslje recimo vrednost 0x30 (ASCII "0"), potem bo MAX to spremenil v ustrezne (active-low) nivoje za RS232 (gledano na osciloskopu v active-high logiki to sicer izgleda kot 0xCF), UART v PCu pa spet nazaj v active-high vrednost 0x30, tako kot je bila na zacetku. Podatek pride na drugo stran tak, kot ga odposlje naprava, ki se nahaja pred MAX232. |
Mogoče za to stvar poskrbi gonilnik?
Ker do COM porta dostopam z DLL hookom na COM. Tako da bom verjetno za to stvar moral poskrbet sam.
Ali je MAX bolj mišljen da imaš v nekem vezju par, oz. enega zraven neke naprave na "terenu", nato pa konekcija, povezava do drugega MAXa zraven osebnega računalnika?
Oz. kaj je sploh prednost vezja z MAX232om? Manjša občutljivost na motnje?
Malo sem še izgubljen... pa saj bo...
lp,
Toni |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 23, 2006 6:52 pm Naslov sporočila: |
|
|
Ce je na skici misljeno, da so vrednosti, oznacene z rdecim pravokotnikom, napacne, in tiste, oznacene z zelenim, pravilne, potem nima to prav nobene zveze s tem kako MAX232 "obrne" nivoje, saj vrednosti evidentno niso komplementarne, ampak povsem razlicne.
Racunalnika na na PIC ne smes prikljuciti neposredno (v idealnem primeru ne bo nic narobe, v manj idealnem pa bos skuril mikrokontroler, saj so napetosti na konektorju PCja dalec izven specifikacije za mikrokontroler, kakrsni so tudi PICi).
UART v PCju spremeni active-low (RS232) v active-high (TTL) nivoje, ki jih racunalnik naprej interpretira enako, kot PIC. Se enkrat: Ce posljes recimo 0x30 s PICom, bo MAX232 to spremenil v 0xCF (gledano se vedno active-high), njegov ekvivalent v UARTu PCja pa spet v 0x30. Gonilnik nima pri vsem tem nic, ampak poskrbi za to, da je port ustrezno nastavljen (pravi format podatka).
Prednost povezave z MAX232 je, da je sploh izvedljiva; TTL in CMOS logike ne mores kar neposredno povezovati na RS232 napetostne nivoje.
Po opisu tezav sklepam, da je ob napacnem sprejemanju ali port nastavljen narobe (napacna hitrost), ali - kar je se bolj verjetno - da je vezje narejeno narobe in charge pump v MAXu morda ne zagotovi ustreznih nivojev dovolj hitro. Sodec po oscilogramu (pripetem v tvojem prvem sporocilu - saj gre za sliko dejanskega stanja pri tebi in ne le shemo nekje z interneta ?) sicer hardver deluje v redu, a je vprasanje kaj se zgodi po nekaj metrih kabla in priklopu na PC (koliko napetost pade, ker vhod morda nima tako visoke impedance, kot vhod osciloskopa/analizatorja).
Zakaj bi brez MAX232 delovalo pravilno, mi res ni jasno - ce ima racunalnik standarni serijski port, potem ne bi smelo delovati, moral pa bi imeti unicen mikrokontroler. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
tonic Član


Pridružen-a: Pet 16 Dec 2005 17:48 Prispevkov: 183 Aktiv.: 0.77 Kraj: Loče
|
Objavljeno: Čet Nov 23, 2006 7:26 pm Naslov sporočila: |
|
|
Aha, sedaj se mi je pa posvetilo
Hvala Sokrat za obrazložitev. Res sem s printscreeni malo "zamuštral" oz. z barvami.
Zakaj sem RX COMa direkt priklapljal na PIC, videl na internetu. Zato sem razvijal program za PIC v tej smeri. Sedaj sem pa naknadno vključil še MAX232, pa naenkrat ni "nič delalo"
Potem še res sreča, da niem pica skuril... ali pa COMa...
Hvala in lp,
Toni |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 23, 2006 8:13 pm Naslov sporočila: |
|
|
Porta s tem ne mores skuriti, ker je - kot pise v opisu RS232 "standarda", omenjenega zgoraj, katerega nisi prebral - napetost na njem pricakovano od -13V do +13V. PIC od sebe ni sposoben dati take napetosti in posledicno ne mores skuriti porta.
PIC pa seveda lahko skuris - v navodilih (datasheet) za doticni mikrokontroler pise, kaksna je maksimalna napetost na vsakem pinu in na vseh digitalnih vhodih (razen Vpp) je to najbrz kaksnih -0.5V do +6.5V, kar je dalec rpemalo za celoten razpon RS232 signala. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Nov 24, 2006 9:47 am Naslov sporočila: |
|
|
Ja, načeloma lahko izhod mikrokontrolerja priključiš neposredno na vhod COM porta na računalniku. Stvar ni povsem pravilna, ker mikrokontroler generira signale od 0 do 5 voltov, COM port pa zahteva negativno napetost. Vendar kljub temu povezava lahko deluje (ne vedno). Seveda je v tem primeru potrebno izhodne nivo na mikrokontrolerju obrniti. Izhod COM porta (PC) ne more biti priključen direktno na mikrokontroler, ne glede na to, če bi bite invertiral. +/- 12V iz PCja bi lahko poškodovala chip.
Druge lastnosti COM portov na PCju: Hitrost (toleranca je +/- 3.125 %), parity, stop biti in flow control. Vse to mora biti nastavljeno prav. Ali pa se pojavijo kvake.
Jur |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|