Fórum témák

» Több friss téma
Fórum » RS232 PIC16F690 USART-tal
 
Témaindító: unicorn, idő: Márc 27, 2008
Témakörök:
Lapozás: OK   2 / 3
(#) dcsabi hozzászólása Ápr 2, 2008 /
 
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...
(#) potyo válasza dcsabi hozzászólására (») Ápr 2, 2008 /
 
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.
(#) dcsabi válasza potyo hozzászólására (») Ápr 2, 2008 /
 
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...
(#) unicorn hozzászólása Ápr 2, 2008 /
 
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á.
(#) dcsabi válasza unicorn hozzászólására (») Ápr 2, 2008 /
 
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...
(#) szilva válasza dcsabi hozzászólására (») Ápr 2, 2008 /
 
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.
(#) szilva válasza unicorn hozzászólására (») Ápr 2, 2008 / 4
 
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.
(#) unicorn válasza szilva hozzászólására (») Ápr 3, 2008 /
 
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!
(#) dcsabi válasza szilva hozzászólására (») Ápr 3, 2008 /
 
É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...
(#) ccalfa válasza unicorn hozzászólására (») Jún 9, 2008 /
 
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
(#) icserny válasza unicorn hozzászólására (») Szept 23, 2008 /
 
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.
(#) delmur82 hozzászólása Szept 24, 2008 /
 
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
(#) delmur82 hozzászólása Szept 24, 2008 /
 
Egyébként honnan tudom letölteni a RScheck nevű progit?
(#) delmur82 hozzászólása Szept 24, 2008 /
 
megvan
(#) dcsabi válasza delmur82 hozzászólására (») Szept 24, 2008 /
 
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
(#) Mate12345 hozzászólása Máj 25, 2009 /
 
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?

  1. #include <p16F690.inc>
  2.      __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
  3.  
  4. cblock 0x20
  5.   W_Save
  6.   STATUS_Save
  7.   byte
  8. endc
  9.  
  10.  
  11. org 0
  12.  nop
  13.  goto        Start
  14.  nop
  15.  nop
  16.  nop
  17.  nop
  18.  nop
  19. Start:
  20.  bsf       STATUS,RP0     ; select Register Page 1
  21.  clrf      TRISA
  22.  clrf      TRISB      
  23.  clrf      TRISC        
  24.  bcf       STATUS,RP0     ; back to Register Page 0
  25.  
  26.  BANKSEL        SPBRG
  27.  movlw          d'25'
  28.  movwf          SPBRG
  29.  
  30.  BANKSEL        TXSTA
  31.  movlw          b'00100100'
  32.  movwf          TXSTA
  33.  
  34.  BANKSEL        RCSTA
  35.  movlw          b'10010000'
  36.  movwf          RCSTA
  37.  
  38.  BANKSEL        PORTC
  39.  clrf           PORTC
  40.  
  41. Loop:
  42.  banksel        RCSTA
  43.  bcf            RCSTA,OERR
  44.  bcf            RCSTA,FERR
  45.  BANKSEL        PIR1
  46.  btfss          PIR1,RCIF
  47.  goto           $-1
  48.  BANKSEL        RCREG
  49.  movf           RCREG,w
  50.  BANKSEL        PORTC
  51.  movwf          PORTC
  52. goto Loop
  53. end


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ó...
(#) MPi-c válasza Mate12345 hozzászólására (») Máj 25, 2009 /
 
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:
  1. btfss   RCSTA,OERR
  2. goto    $+3
  3. bcf     RCSTA,CREN
  4. bsf     RCSTA,CREN
  5. btfss   PIR1,RCIF
  6. goto    $-1
  7. movf    RCREG,W
(#) Mate12345 válasza MPi-c hozzászólására (») Máj 25, 2009 /
 
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.
(#) El_Pinyo válasza Mate12345 hozzászólására (») Máj 25, 2009 /
 
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.
(#) Mate12345 válasza El_Pinyo hozzászólására (») Máj 25, 2009 /
 
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.

serial.asm
    
(#) robing16 hozzászólása Szept 19, 2009 /
 
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!
(#) bodgabo hozzászólása Jan 27, 2010 /
 
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...
(#) vilmosd válasza bodgabo hozzászólására (») Jan 27, 2010 /
 
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
(#) bodgabo hozzászólása Jan 29, 2010 /
 
Ú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!
(#) dcsabi válasza robing16 hozzászólására (») Jan 29, 2010 /
 
É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
(#) nyarfa hozzászólása Júl 28, 2010 /
 
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.
(#) potyo válasza nyarfa hozzászólására (») Júl 28, 2010 /
 
Nem fog működni, kell az illesztő.
(#) nyarfa hozzászólása Júl 28, 2010 /
 
ezekszerint csak a protokolban segít

azért ha van valami kész példád, azt elfogadnám segítségnek
(#) miklosch válasza nyarfa hozzászólására (») Júl 28, 2010 /
 
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ó.

3.png
    
(#) danim1130 hozzászólása Aug 25, 2010 /
 
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.

UART.asm
    
Következő: »»   2 / 3
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem