Fórum témák

» Több friss téma
Fórum » Folyamatábrás mikrokontroller programozás Flowcode-dal
Lapozás: OK   132 / 360
(#) Bakman válasza niedziela hozzászólására (») Feb 21, 2013 /
 
Ha a processzor 10 bites ADC-vel rendelkezik, akkor sehogy, ugyanis a 3,22 V éppen két mérhető érték közé esik.

1/(1023/5) = 0,00489 (kerekítve) Tehát egy egység megközelítőleg 4,89 mV, ez a 10 bit legjobb felbontása az elméleti értékekkel számolva.

3,22/0,00489 = 658,49

Innen már csak az a kérdés, hogy az ADC merre kerekít és merre téved (658 v. 659).

Nem ismerem a C programozási nyelvet de ha jól értelmezem a Flowcode makró parancsait, az is lebegőpontos számításokkal operál amennyiben az ADC mérés eredményét feszültségként vagy szövegként kéred, tehát kerülendő.
(#) doodikaa válasza Bakman hozzászólására (») Feb 21, 2013 /
 
A helyzet az, hogy floatban olvassa be, ezen nem lehet változtatni. De a voltban méréstől függetlenül szüksége lehet az embernek lebegőpontos számításokra ezért érdekel, hogyan is van ez.
(#) doodikaa válasza (Felhasználó 15355) hozzászólására (») Feb 21, 2013 /
 
Igen ezt jól benéztem. Viszont a probléma ettől függetlenül áll számokkal is.
Átírtam a programot. Az első a hibás a második pedig egy működő kód. A képeken látható az eredmény.
(#) Bakman válasza doodikaa hozzászólására (») Feb 21, 2013 /
 
Attól függ, mit csinálsz, úgy kell alakítani a számításokat, hogy lehetőleg ne legyen benne lebegőpontos számítás. Pl. menet közben csak egész számok legyenek. Ezt a legegyszerűbben úgy lehet elérni, hogy az értékeket egészként kezeled, számolsz velük és a végén, a kijelzésnél külön kiszámolod mennyi az egész és mennyi a tört.

Az előző hozzászólásomban már írtam, hogy egy egység kb. 4,89 mV. Ha a folyamatban 489-cel számolsz, akkor a legvégén csak vissza kell osztani 100-zal, kicsit trükkösen. Legyen a példában a beolvasott érték 658. Tehát:

658 * 489 = 321 762 (x)
y = x mod 100 (y változóban lesznek a tizedes értékek)
x = (x - y)/100 (x változóban pedig az egész értékek)

z = x + "." + y (z szöveges változóba kerül: 3217.62 [mV])

Mindezen művelet 1023-ra számolva 5002.47 mV-ot ad. Természetesen nem olyan pontos, mint egy számológép de az esetek nagytöbbségében ilyen pontosság elég, és felesleges is elvárni ettől jobbat egy "buta" MCU-tól. Legalábbis a gyakorlat ezt mutatja. Ha pedig pontosabb mérés kell, más eszközökhöz kell nyúlni. A fenti számítási műveletben a legnagyobb érték: 1023 x 489 = 500247. Ez pedig egy Uint változóba bőven elfér, az pedig sokkal kevesebbet kér, mint egy Float.
A hozzászólás módosítva: Feb 21, 2013
(#) watt válasza Bakman hozzászólására (») Feb 21, 2013 /
 
Jól mondod, de nem kell osztani 100-al, mert az megint lebegőpontosat ad. Korábban egy "tucat" megoldást felraktunk a kijelzésre, átalakításra, csak vissza kéne olvasni és alkalmazni(a kérdezőnek).
A másik, hogy nem értek egyet a "buta" ADC-vel. Az ADC annyira buta, amennyire bármelyik másik 10bites. De van 12bites is, ami, ahogy írod elegendő kell legyen a legtöbb alkalmazásban, de a 10-es is.
Lehet 3,22V is, csak olyan referenciát kell használni. Persze semmi értelme, csak megemlítettem.
A hozzászólás módosítva: Feb 21, 2013
(#) doodikaa válasza watt hozzászólására (») Feb 21, 2013 /
 
Teljesen igazatok van, ezzel én nem is vitatkozom. Én a konkrét problémára keresem a választ, ami alapvetően nem programozási, hanem flowcode probléma, ezért is itt kérdeztem és nem valamelyik programozós témában. A legjobban az zavar, hogy biztos vagyok benne, hogy működnie kell csak én rontok el valamit, de egyszerűen nem tudok rájönni, hogy mit.
(#) watt válasza doodikaa hozzászólására (») Feb 21, 2013 /
 
Nem is kell vitatkozni, hanem úgy kellene csinálni, ahogy írjuk és jó lesz...
(#) Bakman válasza watt hozzászólására (») Feb 21, 2013 /
 
Ha x változó Uint, akkor abba nem kerülhet tizedes érték, plusz előtte az osztandó számból kivonok annyit, hogy tutira maradék nélküli legyen az osztás (x mod 100 eredménye).

A "butát" természetesen arra értettem, hogy a számítógépre írt programoknál kb. semmit sem jelent plusz 10-20-50-100 KB, addig egy MCU-nál, főleg a kicsiknél nagyon is számít.
(#) Bakman válasza doodikaa hozzászólására (») Feb 21, 2013 /
 
Csak PIC-et ismerő Flowcode-om van. Nem lehet, hogy a Flowcode-od demo és a limitációk miatt nem fordul le a teljes program? Bár igazság szerint nem tudom, ezt hogyen viszi véghez a program. Részlegesen fordít vagy figyelmeztet, hogy nem fog menni a dolog...
(#) doodikaa válasza Bakman hozzászólására (») Feb 21, 2013 /
 
Nem, a demo csak annyiban korlátozott, hogy csak néhány controllert ismer.
(#) watt válasza Bakman hozzászólására (») Feb 21, 2013 /
 
Azt írtad osztani kell. A mod nem sima osztás, illetve negy ugyanarról van szó. Ha mod ot írtál volna, nem reagáltam volna rá.
A hozzászólás módosítva: Feb 21, 2013
(#) Bakman válasza watt hozzászólására (») Feb 21, 2013 /
 
x = 658 * 489
y = x mod 100 (y változóban lesznek a tizedes értékek)
x = (x - y)/100 (x változóban pedig az egész értékek)

z = x + "." + y (z szöveges változóba kerül: 3217.62)

x-ben nem lehet tizedes, pláne akkor, ha x típusa Int, Uint vagy ilyesmi.
(#) watt válasza Bakman hozzászólására (») Feb 21, 2013 /
 
Említettem, hogy feltettünk erre komplett megodásokat(ADC mérés, 32bites szám kijelzés, fixpontos kezelés)...
A hozzászólás módosítva: Feb 21, 2013
(#) Bakman válasza watt hozzászólására (») Feb 21, 2013 /
 
Linket tudsz adni? Keresem de nem találom, kíváncsi vagyok nagyon minden megoldásra.
(#) watt válasza Bakman hozzászólására (») Feb 22, 2013 / 1
 
digitekre bontás
freki_periódus_impulzus mérő
Mindkettő tartalmazza a megoldást egy szám digitekre bontására. A tizedes pont kirakása értelemszerű.
A keresővel lehet felhasználóra keresni: pl: *user:watt
A hozzászólás módosítva: Feb 22, 2013
(#) doodikaa válasza (Felhasználó 15355) hozzászólására (») Feb 22, 2013 /
 
Szerintem ezt a program megoldja, különben szólna. Mindenesetre kipróbáltam és nem lett jobb. A proci az megy csak a kijelző bolondul meg, a fene sem érti.
(#) watt válasza doodikaa hozzászólására (») Feb 22, 2013 /
 
Ha egészeket használva jó a kijelzés, ahogy írtad, akkor egyértelmű, hogy a float kezelésénél, kijelzésénél van gond(lehet, hogy fordító hiba). Leírtuk, hogy kerülni kell a float műveleteket, ezért nincs sok értelme ez irányba keresni a hibát, válts fixpontos megoldásra a javaslatok szerint és működni fog.
A fejlesztői környezet egyébként nem szól minden hibáról, sőt, a legfontosabbakról sem mindig!
Annyit még megjegyeznék, hogy sem a PIC, sem az AVR nem proci...
A hozzászólás módosítva: Feb 22, 2013
(#) pjg válasza watt hozzászólására (») Feb 22, 2013 /
 
Annál több, bizonyos szempontokból kevesebb.
(#) watt válasza pjg hozzászólására (») Feb 22, 2013 /
 
Nem. Egyszerűen nem úgy hívják ezt a struktúrát!
picmicrocontrollers
avrmicrocontrollers
A hozzászólás módosítva: Feb 22, 2013
(#) silent15 hozzászólása Feb 23, 2013 /
 
Sziasztok, havertól megkaptam az új flowcodeot, de semmit nem akar lefordítani, ha még egy üres projectet akarok, azt sem.
Itt a fordító hibája:
Idézet:
„File name: C:\Flowcode\Dani_PWM.c
Fordító indítása...
C:\Program Files (x86)\Flowcode\v5\Tools\boostc\boostc_pic16_flowcode.exe -v -t PIC12C508 "Dani_PWM.c"
BoostC Optimizing C Compiler Version 7.04 (for PIC16 architecture)
http://www.sourceboost.com
Copyright(C) 2004-2011 Pavel Baranov
Copyright(C) 2004-2011 David Hobday

Licensed to FlowCode User under Single user Pro License for 1 node(s)
Limitations: PIC12,PIC16 max code size:Unlimited, max RAM banks:Unlimited

error: could not open input file 'C:\PROGRA~2\Flowcode\v5\Tools\boostc\config\PIC12C508.tdf'

Dani_PWM.c
Starting preprocessor: C:\PROGRA~2\Flowcode\v5\Tools\boostc\pp.exe Dani_PWM.c -i C:\PROGRA~2\Flowcode\v5\Tools\boostc\include -d _PIC12C508 -la -c2 -o Dani_PWM.pp -v -d _BOOSTC -d _PIC16 -d _CHAR_INDEX
....

Dani_PWM.c success
success
Visszatérési érték = d
Liker/assembler indítása…
C:\Program Files (x86)\Flowcode\v5\Tools\boostc\boostlink_pic.exe -ld "C:\Program Files\Matrix Multimedia\Flowcode V5\Tools\BoostC\lib" libc.pic16.lib "Dani_PWM.obj" -t PIC12C508 -d "C:\Flowcode" -p "Dani_PWM"
BoostLink Optimizing Linker Version 7.03
http://www.sourceboost.com
Copyright(C) 2004-2011 Pavel Baranov
Copyright(C) 2004-2011 David Hobday
could not open input file 'C:/PROGRA~2/Flowcode/v5/Tools/boostc/config/PIC12C508.TDF'
Error: Failed to open:libc.pic16.lib or C:\Program Files\Matrix Multimedia\Flowcode V5\Tools\BoostC\lib/libc.pic16.lib
failure
Visszatérési érték = d
A Flowcode nem tudja lefordítani az ASM fájl a következő hiba miatt:
VÉGE


Sajna én ebből nem vettem ki mi a hiba (mámrint, hogy nem tudja megnyitni ezt -azt , azt tudom, csak nemtudom miért )
Üdv!
(#) niedziela válasza silent15 hozzászólására (») Feb 23, 2013 /
 
Azért mert
  1. could not open input file 'C:/PROGRA~2/Flowcode/v5/Tools/boostc/config/PIC12C508.TDF'
fájl nem létezik. Flowcode-ban ugyan lehet programozni, de külső fordítót kell használnod ha ezt a PIC-et akarod hex-re fordítani.
(#) silent15 válasza niedziela hozzászólására (») Feb 23, 2013 /
 
Igazad van, ilyen sajna tényleg nincs, de például kipróbáltam egy PIC18f2550 el, itt már nem ez a hiba jelentkezik, de ígysem fordítja le.
Idézet:
„Error: Failed to open:libc.pic18.lib or C:\Program Files\Matrix Multimedia\Flowcode V5\Tools\BoostC\lib/libc.pic18.lib

Viszont ez ott van ahol kéne lennie. Nemértem mi lehet a baj, a régi verziós flowcodeal semmi bajom nem volt.
(#) niedziela válasza silent15 hozzászólására (») Feb 23, 2013 /
 
Idézet:
„régi verziós flowcodeal semmi bajom nem volt.”

Abban sem fordítottad az 508-at hex-re az tutti
PIC18f2550 hibához meg tedd fel a forrást ami nem megy.
(#) silent15 válasza niedziela hozzászólására (») Feb 23, 2013 /
 
Lényegében üres a fájl, nem tudom miért nem csinálja...
(#) kokozo válasza silent15 hozzászólására (») Feb 24, 2013 /
 
Milyen op. rendszered van, és hány bites?
(#) niedziela válasza silent15 hozzászólására (») Feb 24, 2013 /
 
Gond nélkül fordul.
(#) silent15 válasza kokozo hozzászólására (») Feb 24, 2013 /
 
Szia, Windows 7 és 64 bites (régen 32-es volt , remélem nem az a baj)
(#) kokozo válasza silent15 hozzászólására (») Feb 24, 2013 /
 
Pedig de.. Az útvonal nem ott van a 32 és a 64 bites rendszernél. Be kell újra állítani az elérési útvonalat...
  1. C:\Program Files (x86)\Flowcode\v5\Tools\boostc\boostc_pic18_flowcode.exe
(#) silent15 válasza kokozo hozzászólására (») Feb 24, 2013 /
 
Szia, most átálítottam az elérési útvonalat, az asembler számára, mostmár nem írja ki, hogy nem telálja, most viszont kiír vagy 30-50 hibát, ehhez hasonlókat:
Idézet:
„Error: Unresolved external function:'float32_to_int32(float)'

És hasonlókat.
(#) kokozo válasza silent15 hozzászólására (») Feb 24, 2013 /
 
Minden elérési útvonalat átírtál x86-ra, vagy csak a fordítóét?
Következő: »»   132 / 360
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