Fórum témák
» Több friss téma |
Nekem ez így egy picit furi,hogy mit is szeretnél pontosan
![]()
Heló!
Float stringbe (ASCII kóddá az egyes számjegyeket), és a tizedesjegy átalakítása előtt az egész részek sorrendjének megfordítása. (az egyesek kerülnkek a tömb 0. helyére, tizesek a 1. és így tovább, és a magasabb helyiértékek után jönnének a tizedes részek. Ezért szeretném megfordítani a sorrendet, hogy a legmagasabb helyiérték legyen a 0. tömbelemben, a legkissebb pedig a legutolsóban.) A hozzászólás módosítva: Dec 26, 2019
Talán ez jó lesz:
Sikerült!
Az volt a gond amit írtál, hogy vissza kell állítani a pointert a legelejére. Mostmár minden ok! ![]() Köszi a válaszokat!
Üdv!
PIC24-ben a belső komparátort lehet használni hiszterézises komparátorként? (megfelelő ellenállásokkal kiegészítve) Köszi! ![]()
Meg lehet próbálni. lásd: PIC MCU Comparator Tips 'n Tricks (nem PIC24, de azért, remélem, használható).
Köszönöm!
![]()
Hallo!
Ismeri itt valaki a Mach 110-s ic-t? Esetleges tapasztalatok???? Boldog um évet!!!
Nem simerem, csak érdeklődöm. Mit szeretnél egy ilyen régi, forgalomból kivont CPLD-vel?
Sikerült, működik!
![]() BUÉK! ![]()
Halló Bakman!
Elöszoris B.U.É.K! Nos nekem Van egy riasztòm Amiben EZ Van beépitve. Ezt szeretném beüzemelni....
Elég reménytelen vállalkozásnak tűnik, én inkább kukáznám. Nem tudom, hogy segít-e rajtad, de itt találtam valami leírást: Programming Tools User Guide - Lattice Semiconductor.
Sziasztok!
Segítségetekre lenne szükségem. Ha a file regiszterben van 3, két helyiérdekű szám hogy kell összeadni? Csatolok egy képet. Pl. az első 3 sort kellene összeadnom, úgy ahogy 040 sorban szerepel. PIC18F26K22 a kontroller.
Hali!
A felső 4 bitet lemaszkolod, vagy kivonsz belőle 30H-t, összeadod (figyelve ha van "átcsordulás", Az eredményekhez hozzáadod a 30H-t(vagy or 30H)
Üdv!
Tudom úgy használni a Timer2/3 (32 bites mód) hogy nem csinálok megszakítást hozzá? Addig eljutottam hogy beállítom a timer-t, és ha a TON bitet 1 be állítom nem indul el. A megszakítást nem engedélyeztem. A mellékelt teszt kóddal nem akar elindulni a Timer, legalább is a TMR1/2 regiszterek üresek. Debugoltam is, és végig 0 volt a regiszterek értéke. Én toltam el valamit, vagy megszakítás nélkül nem működik? Köszi! ![]()
Szerintem megy az,csak eléggé hamar körbeforog
![]()
Köszi a választ.
![]() Közben alakult, működni működik, de még mindíg van valami gáz! ![]()
A buffer nevű változó uint32_t típusú, a szam double. a programot leegyszerűsítve most csak a Timer 1 et használtam, 100us beállításnál. (1:1; PR1 = 1000; 20MHz kvarckristállyal) A bufferben benne van, hogy összesen hány 100 us telt el egy esemény óta. (átlagosan 1sec -> 10000us) ha a változót leosztom 10 000 -el akkor meg kellene kapnom az időt sec-ben, de ehelyett 0.00valami -t kapok. A TMR1 elvileg nem csordul túl ennyi idő alatt. (Kikapcsolom a timert ha megtörtént az esemény.) Valami típus konverziós hiba lenne? Esetleg van valami ötleted?
Az érthetőség kedvéért ide másolom a kód egy részét:
A gond ugyan az mint a fenti részben hogy a main 12. sorában a konverzió nem okés. (szerintem) Mert a jelenlegi kódrészlettel az UART-on kiküldött üzenet : 0.000000, holott 1.valami nek kellene lennie. (a komparátortol függ, átlagosan 1 sec van a két esemény között. (hiszterézis komparátor, a 2 komparálási szint elértekor megszakítást generál.)) A komparátor ami a timer 2/3-at kapcsolgatja:
A timer:
A main:
A hozzászólás módosítva: Jan 14, 2020
Itt véletlenül benmaradt a T1CONbits.TON az T2CONbits.TON akat lenni mind 2 helyen, átjavítva csak randomnak tűnő értékek jelennek meg, (amelyek 1 nél kissebbek).KÉP
Javítva:
Én nem tennék a timer interruptba UART_Print-et (legfeljebb ha pufferelve van és úgy biztosan nem tart millisec nagyságrendű ideig a lefutása). A másik, hogy te ugyan tudod hogy milyen mikrovezérlőt is használsz, de mások nem tudják. Miből gondolod, hogy így lehet értelmes választ adni?
Talán sokkal osztasz
![]() Tegyél a megszakításokba változó(kat),és azt állítsd be,és a főprogramban írasd ki az uarton keresztül. "benjami : Igen,nem jó dolog megszakításban sok mindent csinálni."
Üdv!
PIC24FJ256GA702 a mikrovezérlő. Az UART_Print csak debugolás céljábol van ott hogy lássam ha van megszakítás. Az UART Bufferébe tölti az adatokat. (De ki fogom venni! ![]() @Tasznka Hogy érted hogy sokkal osztok? 1 sec / 100 us = 10 000 -> 1 sec alatt 10 000 lesz a buffer értéke, ez osztva 10K-val az a másogpercket adja vissza. Vagy rosszul gondolom?
A kis érték miatt gondolom. Osszál kevesebbel,és nézd meg,hogy mennyi jön.
De ha csak az kell,hogy mennyi idő alatt jött meg a megszakítás,akkor egyszerűbb lenne timer-megszakításban változó.
Az UART buffere az adatlap szerint 4. Ha ez üres a küldés kezdetekor akkor éppen beleférnek ezek az üzenetek (remélhetően a lezáró nullát nem küldi ki a függvény). Amúgy az ilyen futási időket remekül le lehet mérni, ha a küldés előtt egy szabad lábat bebillentesz, a végén meg visszabillented (a lábra persze rá kell akasztani egy szkópot, vagy a pár dolláros logikai analizátort).
Köszi a válaszokat!
![]() Sikerült megoldani, a timer megszakításba raktam egy countert, azzal minden rendben megy! ![]() (Így nem a TMR2/3 regiszterekből olvasom ki az értéket, hanem a counter minden megszakításkor egyel nő.) Igen a buffer az 4, +1 amit éppen kiküld, szóval ha úgy nézzük 5! ![]() Szkóp az jelenleg nincs kéznél, szóval csak hirtelen így tudtam megoldani, de már nincs benne a kódban.
Aliéktól kereken 5 dollárért már beszerezhető a kis 8 csatornás logikai analizátor. Minden mikrovezérlővel foglalkozónak ajánlom akinek még nincs. Ezekkel a kulcsszavakkal lehet rákeresni: "USB Logic Analyzer 8CH"
Szia!
Köszönöm, megoldottam a segítségeddel.
Most még egy problémám lenne.
GPS koordinátákat kellene google formátumba átalakítani. ddmm.mmmmm formátumról dd.mmmmmm-ra. Tudom hogy 60-al el kell osztanom az első kettő kivételével, de pic-ben nem tudom hogy lehetne megoldani?
Osztást lehet úgy csinálni, hogy a reciprokával szorzol úgy, hogy a reciprokot fix pontos reprezentációban adod meg például úgy, hogy egy 32 bites szám felső 16 bitje az egészek, az alsó 16 bit pedig a törtek. Így végül fixpontos bináris törtben kapod meg az eredményt.
Miben programozod a PIC-et? ASM, vagy C? Mert C-ben tudtommal van osztás megvalósítva. A bináris szám decimálisra visszaalakításához is kelleni fog 10-zel osztás. Vagy meg lehet csinálni levonogatós módszerrel is, összesen max 5*10 levonogatós lépésben meg lesz a 6 tizedesjegy. Tehát: * A ponttól jobbra lévő részt binárissá alakítod (ASCII->bináris szám, hozzáadás, 10-zel szorozgatás jobbról balra) * A ponttól balra lévő részt is binárissá alakítod (ugyanúgy) * Előre kiszámolod, hogy melyiket mennyivel kell szorozni, hogy egy bináris fixpontos ábrázolásban a jobboldalinak megfelelő értéket kapd. (pl: 2^X/60 -> ahányadik bittől kezdődő fixpontosban akarod megkapni az értéket 60-nal osztva) Azzal beszorzod (32 bites szorzás bináris fixpontos ábrázolásban) * Összeadod az egészeket és a törteket a bináris fixpont ábrázolásban * Kerekítés miatt hozzáadsz felet (bináris fixpontos ábrázolásban fél ugye, ennek hatása az lesz, hogy a croppolás rendes kerekítésként fog működni) * croppolod a bináris számot (shiftelés jobbra) * bináris -> decimális konverzió: osztogatással, vagy levonogatással lehet megcsinálni Nem lehet a konverziót másik gépre tolni, ahol van nagyobb pontosságú lebegőpontos számkezelés például? |
Bejelentkezés
Hirdetés |