Užduotis: yra dvejos skirtingos senos svarstyklės ir vienas modernus Zebra lipdukų printeris. Reikia spausdinti gražius lipdukus su svoriu, data ir laiku. Reikia ir suregistruoti visus svėrimus į “nešmeną”.
Šiuolaikiniai lipdukų printeriai gana protingi, viduje netgi galima parašyti BASIC kalbos programą kuri apdoros duomenis ir paruoš lipduko dizainą. Tačiau papildomi punktai- operacijos data ir duomenų registravimas, neleidžiai viską padaryti pačiame printeryje. Kreipimasis į svarstyklių pardavėjus tik sukėlė neviltį- jie pradėjo klejoti apie naujų svarstyklių pirkimus ir visokių “priedelių” pirkimą. Nupirkti tai galima, bet custom sprendimai pas juos pasirodė labai jau brangūs ir sudėtingi. Todėl nusprendžiau kiek pažaisti su MCU ir moduliukais iš kinijos.
MCU pasirinkimas daromas taip: kokius MCU moki geriausiai programuoti, kuriuos lengviausia gauti ir kurių hardwarė lengviausiai padeda spręsti užduoti. Pasirinkau AVR atmega162. Todėl kad: aš jų turių gal 100 vienetų, tikrai kiek moku programuoti gcc ir avr. Jų 5V logika gana gerai derinasi su senu LCD ekraniuku. Atmega162 turi du UARTus, tačiau neturi I2C. I2C galima lengvai suorganizuoti programiškai, o UARTUS kogero sunkiau. SPI bus sunaudojama SD kortelės valdymui. O kaip RTC panaudojau kažkokį seną HTC čipą kuris netgi ne I2C. Kiek spaudžia procesoriuko atminties dydis- į 16kb vos vos telpa FAT DOSas (fatfs).
Duomenis iš viejų svarstyklių, po RS232 lygių konvertavimo, priima du UARTAI. Jų softas filtruoja visokias nesamones iš svorio- pvz. vienos Lenkiškos svarstyklės visada siunčia 16 baitų informacijos- užpildo viską probelais. Gautas svoris parodomas ant LCD ekraniuko, poto prie duomenų pridedam esamą laiką ir datą, atspausdinam lipduką (naudojant printerio kodus, ten visokie šriftai ir barkodai), ir reikalingą informaciją surašom į SD kortelę.
Didžiausia problema buvo tame, kad ne visada pasileisdavo SD kortelė. Pati fatfs sistema jau senai nebetobulinama, o ieškoti kitos patingėjau (yra dar kažkokia nano). Todėl tekos kelias dienas eksperimentuoti, kol radau visiškai gerą sprendimą. O reikėjo tik pasiskaityti pačių SD kortelių dokumentaciją.
Daryti reikia taip:
CS_HIGH();
for (n = 10; n; n--) xchg_spi(0xFF); /* 80 dummy clocks */// SD CARD RESET
CS_LOW();
xchg_spi (0b01000000);
xchg_spi (0b00000000);
xchg_spi (0b00000000);
xchg_spi (0b00000000);
xchg_spi (0b00000000);
xchg_spi (0b10010101);
O gaunasi va kas: tušti clock signalai esant aukštam CS inicializuoja pačios kortelės vidinę logiką, tačiau ne iki galo. Sekanti seka paprasčiausiai yra kortelės reset komanda- taip persikrauna SD kortelės viduriai ir ji pradeda atsiliepinėti į standartines komandas.
Viskas kaip ir veikia, tik stipriai atsilieka Holteko RTC. Matyt defektuotas kvarcas. Tačiau kol kas nespręsim šios problemos. Šiuo metu vyksta akyvus testavimas “in situ”.
Kokį čia tyrima atlieki su skaitikliais? vandens čia ar šilumos kokie?
Čia Lietuviška produkcija. Axis industries ar/ir Axioma produktai. Balti tai paprasti elektroniniai vandens skaitikliai, su radio ryšiu. O geltonas, tai labai įdomus: ultragarsinis vandens skaitiklis. Be jokių mechanizmų. Irgi elektroninis. Patinka galiojimas (batareikos irgi)- pas geltona iki 2031 metų turi veikti.
O projektų jokių nėra- paprasčiausias smalsumas. Atvežė iš vienos užlinkusios “butų priežiūros” organizacijos paletę šilumos, vandens skaitiklių, manometrų, temrostatų ir kitokios egzotikos. Tai keleta paėmiau paardymui, kad sužinoti kaip padaryti. Taip ir guli ant stalo.
Beja, didelės Liion batareikos mano aparate tai iš šilumos skaitiklio.
Tai turbūt jau nėra galimybiu tokių gudrių vandens skaitiklių sustabdyti kai kadaise padėdavo dideli elektromagnetai 😉
Prieš kokius 10-15 metų yra tekę kažką panašaus daryti su lygtai Intermec EasyCoder PM4i. Viduje buvo pakurta Basic programėlė, pasirinkdavai etiketės numerį (šabloną) iš svarstyklių per RS232 imdavo svorį ir spausdindavo paspaudus vieną mygtuką. Į failą rašyti nieko nereikėjo o ir dėjosi tik CF kortelė. Tiksliau jau nebepamenu kaip ten buvau pasidaręs. Bet galų gale dėl nepatogaus valdymo ir gana sudėtingo lipdukų formatavimo ir redagavimo (reikėjo labai daug info sukišti ir ta info dažnai keitėsi) užsakėm prirogramuot tokią sistemą prie buhalterinės programos. Tada dar MCU žinios tikrai nekokios buvo o ir taip, jei reikėtų pastoviai keisti daug teksto etiketėse, neįsivaizduoju paprasto varianto galutiniam vartotojui.
Šis zebra turi BASICa viduje. Tačiau man pagrinde reikėjo tik registruoti svorius į SD kortelę ir laiką, kada pasvėrė, Lipdukai tai tik papildomas patogumas ir vilionė, kad naudotusi svarstyklėmis. Svarstyklėse gali būti “alibi” modulis, bet jis pasirodė brangokas ir šiaip, prie esamų svarstyklių nelabai jungėsi. Baisiausia, kad jiems patiko sistema ir jie panorėjo pilnos integracijos. Gali taip gauti, kad reikės jungti prie pilnaverčio kompiuterio, nes reikia ir skanerio, ir info iš/į duombazę ir dar kažko. O tartasi buvo konkrečiai tik SD, laikas ir lipdukas prie dviejų svarstyklių (150 ir 1500kg svėrimo).
Klausimas ne visai į temą. Apie lipdukų spausdintuvą. Naudoju lipdukams senstelėjusį Intermec Easy Coder PC4 – po įjungimo paleidus spausdinti visada pirma išleidžia du tuščius lipdukus. Paskui galima kiek jau reikia. Kol neišjungi. Spausdinant nedažnai, nedaug ir nelaikant nuolat įjungto – juostos švaistymas išeina. Čia kažkoks įprastas feature? Visi taip elgiasi? Niekaip neatrandu jokios gelbėjančios opcijos…
Dėl “intermec” negaliu pasakyti, bet šitas Zebra panašiai elgiasi- jis taip išsimatuoja lipduko dydį. Kiek skaičiau Zebros instrukcijas- net nėra tokios funkcijos kaip lipduko dydžio nustatymas. Tuo tarpu industrinis TEC B472 (dabar jau Toshiba) kažkaip tokių bajerių neturėjo. Tačiau TECas turėjo jutiklius prieš printinimo zona ir matyt kitaip nustatydavo lipduko koordinates.