Fórum témák
» Több friss téma |
Ha éppen segítség kicsi gondolatébresztőnek, az rs485 nem jelszintekkel, hanem feszültség különbséggel dolgozik, sebességre is jobbat tudhat. Persze vagy tetszeni fog, vagy nem.
Idézet: „... erre kérdeztem mivel lehetne megoldani, hogy egy IC ből már ez +9~10V körüli szintet tartson Logic-1 nek és 0V ot L.0 nak 1 segédfesszel.” A 74Cxx sorozat +15V -os tápfeszültséggel is működtethető. Figyelem: Csak a 74Cxx, a 74HC, 74HCT stb. csak maximum 5V tal. 74C00
Hát a diódás történet nem akart összejönni sehogy, de Sonajkniz kolléga javaslatára két ellenállásból képzett feszültségosztót barkácsoltam a lábra, de sajnos ez is csak félsiker. Ha csak simán elveszem a feszültséget az áramkörtől nem megy sleep-be a PIC, és hiába adom vissza neki az áramot, nem inicializálja a kijelzőt, így nem is lehet látni rajta semmit. De ha a pozitív tápra csatlakozó lábat megszakítom, akkor belép a sleep módba és ha újra csatlakoztatom az ellenállást szépen ébred is az egész. Nem értem én ezt...
Szia!
Azt hiszem, megvan a hiba. Ha a tápfesz megszünésekor a PIC bármelyik, az LCD- hez kapcsolódó lábán pozitív feszültség, azaz magas szint van, az a telepes táplálásra váltástól nem szűnik meg, csak ha már elmegy aludni. Ez viszont nem tud bekövetkezni elég hosszú ideig, mert az 5 voltos tápkondi negatív lábával előbb találkozik a visszatérő pozitív, mint az elem negatív sarkával. Így mintegy sorbakötődik vele és pumpálja tovább a tápot. A kijelző ugyan lekapcsolódik, mert közel azonos potenciálra kerül a feszültség a tápágán, de a PIC tápfesz figyelő pontján megmarad a feszültség. Módosítsd úgy az LCD meghajtó programját, hogy amint az adatok átmentek, minden a kijelzőhöz kapcsolódó kimenet álljon nullára.
Tesztelgetek tesztelgetek eredmény:
Ha Max232ről a PC től érkező és céleszközhöz menő 2 eret lekötöm és ezt BC546B re úgy kötöm be, hogy tranyó Emitter GND ; Collector maga a potméteres Kline csatorna Bázis ra dióda N véggel erre 10k és az RS232 pin3 akkor eszméletlen változások lettek nálam. Csak a vissza irányt hagytam meg Kline ->max232-> PC már 9 volt alatt azzal a sebességgel is jó amivel eddig sose. 9.37V ot mérek akkor, amikor az eddigi plafon 2xese azaz 60000bps felett és a céleszköz plafonját 125000bps elértem 12Vra állítva. Azt mondanom se kell, hogy ezzel a tempóval leszáguld az anyag 126 secundum per 64kb . A panelon levő MCU Motorola MC68HC908 ból elsőre hibátlanul ez csúcs. Ehhez az eszközhöz gyári horror cuccok 40000bps alattival dolgoznak. Most borzolja a gondolataimat hogy lenne e pozitív változás ha a vissza irányban is külső félvezetővel oldanám meg. A max232 től kéne a 6oslábról a -9V remélem ezt felhasználhatom kis terheléssel ? Spekulálok, hogy tudnám -9v ról 0V os jelre felnyomni +9v ra és 9V nál lenyomni -9Vraa Pc fele vezető eret.
Szia!
Nem mondom, hogy 100%-ban értem amit mondani szeretnél, de lényeg, hogy MŰKÖDIK! Ezer hála és köszönet!
Sziasztok!
Egy PIC33EP256MU806-osssal próbálok inicializálni egy gsm modult. Az első néhány parancsot minden további nélkül kiküldi soros porton, viszont egy idő után a parancs stringemből csak az első 4 karaktert küldi ki, logikai analizátoron figyelem. ICD3-assal debuggolom és úgy látom hogy a kiküldés elvileg minden karakternél megtörtént az analizátorral mégis csak 4-et látok. CCS C fordítót használok. Találkoztatok már hasonlóval, tudtok valami megoldást javasolni? Már kezdek megőrülni tőle.
Idézet az adatlapból:
Idézet: „4-Deep First-In First-Out (FIFO) Transmit Data Buffer” Az adásnál megvárod, amíg kiürül a FIFO? Figyeled az UxTXIF bitet? Működik a megszakítás kiszolgálása? Idézet: „The UxTXIF bit should be cleared in the software routine that services the UART transmit interrupt. The operation of the UxTXIF bit is controlled by the UTXISEL<1:0> control bits.”
CCS-C progukált nálam olyant, hogy ha be volt állítva adás puffer akkor hol elküldte az adatot hol nem ...
Sokat nem foglalkoztam a dologgal hogy kiderítsem mi nem tetszik neki, 0-ra állítottam a puffereket, egyből jó lett.
egyszerűen putc-vel rakok ki egy bájtot úgyhogy nem figyelgettem ilyesmit, de megnézem. Illetve előtte egy csómó bájtot kiírattam vele minden gond nélkül. mutatok egy pl.-t.:
kiküldi: AT, ATE0, AT+CPIN?, AT+CPIN=1234, majd ekkor AT+C-ig küldi csak ki a bájtokat.... Szóval előtte nem jelentkezik ilyen probléma
Kipróbáltam és nem jött be
Érdekes viszont hogy mindig ugyan ott hülyül meg: AT, ATE0, AT+CPIN?, AT+CPIN=1234, AT+CPIN? és amikor újra AT+CPIN?-t küldök akkor.
Nézd meg a disassambly listát. Pontosabban azt, amit a putc() -ből fordít. Meglehet, hogy nem vizsgálja meg, van-e hely a FIFO -ban.
Ha a gyanúm beigazolódik:
A hozzászólás módosítva: Okt 25, 2016
De, vizsgálja. Addig nem teszi ki míg a tx pufferben van, úgyhogy nem ez a baja...
Összevetettem a kódomat egy régebbi működő verzióval és több variáció kipróbálása után sikerült megszüntetni a kódot. A problémát az jelentette hogy túl sok és nagy globális változót használtam 1-2-t kivettem belőle illetve char típusúvá változtattam és érdekes módom most hibátlanul lefut.
Egy kis pointer aritmetikai kérdésem volna.
C ben hogy kell olvasni ennek a programsornak a jobb oldalát?
Az a jobb oldal egy valamilyen típusú pointer, vagy pointerként értelmezhető érték, amit karakteres pointerré castingoltál. Ha nem világos, esetleg a kérdés is lehetne világosabb, mert nem különösebben lehet érteni, hogy mit nem lehet érteni egy mezei castingolásban
Igen, valóban pointer áll. Itt a függvény részlet.
Akkor ez egy ponter castolás lenne, ahol int típusra mutató átalakítunk char típusra és annak kezdőcímét átadjuk temp_ptr -nek? Másik, nekem elsőre furcsa a függvény hívása (első paramétert értem alatta):
A fentiekből érzem itt is valami castolás lesz a megoldás. Jelen esetben header kezdőcímét adjuk át, de már itt átalakítva a mutatót Byte típusra? megj: a Byte típus valahol typedef szerint definiált egyedi típus. Az a baj hogy hiába olvasok utána ilyesminek, ehhez hasonló "összetettebb" példát és magyarázatot sehol nem találok. A hozzászólás módosítva: Okt 30, 2016
A ClacChk egy Byte* típust vár a header nem indirekt Byte változó, hanem ha jól sejtem valamilyen struktúra, így átalakítod a fv. híváskor a headert Byte*-ra és az &-el kéred le a kezdő címet. Így a fv.-en beül csinálhatsz vele bármit.
Nem annyira összetett ez a dolog csak egyszer kell megérteni utána rá jön az ember, hogy indirekt címzés nélkül nem is lehetne összetettebb programokat megírni.
Egy webes tutorial a pointerekről: Bővebben: Link
Ami példádban van, cross51 már leírta. Talán még egy kicsit tagolni lehetne. A "header" vélhetően valami változó. Minden változó a memóriában van, van egy címe. A "&" operátorral a változó címét kéred le, és a végeredmény (&header) pointer típus. Tipikusan olyan típusra mutató pointer, amilyen típusa a "header"-nek van. Ha neked másmilyen típusú pointer kell, akkor átcastingolod. Jelenleg "byte" típusú pointerre castingoltad ((byte*)&header). A típus név egyébként nem case sensitive, kicsi / nagy betű nincsen megkülönböztetve. És igen, az indirekt memóriacímzés fogalmának még érdemes utánanézni. Google temérdek sokat talál magyarul is. Ha asm-el kezdted a programozást, akkor már eleve ismerős lesz.
Köszönöm mindkettőtök válaszát. Úgy tűnik jó irányba gondolkodtam, de megerősítés jól jött.
Üdv. Ha egy PIc olvasása igy néz ki, az le van védve?
Ha igen, akkor hogy működik ez? Kód beírása után ki tudja olvasni belőle, vagy nincs is olyan hogy kód beirása...
Felül pirossal mutatja, hogy code protect. Tehát a védelem aktív.
Idézet: Ezt mondatot én nem tudom értelmezni. „Kód beírása után ki tudja olvasni belőle, vagy nincs is olyan hogy kód beirása...”
Ha kódvédett akkor nem lehet kiolvasni sehogysem.
Dehogynem! Csak 0000-át olvas mindenhonnan.
Nullát ír, mert nem olvas ki semmit a beleírt programból.
Van egy csúnya-csúnya módszer, miszerint túlfeszültséggel ha kiégeted a config területet, lenulláz az olvasás védelem, és ki tudod olvasni a programot.
Azt hogyan csinálod? Megmondod a szilícium lapkának, hogy csak bizonyos területe égjen ki?
A szim kártyámon is aktiv a védelem, de pin kóddal mégis fel tudom oldalni.
Akkor a PICnél ha aktiv a védelem, nincs olyan hogy beirok egy kódot, és már olvasható lesz..?
Állítólag valahogy fel lehet törni, de kb. típusonként változó módszerrel. Igaz, én még élőben nem láttam ilyet csak olvastam valahol, hogy volt aki már latott olyan embert, aki meg tudja csinálni...
Majd pajti2 megmondja a tutit, vagy nem.
Nincs. Szerintem amatőr módszerrel nem lehet feltörni. Az ilyeneket csak törölni lehet és újraprogramozni. De az újabb típusok között van olyan is amit ha lezárod, se törölni, se újraprogramozni nem lehet.
|
Bejelentkezés
Hirdetés |