Fórum témák
» Több friss téma |
Minap vettem egy PicKit2-t, amelyhez járt egy PIc16F690-es mikrokontroller is. Most szeretném használni az USART funkcióját (RS232-n keresztül PC-re kötni), azonban nem találtam se példaprogramot, se kapcsolási rajzot. Átnyálaztam a vonatkozó részt az adatlapban , de elég tömény volt így elsőre.
Még egy kis nehézség: nincs C-s fordítóm, úgyhogy ASM-ben lenne szükségem valami megoldásra.
A hardverhez használhatsz egy max232-es illesztőt. A szoftver már bonyolultabb (nem nagyon). Adni vagy venni szeretnél adatot?
Nem bonzi a syoftver sem. CCS-ben pár sor.
Azt írta, hogy ASM kell neki. Abban meg van vagy 10 sor
Az adatlapban a 12.1.1.6 fejezet leírja, hogy hogyan állítsd be a küldésre a kontrollert. Annyit tennék még hozzá, hogy a TX lábat a megfelelő TRIS bittel kimenetté kell állítani, ez nincs ott a felsorolásban.
A fogadás beállítása pedig a 12.1.2.8 fejezetben van leírva. Mindkettő képekkel is van illusztrálva, az adatlapban minden megtalálható ahhoz, hogy soros porton küldj vagy fogadj adatot. Olvasd el még egyszer, és gondold végig, hogy mikor mi történik, melyik beállítás mit jelent, stb.
Ok, megpróbálom, de azért gondolom nem kevesen csináltak már ilyet a fórumozók közül, talán meg tudna valaki dobni egy működő példával.
Igazság szerint adni is venni is, de először mondjuk venni.
Nem vagyok teljesen képben a dologgal, de én azt hittem, hogy a MAX232 nélkül is megy ez... Rosszul gondolom?
Mivel én egy "harmadik" utat használok a pic-ek programozásához, amit tudok segíteni esetleg csak 80%-os. Nos egy Pc-s progi amit már tőbbszőr feltettem, ezzel tudsz adatokat küldeni a pic-re, meg venni is a pic-felől...A programban annyi byte-ot állíts be adásra , vagy éppen fogadásra, amennyi Byte-ot a pic-ben erre a kommukációra szánsz... egy pic-es példaprogit küldök 16f628-ra, meg 16f877-re, beleturhatsz és talán segít valamit...A 628_90r3 progi 4 Byte-ot küld a Pc felé 100 ms-onként 9600-as sebességel... a másik meg ha RA.0-ra kötött nyomógombot nyomkodod (testre, egyébként ellenállásal felhúz +ra) akkor egy változó növekszik 100-ig. Tehát a pc itt 1 Byte-ot vár!
Esetleg. De inkább mégiscsak max232 legyen.
Valaki említette előttem, máshogy is meg lehet oldani, érdekességnek tettem fel... A \"Max-os\" jobb...
Ez erre lett \"kitalálva\"...
azér zárójelben megjegyzem h max232ből több fajta van. van amelyikhez nem 10u s kondi kell hanem 1u-s vagy 100n-es. (asszem)
Idézet: „van amelyikhez nem 10u s kondi kell hanem 1u-s vagy 100n-es. (asszem)” Annyit módosítanék, hogy 1u vagy 100n is elég hozzá. Az nem probléma, hogy nagyobb.
A kérdező 3 órája eltünt, mi meg elvi tépelődést folytatunk
az eredeti kérdést alig érintő témában... Egyébként én legalább 3-4 gyártmányt használtam ezzel a beállítással, 19200-as sebességig....
Felesleges az optocsatoló, ráadásul ilyen helyre illene gyorsat tenni. A legegyszerűbb RS232 illesztés PIC és PC között, amit már sikerrel használtam is, a mellékletben látható.
Látszik, hogy a PIC->PC irányban teljesen szabvnyon kívüli jelszintet használ, de működik, a PC-kben használt RS232 vevők 1.4V körül billennek, azaz a -3...-25V helyett elég nekik a 0, stabilan működnek így. A jelpolaritásokat a nevükben meg is jelöltem a PIC oldalán, azaz a TX-et pont ellentétesen kell kezelni ilyenkor, mint a szabvány előírja, az RX rendes polaritású. Ha szoftveres küldő/fogadó rutinokkal dolgozunk, akkor ez nem gond, de a hardveres USART-oknál nem mindig lehet beállítani, hogy milyen polaritással kezeljék az RX/TX jeleket. Délután megnéztem a 690 doksiját, én úgy láttam, hogy a TX-nél meg lehet mondani a polaritást, az RX-nél nem - viszont a mi esetünkben ez elvileg pont elég. 690-essel még nem próbáltam ezt a dolgot, más PIC-ekkel használtam már az USART-ot, egyáltalán nem bonyolult.
Bocsi, valóban eltüntem, mert jegyesoktatásra kellett mennem.
Köszönöm a sok segítséget. Ahogy látom tőletek: a legjobb, ha én is MAX232-est használok jelszint-illesztésre (remélem pontosan mondom). Elmondom, hogy hogy látom, kérlek titeket, hogy írjátok, ha valamit rosszul gondolok: 1. MAX232-essel (az adatlapjában találtak szerint) megcsinálom a jelszint-illesztést. 2. A MAX232-es RX kivezetését rákötöm a PIC16F690-es RB5 lábára, a TX-et az RB7-re (ezen kívül természetesen kap a PIC tápot és GND-t, gondolom azonosat, mint a MAX232-es). (3. Kötök rá valami LED-et, LCD-t, mittudoménmit, hogy látható legyen valami.) 4. ??? Hogyan tovább? Próbáltam megérteni a potyo által írt fejezeteket, de biztos én vagyok kevéssé értelmes... Van esetleg valakinek egy példaprogramja arról, hogy hogyan kell egy byte-ot fogadni (mondjuk HyperTerminal-ról). dcsabi: ha jól értem, akkor a te megoldásod nem USART-os. Én ilyet szeretnék csinálni, ha már tudja a PIC (ahogy értettem: ez egy egyszerűbb megoldás mindennél, mert egy HW elem támogatja a kommunikációt). Persze, ha van valakinek, akkor ASM kód kéne... Köszönöm az eddigi segítséget, már úgy érzem, mintha nem teljesen sötétben tapogatóznék.
Lehet, hogy ez az én kérdésemre a válasz:
http://techref.massmind.org/techref/microchip/16F/628/UARTtest.htm ?
Amire vigyázni kell, hogy a baud rate függ a PIC órajelétől. Táblázatot találsz az adatlapban, ez alapján kell beállítani az SPBRG regisztert és a BRGH bitet.
Szerintem amilyen példaprogit küldtem, az kell neked, csak konfiguráld, a Te pic-edre, A pc-vel kommunukáló progi is szerintem "kezesebb" mint a terminálprogramok...
Esetleg ha gyakorlati eredményt akarsz vegyél, egy 628A-t is ahhoz sokkal több minden van akár több életképesprojekt is... 400ft/db!...
Nem ugyanaz a két IC? Mármint ebből a szempontból...
Van itthon vagy 4 db ilyen 628A-s, csak szeretném a 690-esre megcsinálni a progit (nem tudom, miért).
Nem teljesen egyformák, mert a 628A-ban USART, a 690-ben EUSART található. Az EUSART több funkcióval rendelkezik. Ha van a 628A-d, akkor lődd be azon működőképesre, akkor már kb. tudni fogod, hogy hogyan kell, és akkor már össze tudod rakni a 690-re is.
Mi az a plusz amiért megéri vele, egy ismeretlen dologgal "kinlódni"?... ha ki tudod a 628A-val próbálni a kommunikációt ( amiket küldtem azokkal), ez tutira müködik amit írtam (asm-ben is) ...
utána , ha megy akkor a turj bele és alakítsd át 690-re... szerintem elég ha a 14-es és 16-os sorba belejavítasz a processzor nevét átírod!
A 16F690-es egy kiváló általános PIC, van benne mindenféle periféria. Általánosan, fejlesztésre nagyon jó választás, és az ára is elég barátságos. Tehát ha másért nem, emiatt érdemes megismerkedni vele.
A 16F628 elvileg a rendkívül népszerű 16F84-es kiváltására lett kitalálva, nagyon sok alkalmazás egyszerűen portolható 16F84-ről 16F628-ra. Ma már nem éri meg 16F84-re fejleszteni, netán újonnan ilyet venni - kb. dupla annyiba kerül, mint egy 16F628 vagy egy 16F690. Egyedül az szól a 16F84 mellett, hogy arra tonnányi cuccot lehet találni a neten. Mindamellett érdemes azokat is 16F628-ra migrálni, ha van rá mód, akkor az eredeti panelterv is használható. Ha 16F690-re migrálunk, akkor a más bekötés miatt új panel is kell.
Azért a 628 egy kicsit többet tud mint a 84-es. Viszont én úgy
vagyok ezzel a dologgal, hogy ha valamihez nincs fejlesztőkörnyezetem, az adott feladathoz úgy választok procit ( van választék bőven) , hogy ez a szempont legyen az első...Inkább egy kicsit átalakítom a panelt mint 2 hetet györcsöljek "egy estés" programon... Én azt javasoltam neki, hogy a soros kommunikációt próbálja ki a 628-al amit küldtem példaprogit... akár át is drótozdatja, egy "lukas panelen is egyszerű"... Vagy a küldött példaprogimat javítsa át 690-re(2 sor)..A hardware környeztnek is jónak kell lenni, ha valami nem megy nem tudja miért nem...
Sajnos sok elfoglaltságom miatt nagyon lassan haladok.
Ma megcsináltam a MAX232N-es IC kapcsolását. Rákötöttem a soros kábelt. Megjelent a soros kábelen a -11,11 V, valamint az IC 12-es lábán +5V. Ez ha minden igaz a stabil 1-es jel, ami az üresjáratot jelenti. Ezekután gondoltam, hogy talán villogtat egy LED-et, ha HyperTerminal-on elkezdek írkálni (9600 baud), de sajnos nem tette. Én gondolom rosszul ezt a villogós dolgot, vagy valamit nem jól csináltam?
Lehet hogy villogott, de túl gyorsan ahhoz, hogy észrevedd. Küldj a hiperterminálon 0xF0-t, és a lehető legalacsonyabb sebességen. Akkor talán látni is fogsz valamit a leden.
A hiper t...helyett javaslom a RSCheck progit amit kicsit előrébb feltettem, ott leírtam egy példát, csak éppen a Te procidba kell égetni, úgy hogy már ezt is említettem hogy a megfelelő sorokat kicseréled a Te procid megfelelőjére és így fordítod le az MPLAB-al, vagy ez alapján írsz egy újat...
Az Rscheck azért jó mert Pic-hez írták és kezesebb... 1- sebesség passzoljon mindkét oldalon pl:9600 (4Mhz-nél) 2- a fogadni kivánt vagy adni kivánt byte-ok száma egyezzen meg a PIC-ben erre a kommunikációra szánt byte-ok számával 3- döntsd el adni akarsz a pic-felé, vagy venni onnét, mert ez alapján kell a pic progít megírni, illetve a PC-s segédprogit is használni ... 4- mindkettőt lehet \"látszólag egyidőben\", de kezdésnek elég egyik is, pl vegyél a pic felől, ezt a pc-n gyönyörüen tudod detektálni. Fordított esetben egyéb periféria kiépítése célszerű a PIC köré, pl ledek, ledsor, lcd..stb És külső oszcillátort használj!
Próbáltam végigmenni a doksi 12.1.1.6 fejezetén, azonban sajnos nem lett az igazi az eredmény. Vagyis: a HyperTerminal-on nem jelenik meg semmi.
Mellékelem az általam elkészített végletekig lebutított ASM kódot. Mindenhol ott van kommentben, hogy a fejezet melyik pontját oldom éppen ott meg. Mit rontottam el? (A PIC16F690-es RB7-es lábát kötöttem a MAX232-es 11-es lábára. Ezen kívül csak a táp és a föld van bekötve a PIC-en, a MAX232-es pedig elvileg helyes van kötve, adatlap szerint).
Ha 2400bps-t akarsz a 8MHz-es belső oszcillátor mellett, akkor az SPBRG regiszterbe 51-et kell tölteni, nem 25-öt. A többi jónak néz ki.
|
Bejelentkezés
Hirdetés |