Olyan, hogy valami működik, majd kis mókolás után nem működik, az esetek jelentősen túlnyomó többségében azt jelenti, hogy más is változott, mint amit az építő változtatni akart.
Műszaki megközelítésben én itt három gondot látok. 1. 12 V-os táp. Ezt bármelyik arduino saját belső kis táp IC-jével nincs értelme piszkálni. Be kell tenni elé egy filléres kínai 5 V-os step-down-nt, vagy legalább egy tisztességesen hűtött 7808-at, és máris nem 7 V-ot kell elfűteni, hanem csak 3-at. Mondanám a 7806-ot is, viszont a lapi stabkockákon azért jellemzően 1.1-1.4 V esik, vagyis 6-ból már 5-öt kevésbé fog produkálni. És ha autós felhasználás, akkor durván meg kell sorozni szűréssel (induktivitással, kapacitással, diódával, hogy éljen soká. És még így sem biztos, hogy nem fog sok szart összeszedni a szenzor vonalon (fog, de ugye ez csak beépítés után fog kiderülni).
2. Rohadtul tranzisztorokkal kellene meghajtani a kijelzőt. Pont. Erről kár is vitát nyitni. Meg kell nézni, hogy a 7221 meghajtja-e, ebben nem vagyok 100%-ig biztos, de ha az nem, akkor is van még pár lehetőség, amivel lehet számolni.
3. Ha normális (mármint cél-) eszközökkel dolgozik valaki, akkor indokolatlan a prototípus panelbe való beforrasztgatás (amivel egyébként rendszerint többet árt az ember, mint ami előnyt össze tud kovácsolni). Ha minden megy, akkor lehet, de nem szükségszerűen kell forrasztgatni magát a panelt, csodásan fel lehet tűzni a Nano-t egy hüvelysorra, amit egy megfelelő méretű próbanyákra forraszt valaki, aztán azt csak be kell vezetékelni. Több tucat ilyet csináltam, még nagyobb cuccokkal is (ST Nucleo). Parádésan ment.
A kód oldal más tészta. Ide-oda ugrabugrálni és fejvesztve egymásra másolni kódrészleteket anélkül, hogy csak halovány sejtés lenne arról, hogy mi mit és hogyan csinál, azon túl, hogy rettenetesen frusztráló, elképesztően sok értékes időt visz el.
Amúgy ha két 18650-es akkuról akarod majd hajtani, teljesen felesleges a 12V-al bántani szegényt.
Megjegyzem, korántsem biztos, hogy a betáptól szállt el, napok óta hajtogatjuk, hogy aknamezőn lépkedsz.
Értem, hogy amíg a projekt nem áll össze, nem akarsz tranzisztorokba bonyolódni, de legalább tesztelésre használhatnál egy kisebb kijelzőt, ami megelégszik 5 mA-rel...
A project megint megdőlni látszik,mert a 3.számjegyen ami a 100-as helyi érték ,a legfelső szegmens mindig világított,
kicseréltem egy másikra azzal jó lett.Közben megöltem a nano-t ,utána néztem: "12.6volt on V-in should still be ok for a classic Nano, but you're in the danger zone."
Stabil tápról kapott pont 12 V-ot,mégis meghalt.
Nembaj ,ez van ,volt még egy Uno R3 ,kicseréltem,a kód jól megy de ezen ismét mindig világít a 3 digit "A" szegmense.Amit kivettem,
azt is teszteltem és jó.Ezt már nagyon nem értem,azt pláne hogy mind 3 digiten az A szegmensek közösítve vannak,akkor a másik2-n
is kéne világítania.
Ha pl kiirom "111" ezt kapom: ¯11 vagy "45" ez van ¯45 ,kezdéskor egy 0 helyett ez van "¯ 0"
Azért pokoli nehéz jó ledes fényforrást csinálni (és azért elterjedt a pazarló és drága CV szalag), mert ahány LED, annyi féle nyitófeszültsége van, ráadásul attól függően, hogy mennyire volt szar a gyártósor, ledenként is eltérő fényerőt ad. A 7221 ezt tudja kompenzálni, bár ezt a részt az Arduino könyvtárba tudtommal (amikor néztem kb. 6 éve) nem implementálták (mondjuk érthető, borzalmas méretű kód kellene hozzá).
Igazából mindkét oldalt darlington mezőkkel kellene meghajtani, a nehézség az, hogy az egyik oldalon npn, a másik oldalon pnp kellene, utóbbi pedig nincs, legalábbis én nem találtam (source oldalt ritkán szoktak így hajtani). Szóval marad az, hogy az egyik oldal egy uln2003 (vagy ekvivalens), a másik oldal pedig négy p-mosfet vagy valami bikább pnp tranzisztor. És akkor elvileg még logikát sem kell módosítani a könyvtárban.
De ez alkatrészigényes, rengeteget kell forrasztgatni. Viszont az tuti, hogy a 20 mA meg sem kottyanna neki. Bár ugye ott meg előjönne, hogy az 5V-os oldalt a 12-ről egy másik stab ic-vel kellene leválasztani, mert így szanaszét rángatná az arduino tápját is. Mondjuk autóban egyébként is durván tele kell szórni védelemmel.
Ami a projektet illeti. Nyilván csináld meg, de a tapasztalatom (első kezes) az, hogy nem sok haszna van. Ha bármerre driftel a gumi, már nem lesz pontos, és ahogy írod, csak 10 méter kell. De igazából féktávot már nem 10 méterre veszel, hanem úgy 5 méteren belül (sőt, ha van idő bejárni tempóval, akkor 2-3 méteren belül).
Egyébként itt már viszonylag egyszerű a megoldás. Ha biztos a kerület (még érdemes egy kb. 300 méteres szakaszon kimérni nagyon pontosan), akkor
kell egy változó, aminek az abszolút értékét minden fordulatnál (hall jel) növeled a kerület értékével. Ez lehet egy sima int, vagy ha szükséges, nagyobb terű változó, és nyilván érdemes centiméterben mérni.
kell egy másik int típusú változó, ezt minden érzékelésnél meg kell nézni, hogy az előbbi változó osztva 1000-rel több-e, mint az aktuális érték. Ez az a helyzet, amikor 10 métert ment a kocsi (vagy többet, ugye). Akkor visszaírni az értéket és ennyi.
mivel a kijelzés mutiplexelt, vagyis a loop minden futási körében megy, így ott bőven elég ezt az utóbbi változót kiírni, és akkor nem kell végtelenszer ide-oda matekozni.
Az egyes anódokra kell az ellenállás, nem a közös lábra, mert attól függően, hogy hány szegmens világít, különböző lesz az áramfelvétel.
Amit Prof írt tegnap addig én el sem jutottam a Kirchoff-törvényben, pedig kézenfekvő, hogy ami az anódokon kijön, annak a közös katódon be is kell mennie.
A hétszegmenses kijelző átlagos áramfelvétele 10 mA-es katódáramoknál 44 mA. Ennél lehet kevesebb, az egyesnél 20 mA, meg lehet több is, a nyolcasnál 70 mA.
Az Atmega IC-re a specifikáció max 25 mA lábanként. (Van egy összesen kivehető áram limit is, de az nálad még rendben lenne)
Nem arról van szó, hogy 26 mA-nél elfüstöl, de fölötte a gyártó nem vállal garanciát és nálad átlagosan kétszeresen, extrém esetben háromszorosan lesz túlterhelve a közös láb.
Amúgy a 10 mA is csak hasraütéses érték, mert én saccoltam 2 V-ra egy LED nyitófeszültségét, de ha az csak 1,7 V, akkor a 100 ohmmal már 16 mA-es áram adódik és ennek megfelelően a közös láb áramterhelése is szorzandó 1,6-tal.
Most gyorsan megmértem pár LED-et nyitófeszültségre és a piros 1,62 V, a zöld 1,86 V, a kék 2,6 V. De ezek csak példák, mert bár alapvetően a színe határozza meg, de azért a konkrét értékeket vagy ki kell nézni az adatlapból, vagy meg kell mérni.
Szóval nagyon erősen javallott a közös lábakat tranzisztorral, vagy FET-tel kapcsolni.
Én azért szeretem a FET-et, mert nem nagyon kell terhelhetőséggel foglalkozni, ekkora áramok egy FET ingerküszöbét el sem érik.
Ha tudsz SMD-t forrasztani, vannak közös tokban dupla FET-ek, nem kell sok hely nekik.
Merthogy ha összeállt a működő deszka modell, akkor én mindenképpen saját NYÁK-ot csinálnék hozzá.
Nem összedrótozva, meg lyukas próbapanelen, agyvihart kapok, amikor emberek a próbapaneles kisplasztikáikkal büszkélkednek...
Amúgy a Nano-t is elengedném és szólóban csak az Atmega 328-at használnám, ezt is teszem minden ilyen esetben, de ha marad a Nano, akkor is cserélhetőre érdemes csinálni.
És aztán jön majd az autóba szerelés.
Ami ugyanis az asztalon 12V-ról működik (amit amúgy szintén nem küldenék a Nano Vin-jére, nézd meg mekkora stab kocka van rajta és nálad mindenki ezen keresztül kapja majd a tápot...), az az autóban, ahol szörnyű tüskék és tranziensek jönnek az amúgy nem is 12 V-on... hááát, sokan sokat szívtak már ezzel...
Szóval jófelé jársz, de tudod: a munka hátralévő 20%-a viszi el a ráfordított idő 80%-át...
Próbáld már meg a könyvtárhoz tartozó példák közül a testWholeDisplay nevűt rátölteni, a fájl menüben a példáknál meg kell találnod, mert az pont arra van, hogy a drótozást ellenőrizze.
Persze a megfelelő pineket át kell írnod arra, ami nálad van.
Én nem gondolnám könyvtár hibának, a korábban felmerült board hibának pláne nem, ezeket a lapokat baromi nehéz meggyilkolni, legalábbis az én tapasztalatom szerint.
Egy Atmega328-ra egyszer fordítva adtam a tápot. A tetejére ragasztott papír címke megbarnult, de amikor rájöttem, hogy hülye vagyok és visszafordítottam, simán működött...
Javaslatom a következő: Csinálj egy ciklust, ami mondjuk tizedmásodpercenként (vagy 200 ms, ilyesmi) elszámol 0-999-ig.
De csak ezt, semmi mást ne tegyél a loopba.
És ezt a változót engedd rá a kijelzőre.
Ha szépen pörögnek a számok, akkor mind a könyvtár, mind a drótozás rendben van és akkor legalább ebben biztos lehetsz.
És csak miután a kijelzés rendben működik, kezdd el beolvasni a szenzort, mert simán lehet, hogy ott akad össze valami időzítéssel, vagy interrupt-tal.
De amúgy a Prof-nak persze teljesen igaza van, a MAX7221 pontosan erre van kitalálva, remekül van adaptálva az Arduinohoz, hiszen rengeteg mindenféle kijelző használja, akár pontmátrixosak is és ez egyetlen plusz alkatrészt jelentene.
Ha lehet, akkor minden hozzáférhető információt ossz meg legközelebb, mert sok-sok extra munkától és az ebből fakadó időpazarlástól óvsz meg minket. Például az előtétellenállások tekintetében sokat segített volna, ha tudom, hogy mi a kijelző típusa, mert itt két sorosan kötött LED van, és ahhoz egészen más matek tartozik. Ettől még kell hozzá előtétellenállás, csak jóval kisebb.
Nézzük sorban. A lényeget igyekeztem kiemelni.
Az, hogy "A kábelezés tuti jó mert kipróbáltam más kóddal és számol rendesen, azt írja ki amit a monitor" azt jelenti, hogy van egy jól működő kódod, van egy jól működő hardvered, de te következetesen visszamész egy nem működő kódhoz és azt próbálod facsarni. Ennyi időd nem lehet feleslegesen.
Az "F" jelzésű kiírás a float típusú változó átadására/kijelzésére vonatkozik. Én Alpári Gnáccal ellentétben ebbe az utcába nem vittelek volna be, mert a változótípusok és azok működése, pláne a konverzió ide-oda valószínűleg súlyos overkill ide.
Ellenállás. Elektronikai fundamentum. De igazából e mellé még oda kell tenni, amit Alpári Gnác írt később, nevezetesen azt, hogy ennek a kijelzőnek biza 20-25 mA kell szegmensenként, ami bőven túlvan az Arduino sztenderd működési keretein. Ha technikailag működésre is tudod bírni, előbb-utóbb ki fogja nyírni az Atmega MCU-t.
A 4165-ben írtad, hogy megváltoztattad a kódot 1-ről 3-ra, és csodák csodája, ment. Ezzel kellett volna kezdeni, ugye.
És most egy másik kitérő. Nem tudom, hogy ez egyedi projekt-e, de ha nem az, akkor eleve úgy kellene kezdeni a "fejlesztést", hogy leülsz és pontosanleírod, hogy mi az, amit szeretnél megvalósítani. Minden hozzáférhető paramétert a kerékátmérőtől a lehetséges maximális fordulatszámig, a kiírás pontosságáig, határaiig (1 m-től 10 km vagy 0,1 métertől 10 m-ig, de azt 0,1 m pontossággal végig). Ez azért kritikus, mert e nélkül n+1 lehetséges mellékszálon fog menni a fejlesztés, rengeteg kudarccal és végtelenhez tartó elpazarolt idővel. Ebből kiderült volna, hogy milyen módon kell majd a változókat kezelni, milyen megoldást kell alkalmazni a megjelenítésre, és a többi. Ha ezek megvannak, utána jöhet az, hogy mivel, és az, hogy hogyan.
A4174-ben írod, hogy "úgyis csak az egész 10 méterekre vagyok kíváncsi". Ezt kell először rendbe tenni, mert nagyjából végtelen számú igényre végtelen számú szor 10 lehetséges megvalósítási módszer van, és ha ezek nincsenek ésszel összerakva, akkor... Szóval az gáz. Mit is akarsz pontosan?
A 4179-ben írod, hogy közös anódosak. Nem, nem azok. A kínaiak bírnak meglepő és ijesztő dolgokat csinálni (nálam itthon már csak hírből van pár echte dzsunka kínai borzalom), de azért ezeket a kijelzőket elképesztően nagy számban (milliós mennyiségben) gyártják, kizártnak tartom, hogy hirtelen az éj leple alatt megfordult volna. Szóval ha eddig jó volt, akkor eztán is jónak kell lennie. Vagy tönkrement, de az már más tészta. Előtétellenállás tekintetében fura a helyzet. Én 10 mA-re lőném be, bár még egy 888-as kijelzésnél ez is cseppet sok, mert a 7 szegmensen összesen 70 mA folyik, a közösített lábon meg önmagában 70. Ez 100 ohm, minden szegmens lábra (a közösítettre nem!), ha akarsz pöttyöt, akkor arra mehet egy 330-as.
Szkóppal? :-D :-D :-D Beröffenti az R&S RTO2000-t, és megnézi, hogy mi a helyzet. :-D Ugyan. Le kell(ene) futtatni egy számlálást helyiértékenként 0-tól 9-ig, aztán annyi. Ha jól a számok, nincs gond. Ha nem jók, ki kell találni, miért nem jók. A többi stimmt.