Fórum témák
» Több friss téma |
Ne haragudj, hogy belekotyogok,...
ettől végülis mit vársz?... Amit én küldtem dolgok egy kicsit kiérleltebbek, és müködnek is... Még egy megjegyzés: külső quartz oszcillátor nélkül nem biztos, hogy sikerül... Hasonlítsd össze (ASM) azzal amit én küldtem, az müködik... A progi szerint a PIC ad, 100ms-onként 4db számot 2-t, 15-t, 111-t, 202-t, 9600 bit/s sebességgel, 4MHz külső oszcillátorral... Ez nálam szépen meg is jelenik az RScheck progival, ha a vételre 4 adatot állítok be... Idézet: „ettől végülis mit vársz?... Amit én küldtem dolgok egy kicsit kiérleltebbek, és müködnek is...” Jobb ha saját maga hozza össze, akkor többet tanul. Nincs mindenhez előre elkészített példaprogram.
A példaprogi-val igazad lehet, viszont az rs kommunikációhoz ajánlottam neki egy biztos, kimondottan ilyen dolgokhoz való RScheck.exe progit még az elején, ezzel eldöntheti, hogy a progija, vagy a hardware-e rossz illetve jó-e, a belső oszcillátorral nekem nem ment a kommunikáció, feltételezem nem olyan pontos, és nem helyes a sebesség...
dcsabi és mindenki más, aki segített:
1. Nagyon szépen köszönök minden segítséget! 2. Sajnos nagyon nem megy nekem ez az RS232. Az a gond, hogy nincs mivel leteszteljem, hogy pontosan mi is a baj. Nem tudom, hogy a proramom-e a rossz, a MAX232-est kötöttem be rosszul, hogy nem is a COM1-en van az a vezeték, amin próbálok kommunikálni. Teljesen tanácstalan vagyok. Megpróbáltam, hogy a 25-öt 51-re átírtam, hát nem segített... Próbáltam nézni HyperTerminalban, és a dcsabi által adott RSCheck programban is. Sehol nem láttam semmit. már próbáltam azt is, hogy egy az egyben megcsináltam ezt, de sajnos ez se működött. Valahogy úgy látom, hogy eddig semmi nem akart működni, pedig olyan egyszerűnek tűnik az alapján, hogy ti milyen könnyedén viszonyultok hozzá.
ha már eljutottál oda, hogy megcsináltál egy másik procival való kapcsolást, akkor nem messze van, azt is kipróbálhatod amit az elején ajánlottam, az biztos müködik... Tudod az is lehet, hogy a sok ki-be forrasztás meg próbálgatás közben, valami elszállt... valamelyik nap lefényképezem a képernyőn a beállításokat a progimhoz élethűen mikor müködik és a progit is elküldöm meg a rajzot is, ha ez sem megy akkor valami "parajelenség" van vagy valamelyi alkatrész elszállt... Külsőoszcillátort használj...
Soha nem használtam RS232 miatt kvarcoszcit és soha nem volt ebből gondom. Sőt, a bootloaderemben is visszakapcsolok internal 8MHz-re, hogy a kód ne függjön attól, hogy milyen kvarcot akaszt rá a felhasználó.
Nemrég olyan durva eltérést csináltam a bitrate-ben, hogy még én is elhűltem, hogy hiba nélkül működik, valami 4 vagy 8MHz-ről 115200-ra dolgoztam. Elméletileg kiszámolva is több % eltérés volt a névleges bitrate-től, de sem a PC, sem a PIC nem problémázott rajta, hibátlanul ment. Ja és hypertermből is. bár az a progi egy bughalmaz, főleg a flowcontrol kezelése van rettenetesen elcseszve, sokszor bele is fagy. Amit én jónak találtam windowsos terminálprogit, az a Teraterm Pro, az itthoni gépemen most ezt használom.
Hát az első teszt az kell legyen, hogy a PC-ből jövő soros kábel 2-es és 3-as lábát összekötve megvan-e a loop, visszajön-e a hyperterm-be az, amit bebillentyűzöl (local echo kikapcsolva).
Ha ez megvan, akkor jöhet az, hogy a MAX232 PIC felőli végén kell ugyanezt az összekötést megcsinálni, azaz a TTL szinten "visszafordítani" a jelet és ellenőrizni, hogy működik-e. Ha minden jó, akkor a PIC-re kötött MAX232-vel is mennie kell, legalábbis kipróbált programokkal biztosan.
Na hát köszönöm! Ezzel igen sokat segítettél. Kiderült, hogy a soros kábelemen nem volt meg az egyik vezeték. Holnap csinálok egyet. Remélem, hogy ez volt a baj!
Én amit mondtam az tapasztalatból mondtam, két pic kommunikált egymással, sőt három, a nagy 877a-s olvasott egy I2C-s Pcf8583-at + 4x20 lcd-t ir + saját egyéb program,...közben kommunikált két 16f628a-val, 4x7szegm kijelző Mpx-ben... két-két cim azonosította őket, nem akart menni... Az egyik ágba beléptem Pc- vel azon sem jött semmi, néha néha adni tudtam. Átraktam külső oszcira, egyből ment minden...Elég "terheltek" voltak a PIC-ek szerintem nem volt pontos a belső oszci...
Ha már megoldottad, akkor bocs.
MOVLW 25 ; 25=2400 bps MOVWF SPBRG Itt nem jelezted, hogy a 25 milyen számrendszerben van, ezért az alapértelmezett hexadecimálisban kezelte. Tehát nem 25-öt, hanem 37-et írtál a regiszterbe, ezért a remélt 2400 Baud lelyett kb 1600-zal küldted az adatokat, ami nem szabványos, ezért a PC nem értette András
Március óta már biztosan megoldódott a probléma, de az újszülöttek kedvéért leírom, hogy a PicKit2 is használható erre a célra: közvetlenül fogadja a PIC USART jelét (Tools menüben USART eszközt választva). A PIC16F690-nél maradva: a PicKit2 4-es és 5-ös bemenetére kell kötni a mikrovezérlő RB5 és RB7 lábait.
Arra is felhívja a PicKit2 gépkönyve a figyelmünket, hogy a VCC és a GND is legyen bekötve. A "nincs C fordítóm" típusú megjegyzésre csak annyit, hogy számos és számtalan C fordító elérhető ingyen is (mint pl. a HI-TECH C PRO) a PIC10/12/16 MCU családra.
Sziasztok.
Én is most ismerkedek a soros kommunikációval PIc esetében. Az F628 -as leírása elég tömény így elsőre. Én a legjobban példaprogramokból tudok tanulni. Esetleg valaki tudna küldeni eggyet. Mondjuk egy olyan feladatra hogy a PC ről küldök egy számot mondjuk 1 , és a PIC kigyujt egy ledet az egyik kimenetén. Jó lenne ha magyarul lenne kommentezve. ELőre is köszi
Látogass el ezen a fórumon belül erre a topicra találsz benne magadnak valót, és eredményt is el lehet vele érni szinte azonnal...
PIC_TUTI
Sziasztok. Az alábbi kód egy karaktert fogad(na) soros portról és kirakná a PORTC-re. De nem teszi. Mi benne a hiba?
Már hetek óta szenvedek egy soros kommunikációval, eleddig sikertelenül. Légyszíves leírásokat ne adjatok, mert már MINDENT átnéztem. (Kezdve az adatlaptól egészen az összes fellelt tutoriálig. A google első 3 oldalát a PIC16F690 ASM USART szavakra mind átnéztem. És még sok kombinációval próbálkoztam.) A legjobb az lenne, ha valaki adna egy működő kódot. A moderátorokat pedig szépen kérem, hogy ne rakják ezt át a PIC - miértek, hogyanok-ba, mert ott már kérdeztem, és nem kaptam választ. Talán így, külön topikban nagyobb szerencsém lesz. Érdeklődtem már kismillió helyen, (Microchip, prog.hu, tutorialok tucatjai, stb...) de semmi. Próbáltam C-ről lefordított lefordított hexeket is visszafejteni, de amiket azokból kihámoztam, az alapján az én kódom jó...
Az OERR bit csak olvasható. (Akár csak a FERR) Az adatlap szerint a CREN bit törlésével lehet törölni.
Próbáld így a vételt:
Hy! Ezzel se jó.
Én az Oshonsoft féle szimulátorral is próbálom tesztelni. A beállításai jók, de se a TX, se az RX lábat nem rakja magasba. Ha jól tudom, a TX láb magas, és ha a példakódot lefuttatom, magasra is kerül. Az a baj, hogy a példakód Basicben van. Az assembly-jén átrágtam magam, de az egy másik PIC-re készült. Lehet, hogy az a gond. (Én PIC16F690-re fejlesztek.) De az adatlapon is így írja... Tanácstalan vagyok teljesen.
Szia!
Szerintem az is probléma lehet, hogy bekapcsolásnál az ANSEL és ANSELH regiszterek bitjei 1- ek, tehát analógként működnek. Inicializálásnál állítsd 0- ra a megfelelő biteket, hogy digitális I/O- ként működhessenek. Ha nem is használ, ártani nem árt. Üdv.
Végül is sikerült megcsinálnom jóra. Az ANSEL-t is nulláztam, de nem az oldotta meg a problémát. (Az adatlap szerint úgyis leválasztódik a TX, ha az USART modult bekapcsolja az ember.)
Rengeteget szenvedtem vele, amit senkinek sem kívánok, úgyhogy csatolom is a forráskódot. Keresőszavak, amiket kerestem (hadd indexelje a Google) USART PIC16F690 sample code USART sample code EUSART sample code EUSART input outbut Még annyit, hogy mit csinál a kód: Elküld a soros porton 3 betűt (ABC), aztán vár egy karaktert. Miután ezt megkapta, megjeleníti a bitjeit a PORTC-n, és újra kezdi az egészet. Megszakítást nem használ, de azt már nem nehéz implementálni bele.
Sziasztok!
Kérdésem annyi lenne, hogy tudtok-e olyan Algoritmusról, ami helyettesíti az USART Hardwer elemet?! PIC16F84 -re kellene egyet készítenem, Infrás távirányító lenne a fő feladata, csak nem tudom, hogy lehetne megoldani azt, a vevő és az adó is értse ugyanazt a jelet, amin kommunikálnak USART nélkül?! Köszi!
Sziasztok!
Nekem is a soros kommunikációval (is) adódott problémám. Egyenlőre azt szeretném megvalósítani, hogy a soros porton jövő karaktersort egy 16F877-tel kiíratnám egy VFD kijelzőre (ez van itthon, működtetése hasonló a HD 44780-as LCD-khez). A mellékelt kódot élesben futtatva az indítási üzenet PC felé elküldésén kívül látszólag nem történik semmi, hardveresen debug-olva rendesen lefut a kijelző reset és a kurzor sor elejére ugrása is valamint a küldött karakterek meg is jelennek DE csak ha egyesével küldöm. Ha több karaktert próbálok küldeni, akkor az RCSTA,OERR bit 1-be áll és nem hajlandó több adatot fogadni. Arra rájöttem, hogy a kijelző nem képes olyan gyorsan fogadni az utasításokat, ahogy a PIC küldené (nem elegendő az a néhány NOP ), ezt késleltetéssel korrigálni tudom, de mit kezdjek a bejövő karaktersorral? Mire törlöm az OERR bitet, elveszítek pár bejövő bájtot.Valami pufferszerűség kellene ami gyorsan tölthető, aztán ráérne szépen elküldözgetni a kijelzőnek. Csináljak 80db változót és azokba toljam? Lehet hogy az is lassú lenne. Biztos van egyszerűbb megoldás...
Hali
Meg kellene probalni interrupt-tal. Vagy esetleg probald meg 1200 baud-al. Az interrupt sztem egyszerubb. Esetleg csinalsz egy nagyobb buffert es ciklikusan irsz bele valamint ciklikusan olvasod ki. Az altalad leirt eset valoszinu a OERR bit 1-be billenese. Ezt csak a CREN bit 0-ba allitasa fogja torolni. Ezutan ujra 1-be kell billenteni a CREN-t. A RCIF bithez nem artana 1-be rakni a RCIE-t, mert maskepp nem fogja bebillenteni a RCIF bitet. Bovebbet az adatlapban talasz. Erdemes olvasgatni mert eleg bonyolult a soros port kezelese eloszor. Esetleg keress valami AN-t a microchip honlapon. Udv Vili
Úgy tűnik hogy 2400baud sebességen és kissé még lassabban küldve a kijelzőnek az adatokat, stabilan működik, az OERR bit sem billenik. Később még megpróbálkozom a mexakítással. Most öröm és bódottá van!
Köszi a segítséget!
Én ezt tudnám ajánlani.
Sok egyéb oktatóanyag van ezen az oldalon, a PIC-ekhez szinte "A-Z-ig" Soft_uart_16f84
Sziasztok!!
nem tudom figyeli-e még valaki ezt a topikot, de nekem kifejezetten az rs-485 megvalósítással lennének kérdéseim. Az adatlapot böngészve (hiányos angol tudásom miatt) nem nagyon találtam megoldást. Az lenne az elképzelésem, hogy közvetlen a buszra kötném az F690-et 75176 vagy max485 nélkül. Az értelmezésem szerint ennek működni kellene. Ha van már valami tapasztalat, akkor azt nagyon megköszönném.
ezekszerint csak a protokolban segít
azért ha van valami kész példád, azt elfogadnám segítségnek
Itt egy példa 3 db rs485 átalakítóra. Természetesen ha neked csak egy kell, akkor demultiplexer nélkül a vezérlő lábat direktbe a kontrollerre kell kötni és a fel- és lehúzó ellenállások sem kellenek rájuk. Amennyiben csak adni vagy venni akarsz adatot a buszról (mindkét funkció tiltása nem kell), akkor össze is lehet kötni a két lábat, és egy kimenettel vezérelhető az átalakító.
Sziasztok!
A következő lenne a gondom: Egy PIC 16f887-est szeretnék összekötni a gépemmel, a PicKit2 UART Tooljával. Elolvastam a Pic leírását, szerintem mindent beállítottam, amit ott leírt, a TX lábon viszont még csak a Start bitet se adja le. A mellékelt fájlban még az RB0-ra van kötve egy gomb, illetve RD0-án egy jelző LED. Viszonylag kezdő vagyok, úgyhogy lehet, hogy csak én néztem el valamit nagyon. Ha esetleg valakinek van erre egy Library-ja, azt is megköszönném. Egy másik kérdés, hogy nem tud valaki egy jó programot meg egy honlapot amivel alapszinten tudnék Piceket C-ben programozni? Válaszokat előre köszönöm. |
Bejelentkezés
Hirdetés |