Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
(09-25-2017, 11:08 PM)Makso Wrote: Uspio sam nekako, ali i dalje mi nije jasno kao to radi?

Ispod lcd.prin(a); sam dodao samo lcd.print(" "); i to sada radi kako treba ali nije mi ništa jasno?

Pa zar nije ocigledno? Ispisao si tih "99" i onaj jedan " " (space/blank/prazan karakter ili kako ga već ko zove), ti je obrisao onu nulu na mjestu trece cifre, jer je ispisan preko te nule.

To znaci i da problem nisi rijesio, samo si ga ublazio. Ako nakon 990 ispises npr. 5, dobices na displeju:5 0 jer će biti obrisana druga devetka, ali ne i nula iza nje...

Dakle, kompletnu sirinu koju zauzima broj trebas ispuniti sa ispisom.
Reply
Ako se ne smisli nesto efektnije, jedna od sporijih komandi koja moze da posluzi je standardna C funkcija sprintf().
Da ne objasnjavam sta sve ta funkcija radi, potrazite opis (ima dosta parametara) samo cu ukratko da kazem da ona sluzi za razna "formatiranja" brojeva i stringova.

Ovaj problem sa brojevima moze da se resi izmedju ostalog tako sto se upisuju "vodece nule" (leading zero), tako da na primer broj "123" postane "000123" gde smo rezervisali 6 mesta za prikaz.

Primer dela programa za formatiranje brojeva za LCD bi izgledao ovako:

Code:
#include <stdio.h> //biblioteka, postaviti na pocetku programa
char moj_buffer [40] = ""; //definicija buffera duzine 40 karaktera (40 da bi stao text i za "scroll")
moj_broj = 123; //variabla koja drzi nas podatak

//formatiraj poruku, %06d znaci da ispise broj sa do 6 "leading zero", poravnati sa leve strane broja
//pogledaj dokumentaciju za sprintf() za ostale raspolozive formate
sprintf(moj_buffer, "Pos=%06d mm", moj_broj);

lcd.clear(); //ocisti sve sa LCD, cursor na 0,0
lcd.print(moj_buffer); //ispisi sadrzaj bufera na LCD u prvom redu
//trebalo bi da se pokaze na LCD "Pos=000123 mm"

Sprintf() funkcija moze takodje da prikaze i sa "leading space", dakle umesto nula da ispisuje space (prazan) karakter, moze sa leve strane, moze sa desne, moze svasta zato sam spomenuo da se obavezno pogleda dokumentacija za tu funkciju, svi racunari i sve platforme imaju tu C funkciju, kao i printf(), atoi(), itoa() ... na sve te funkcije ce da natrcite jednog dana ... ako dodjete do REGEXP, e onda ste na nekom semaforu skrenuli pogresno, trebalo je u suprotnu stranu kako god da izaberes : )
Stringovi se koriste samo kada se mora za prikaz u nama citljivom i "naviknutom" nacinu, kada ne mora, recimo za komunikaciju izmedju dva uredjaja uvek je bolje koristiti RAW/HEX format jer ima daleko vise prednosti nego string koji je limitiran sa svojim osobinama. Recimo samo kada se predje na UTF-8 to pravi takav problem da je to ludnica, nije vise jedan karakter jedan byte nego 2, 3, 4 ... sva logika koju imas se razbuca ako to na osnovnom nivou ne odradis kako treba, vazdan problema sa stringovima ...
Reply
(09-25-2017, 11:56 PM)ognjan Wrote:
(09-25-2017, 11:08 PM)Makso Wrote: Uspio sam nekako, ali i dalje mi nije jasno kao to radi?

Ispod lcd.prin(a); sam dodao samo lcd.print(" "); i to sada radi kako treba ali nije mi ništa jasno?

Pa zar nije ocigledno? Ispisao si tih "99" i onaj jedan " " (space/blank/prazan karakter ili kako ga već ko zove), ti je obrisao onu nulu na mjestu trece cifre, jer je ispisan preko te nule.

To znaci i da problem nisi rijesio, samo si ga ublazio. Ako nakon 990 ispises npr. 5, dobices na displeju:5 0 jer će biti obrisana druga devetka, ali ne i nula iza nje...

Dakle, kompletnu sirinu koju zauzima broj trebas ispuniti sa ispisom.

Probao sam sa (" ") jednim pritiskom space-a,i brojanje od 0-32767 i nazad do 0 i sve briše ne ostaju nepotrebni brojevi.
Reply
(09-26-2017, 09:41 AM)Makso Wrote:
(09-25-2017, 11:56 PM)ognjan Wrote:
(09-25-2017, 11:08 PM)Makso Wrote: Uspio sam nekako, ali i dalje mi nije jasno kao to radi?

Ispod lcd.prin(a); sam dodao samo lcd.print(" "); i to sada radi kako treba ali nije mi ništa jasno?

Pa zar nije ocigledno? Ispisao si tih "99" i onaj jedan " " (space/blank/prazan karakter ili kako ga već ko zove), ti je obrisao onu nulu na mjestu trece cifre, jer je ispisan preko te nule.

To znaci i da problem nisi rijesio, samo si ga ublazio. Ako nakon 990 ispises npr. 5, dobices na displeju:5 0 jer će biti obrisana druga devetka, ali ne i nula iza nje...

Dakle, kompletnu sirinu koju zauzima broj trebas ispuniti sa ispisom.

Probao sam sa (" ") jednim pritiskom space-a,i brojanje od 0-32767 i nazad do 0 i sve briše ne ostaju nepotrebni brojevi.

Naravno... a sad uzmi tu istu petlju pa povecavaj i umanjuj brojac po 100 umjesto po 1, pa onda po 1000 ...
Reply
(09-26-2017, 11:07 AM)ognjan Wrote:
(09-26-2017, 09:41 AM)Makso Wrote:
(09-25-2017, 11:56 PM)ognjan Wrote:
(09-25-2017, 11:08 PM)Makso Wrote: Uspio sam nekako, ali i dalje mi nije jasno kao to radi?

Ispod lcd.prin(a); sam dodao samo lcd.print(" "); i to sada radi kako treba ali nije mi ništa jasno?

Pa zar nije ocigledno? Ispisao si tih "99" i onaj jedan " " (space/blank/prazan karakter ili kako ga već ko zove), ti je obrisao onu nulu na mjestu trece cifre, jer je ispisan preko te nule.

To znaci i da problem nisi rijesio, samo si ga ublazio. Ako nakon 990 ispises npr. 5, dobices na displeju:5 0 jer će biti obrisana druga devetka, ali ne i nula iza nje...

Dakle, kompletnu sirinu koju zauzima broj trebas ispuniti sa ispisom.

Probao sam sa (" ") jednim pritiskom space-a,i brojanje od 0-32767 i nazad do 0 i sve briše ne ostaju nepotrebni brojevi.

Naravno... a sad uzmi tu istu petlju pa povecavaj i umanjuj brojac po 100 umjesto po 1, pa onda po 1000 ...

Aha, sad mi je jasnije, ja neću imati potrebu za toliko umanjenje broja, samo po 1.
Reply
Makso,

da bi ti bila jasna konverzija iz decimalnog brojnog sistema u string (niz karaktera), evo ti jednog opisnog programa koji to radi.
Code:
char *DecimalToString(unsigned int Broj, unsigned char Nule)
{
unsigned char KonvertovanBroj[5] = "     ";

KonvertovanBroj[0] = ((Broj % 10000) / 10000) + 0x30;
KonvertovanBroj[1] = ((Broj % 1000) / 1000) + 0x30;
KonvertovanBroj[2] = ((Broj % 1000) / 100) + 0x30;
KonvertovanBroj[3] = ((Broj % 100) / 10) + 0x30;
KonvertovanBroj[4] = (Broj % 10) + 0x30;

if(!Nule)
{  if(KonvertovanBroj[0] == '0')
    {        KonvertorvanBroj[0] = ' ';
              if(KonvertovanBroj[1]) == '0')
              {        KonvertovanBroj[1] = ' ';
                        if(KonvertovanBroj[2] == '0')
                        {        KonvertovanBroj[2] = ' ';
                                  if(KonvertovanBroj[3] == '0')
                                  {        KonvertovanBroj[3] = ' ';}
                         }
              }
    }
}

return KonvertovanBroj;
}

Program koji je prikazan ovde, je samo opisnog karaktera za razumevanje rada konverzije tipova i nije optimalno softversko resenje.
Reply
Pokušavam najprostoiji primjer sa MCP23017 konfigurisati pinove kao izlaze, ali bezuspješno...

Evo koda:
Code:
#include <Wire.h>
#include "Adafruit_MCP23017.h"
Adafruit_MCP23017 mcp;
int mcpreset = 12;

void setup() {
  mcp.begin(0x27);
  pinMode(mcpreset, OUTPUT);
  mcp.pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(mcpreset, HIGH);
  mcp.digitalWrite(0, LOW);
  delay(100);
  mcp.digitalWrite(0, HIGH);
  delay(100);
}
.

Čitanje pinova radi najnormalnije ali izlazi nikako.?
Reply
MCP23017 kao i MCP23S17 koji je SPI varijanta rade potpuno isto kao i GPIO port na PIC-u sa jos nekoliko dodatnih stvari unutra.
Ja ne znam sto taj code ne radi jer je glavni deo logike u samoj biblioteci, Adafruit inace imaju dobre biblioteke ali zbog potrebe da ih pisu za Arduino platformu code je prepun nekih gluposti koje mogu da prave razne probleme.
Dok ti se gore ne zove biblioteka "My_MCPlib", tj dok ne sednes i svaku funkciju iz te biblioteke analiziras i uporedis sa oficialnim DS i dok ne sednes to sve da rastumacis kako radi, bice tesko da napravis to sve.
Stvar je ta da je MCP izkonfigurisan na neki nacin, kakav tacno nemas pojma jer ne znas sta biblioteka radi, po DS se tacno zna sta treba uraditi korak po korak, to je problem koji trebas prevazici, dakle tumacenje DS-a i ti da izkonfigurises expander kako treba i da tacno znas sta si uradio.

Biblioteke za taj MCP sam pisao u C/C++, pisao sam ih u PHP a pisao sam ih i u JavaScript za bar jedno 4 razlicite platforme kontrolera/procesora : ) U sustini sve rade, neke "malo" brze neke malo sporije ali rade, samo kad znas sta trebas da uradis, i dok ne sednes i sam precukas sta ti treba nema nista, mozes samo da gledas u te Arduino funkcije() bespomocno ... ...

Spominjao sam vam TFT/Touch, isto sam poceo sa Adafruit bibliotekekom, stim sto ima cca 20x vise funkcija u biblioteci, isto tako nesto kao u par linija probao i nema pojma, seo i sve fukcije jednu po jednu prekucao da budu u mojim funkcijama i svaku usput proverio i uporedio sa DS i tamo tumacio logiku kako tacno treba da radi. Rezultat je jedan Mylib.c i Mylib.h koji su napisani tako da sam taj code portovao sa preko 90% na totalno drugu platformu, sa STM32 na XMOS multicore ... Tako to treba da se radi ako hoces da "vladas" nekom periferijom, sednes i istrazis sve do kraja i onda mozes da pravis sta hoces ...
Reply
Cemu taj sado mazo, mislim ok je to ali nema svako ni znanja ni vremena da pristupi problemu na taj nacin Smile
Radi uredno biblioteka ja je koristio, obrati paznju samo kako si adresirao taj mcp, 99% ti se ne slaze i2c adresa koju si definisao u softveru sa onom postavljenom na hw nivou.
Reply
Nedostaje ti komanda kojom bi postavio neki izlaz na MCP. Probaj:

Code:
mcp.digitalWrite(0, LOW);
Reply
Hehe, ja sam upravo naveo primer TFT-a koji je za mene bio u tom trenutku nova periferija, isto kao sto je za Maksi MCP nova periferija, ja sam se tih "novih periferija" nagledao vazdan, pricam iz iskustva da je bolje u strartu sesti i to rasclaniti na sastavne deleove (prvo "rasturiti" pa onda sklapati istu masinu : ), registar po registar, funkcija po funkcija, kada se uvezba ta procedura onda mozes resavati cca periferiju na dan, sve one rade u vecini na SPI ili I2C i to je to.

Uz ovo ako se ima onaj Salea Logic analizator (clon) ili DSO jos bolje tu nema prepreka, sve moze da se debagira do zadnjeg bita.
Ili recimo Si5351 programibilni oscilator, ja sam terao taj IC pre nego sto su se pojavili Adafruit i sa modulima i sa bibliotekama i to nekoliko godina pre njih, tek kada su mogu slobodno da kazem "videli od mene" onda je pocela cela pomama oko tih modula i oscilatora ... Ali nema veze, ucestvujem u toj Open Sourse zajednici i delim i prihvatam neka resenja ...
Reply
Tražio sam dok nisam našao šta je uzrok, kada sam sve prebacio na protoboard i kada spojim Reset pin direktno na 5V sa kojim se i Arduino napaja onda radi, a kada vratim preko pina 12 sa Arduina onda neće, na tom pinu iz Arduina imam 3.7V kada je aktivan, ali MCP ne reaguje? A kada korisitm taj pin sa Arduina za reset radi mi čitanje, tj. kada MCP koristim kao ulazne pinove a za izlazne ne radi?

EDIT:

Našao sam šta sam zabrljao, sad mi proleti neka munja kroz glavu Big Grin  i sjetim se šta bi bilo uzrok, Reset pin u kodu izbacim iz loop-a i prebacim u setup, jer sam skontao (malo sporije) da prođe inicijalizacija MCP-a a Reset nije aktivan i onda neće, a to sam isto tako skontao da se Arduino (u mom slučaju) mora resetovati da bi MCP opet očitao stanje Reset pina, jer onako u radu ako se Reset prebaci na LOW pa ponovo na HIGH neće.
Reply
Mozes i u toku rada da ga resetujes ali onda moras posle toga opet da uradis init mcp-a sa mcp.begin(0x27); ....
Ja sam radio neki 12kanalni dc power switch sa mcp23017 i ono sto me je odusevilo , a i zasto sam bas njega i uzeo da koristim, sto ako dodje do reseta samog atmega na arduinu, to ne menja stanja na izlaznim pinovima MCP-a tako da sve od periferija sto se kontrolise iza mcp ostaje na svojim zadatim stanjima.
Reply
(03-05-2018, 05:03 PM)ddanijel Wrote: Mozes i u toku rada da ga resetujes ali onda moras posle toga opet da uradis init mcp-a sa  mcp.begin(0x27); ....
Ja sam radio neki 12kanalni dc power switch sa mcp23017 i ono sto me je odusevilo , a i zasto sam bas njega i uzeo da koristim, sto ako dodje do reseta samog atmega na arduinu, to ne menja stanja na izlaznim pinovima MCP-a tako da sve od periferija sto se kontrolise iza mcp ostaje na svojim zadatim stanjima.

@ddanijel,

To inače važi za bilo koji in/out ekspander, od šift registra pa do ovih sa nekim tipom serijske komunikacije (UART, I2C, SPI...).
Svaki od njih će ostati "zaleđen" u poslednjem stanju tako da oduševljenju nema mesta.

Oduševljenje bi moglo jako da splasne ako se na primer resetuje MCU dok neka mašina sa potiskom od par stotina tona juri ka ruci radnika koji je udario po SVE-STOP pečurci, sa iskrenom verom da će je zaustaviti :-)
MCU se upravo resetovao iz Marfijevih razloga, a MCP drži taj ventil uporno kao terijer :-).

Nekoliko stvari koje su pravilo dobrog korišćenja tih stvarčica:

- Šanse da se MCU resetuje sam od sebe treba svesti na krajnji minimum. To se obezbđuje maksimalnom imunizacijom mikro okruženja gde "boravi" MCU. Obično se to radi sa što kraćim vezama oko MCU i niskokapacitativnim galvanskim rastavljanjem svega što odlazi daleko od MCU. Naravno, ima na stotine mera oko toga...
 
- Ako se ipak resetuje, mora da sa svojom "smrću" da obavezno obezbedi "smrt" svojih periferija i to na takav način da ostanu u najbezbednijim stanjima po ljudstvo, potom po mašineriju.

Neki od načina za izvođenje toga su:

1) Vrlo, vrlo pristojan stepen sigurnosti:

- Jedan od pinova MCU se prilikom inicijalizacije proglašava izlazom, stavlja se odmah u LOW stanje i ostaje tako do kraja postojanja "života" MCU.  Obezbeđuje mu se pull-up otpornik. Taj pin u tom LOW stanju drži aktivnim NAPAJANJE ekspandera, na primer preko nekog PNP tranzistora ili slično.
U slučaju reseta MCU, svi pinovi inicijalno postaju ulazi i imaju visoko impendansno stanje. Dotični pin takođe, i tim aktom isključuje napajanje ekspandera.

Tu naravno, kao i svuda uostalom, postoji moguća zamka.
Napajanje ekspandera se može održati u dovoljno opasnom stanju kroz komunikacione linije i njihove pull-up otpornike, ako postoje.
Tačnije, napajanje jezgra ekspandera, posebno onih koji ispravno rade od 2-5V, očuva se kroz interne klamp diode na samom ekspanderu, kuda uđe dovoljno struje da ga održi iznad 2V5, tj. u radnom stanju.
Prilikom konstrukcije takvog sistema se serijski na komunikacione linije stavljaju otpornici reda koju stotinu oma, koji osim željenog efekta inače jako lepo ispeglaju moguće gličeve u komunikaciji.
Potom se izvrši test tog reset sistema i ukoliko napajanje još uvek bude iznad 1V, onda se paralelno napajanju ekspandera dodaje i bleeder koji će zasigurno oboriti ispod 1V u tom sigurnosnom stanju.

2) Visok stepen sigurnosti:
- Hardverski retrigerabilni monostabilni multivibrator, sa AC spregom vezan za jedan od pinova MCU, iz kog mu na svakih x milisekundi (prema bezbedonosnoj potrebi) stiže watch-dog impuls koji monoflop drži u aktivnom stanju, obezbeđen u nekoj od time interrupt rutina u MCU.
Izostanak tog impulsa neopozivo resetuje monoflop koji drži napajanja svih periferija i izvršnih organa.

Postoje i još viši stepeni obezbeđenja ali za sada je dovoljno za upoznavanje sa tom temom.

Zlatna pravila su da se sve linije obezbeđenja drže N.C. (normally closed) konfiguracijom tastera, kontakata i ožičenja, tj. u slučaju kidanja linije sve odlazi u stop stanje.
Po mogućstvu treba "odseći" i power napajanje u svim sisemima koji ostaju u bezbednom stanju sa neaktivnim izvršnim organima.
-------------------------------------------
Na žalost, postoje i idioti od konstruktora mehanike, pneumatike i hidraulike na mašinama (naravno i elektrike, da mi ne kukaju mašinci :-), koji su se nekom volšebnom metodom "provukli" na tržište sa svojim "znanjem".

Oduvek su postojali, ma iz koje zemlje poticali, tj. nagledao sam se tih s*anja kod mnogih "Nemac, Japanac, Liliputanac to napravio" mašina.

Mnogo popi*dim kad mi neko pomene nešto u fazonu "Nemac to napravio", ili ma koji drugi predstavnik nekog naroda, mada najčešće čujem za tog "Nemca", kao da je jedan Nemac sve mašine napravio :-).

Nama je bio problem dok smo napravili prvog Nemca. Posle tog imamo daleko manje probleme sa tehnikom :-)
Dakle, za više od tri decenije rada, nagledao sam se budalaština sa svih kontinenata (a i sam sam ih pravio :-), te je zaključak da glupost nema geografskih ograničenja :-)
........................

Evo upravo se bavim remontom upravljanja mašine kod koje postoje dva hidraulična ventila koji u pasivnom, beznaponskom stanju održavaju visok pritisak na dve od ukupno četiri pumpe, potencijala 110KW!


.pdf    R6000_hidraulic.pdf (Size: 523,75 KB / Downloads: 12)

"Pametnjaković" od konstruktora, iz Italije (1988 godina, "Italijan napravio" :-) je smetnuo sa uma da će inercija dva elektromotora od po 55KW, koje prinudno isključim iz bilo kog razloga, produžiti kretanje alata sa potiskom od 1200 tona  bar još za 20 cm po njihovom isključenju.
Naravno da ću pri tom držati u aktvnom stanju ta dva kritična ventila, ali šta ako nestane napajanja??

U prevodu: u slučaju nesrećne koincindencije Marfijevskog tipa, da je "ljudski faktor" premostio inicijalnu hidrauličnu zaštitu, gurnuo ruku tamo gde ne treba, ukapirao svoje s*anje pa udario pečurku, ako baš u tom momentu nestane struje, neće mu se majka veseliti.

Tu ja nikakvim upravljanjem ne mogu ništa učiniti, bez obzira što sam sve učinio da ostane bezbedno ako postoji napajanje.
Ostaje da verujem da se takav splet okolnosti neće dogoditi, jer bi remont tog dela sistema na ono kako bi trebalo da izgleda koštalo koliko i mašina u trenutnom stanju, a nema spremnih da plate to...
----------------------

Šalu na stranu, pošto to nisu stvari za šalu.
Postoji određen broj mašina koje imaju opasne hodove u pasivnom beznaponskom stanju izvršnih elemenata i takve su velika opasnost po ljudstvo, zahvaljujući "pametnim" konstruktorima.

Na sve moguće načine prvo treba voditi računa o bezbednosti rukovaoca, potom svega ostalog, ako je ikako moguće to izvesti.

Nema veze da li je Arduino, PIC, STM32, relejna logika ili bilo koja druga platforma u pitanju. Potreba za čuvanjem rukovaoca je univerzalna.

Nadam se da će ovaj tekst biti od koristi, kako tebi tako i drugima...

Pozdrav drugar,
Macola
Reply
Mene i dalje drzi odusevljenje jer za ono zasta meni treba , upravo tako treba i mora da radi. Radi se o napajanju odredjenih servera koji ne smeju zbog reseta arduina da ni u kom slucaju budu iskljuceni sa napajanja. Sistem je bio odradjen namenski da po potrebi moze da se neka periferija resetuje skidanjem sa napajanja (remote power on/off) , ali da ne sme incidentno ni u kom uslovu da dodje da iskljucenja. Tipa kontrola 10-ak servera udaljenih od mene preko 1000km, taman posla da zbog zaglupljivanja arduina se sve pogasi, a inace su svi na upsevima i agregatima. Svako pravi onako kako mu treba. Onaj sto pravi za masinu/ubicu naravno da ce drugacije da koncipira.
Inace ne vidim cemu sva ona pisanija iznad, meni tekst svakako nije od koristi (bez uvrede) jer nisam od juce u ovome, a i lepo sam napisao izmedju zareza citiracu se:
" a i zasto sam bas njega i uzeo da koristim" ...
Znaci ako se lepo procita moj tekst sa razumevanjem shvatice se da nisam slucajno odabrao bas to kolo, nego da su potrebe bile za njime, tako da zaista ne vidim cemu predavanje na tu temu.
Ne kao kinezi sa sonoff remote prekidacima koji na svaki reset esp-a zviznu i iskljuce reley. Pa ono ni za sijalicno grlo ne bih koristio, a ne da mi ide napajanje za servere i osetljive periferije koju su 24/7/365 na svi mogucim rezervnim napajanjima.
Reply
Pa, nekako sam predosećao da ću biti pogrešno shvaćen...

Nije meni bio nikakav cilj da kritikujem izvođenje.
Štaviše, za tu svrhu je to jedno od rešenja koje za izvesnu nijansu povećava pouzdanost.

I dalje tvrdim da istu osobinu lečovanja imaju i ostali ekspanderi izlaza, od najobičnijih šift registarara pa preko onih PCFxxx na I2C, pa do tih SPI MCPxxx.
MCP ekspanderi nemaju posebne i specijalne osobine u odnosu na ostale ekspandere, drugih proizvođača.

Poput Atmelovih ili  bilo kojih drugih MCU, takođe se i MCP ekspanderi mogu resetovati nekom snažnijom elektromagnetnom smetnjom i završiti u stanju sve off.
Nisu posebno "čvršći" od bilo kojih MCU u istom naponskom rangu i sa istim marginama šuma.
Iz tog razloga incidentno može doći do isključenja, lokalno, zbog samih ekspandera i pored sasvim regularnog rada Atmel MCU.

Oduševljenje MCP ekspanderima (bar meni) i dalje ne stoji jer će od njih u takve svrhe (pouzdano držanje stanja) nekoliko desetina puta biti pouzdaniji: običan samodržeći relej ili tiristorski optokapler.

Njih ne može oboriti glič u napajanju od 1uS i amplitude par volti...

Ekspanderi i mikrokontroleri imaju kao osnovne elemente gomilu flip-flopova koji čuvaju potrebna stanja.
Pošto se sastoje od maltene istih "sastojaka" blaga prednost ekspandera je samo u njegovoj manjoj složenosti funkcija i manjem broju komponenti i ništa više od toga.

---------------------------------------------

Veoma mi je drago da tebi ne koristi moje "predavanje" jer se radujem ljudima koji dobro poznaju svoj posao.

Međutim, značajan procenat ljudi koji počnu raditi sa mikrokontrolerima i naravno ekspanderima, kada im zatreba više ulaza/izlaza, okušaju se na kontroli nekih mašina, bile one malecke ili velike.

Ljudsko biće može generisati koju stotinu vati energije i to su naša ograničenja.
 
Svakodnevno posežemo za kontrolama snaga koje prevazilaze naše sposobnosti, poput jednog "konja" za volanom koji blagim pritiskom na pedalu gasa razjari par stotina "konja" i podcenjivanjem te sile ubije nekog ili sebe...

Moje "predavanje" će koristiti nekom jer postove o Arduinu i ekspanderima čita mnogo ljudi, a citat tvojih rečenica ne znači neku oponentnu repliku tvojoj izjavi, čak naprotiv.

Iz tog razloga mi nemoj zameriti i ako se ne baviš tim od juče. Svi mi učimo čitavog života.

Pozdrav,
Macola
Reply
Ne zameram, a i jasno mi je odakle celo izlaganje na ovu temu, a to je da
posmatras problem sa strane jednog "visokostrujasa" i coveka koji svakodnevno radi sa par stotina kw.
Pominjes releje, zatim tiristore koji meni ne bi radili posao jer nigde nemam naizmenicnu komponentu koju prekidam.
Sve je to ok, meni se ni arduino ne resetuje ali u svakom slucaju ono sto mi je trebalo to sam dobio, 12 kanalni DC power on/off koji je stabilan, i mogu da uradim upgrade fw u programu arduina bez da dotaknem drugu stranu i poiskljucujem kojesta. Znaci meni je primarno stanje "ON" i tako treba da bude 24/7/365 , sem u retkim situacijama kada server odbije saradnju i da ne bih nikoga slao odradim remote power off/on, a te situacije su bas bas retke.
Suma sumarum 12 kanala iz mcp je islo na 6 duplih P-mos fetova koji prekidaju 12v liniju koja ide na mini servere, pa ti sad vidi koliko smo daleko i koliko nam se razlikuju "talasne duzine" , a samim tim i resavanja i pristup eventualnim problemima.
btw. prve letcheve sam koristio jos negde davne 1995te godine, i odusevljenje koje sam izrazio mozda nije adekvatan izraz, pa si ocito pogresno shvatio celo moje izlaganje na temu.
Svakako nema ljutnje, ovde smo da se pomognemo, a pogotovu na tebe covek i ne sme da se ljuti niti sta da ti zameri jer kada bi ostali dali samo 10% doprinosa zajedinici od onoga koliko dajes ti , gde bi nam kraj bio.
Reply
@ddanijel,

Evo nađoh malo vremena..


Nisam visokostrujaš već se bavim: analognom elektronikom, SMPS, digitalnom elektronikom, programiranjem MCU (PIC i STM32) i njihovom implementacijom u proces, ukratko proširena verzija procesnih kontrola.
Pri tom mi je neophodno pristojno poznavanje: pneumatike, hidraulike, motornih pogona i ostalih grana mašinstva, kao i mnogo vrsta proizvodnih procesa.

Kad sam pomenuo ekstremnu pouzdanost na smetnje i pomenuo releje, mislio sam na mikroreleje u DIP ili sličnom kućištu, a oko tiristorskih optokaplera sam mislio na ovo (sa već odabranim P Mosfet kao power izvršiteljima):


.pdf   Latch.pdf (Size: 12,55 KB / Downloads: 22)

Kada se MCU resetuje, svi in/out pinovi odlaze u tri-state i obe predložene verzije Latch ne promene zatečeno stanje, čak i sa veoma snažnim energetskim udarom.
Čisto jedna od opcija razmišljanja na tu temu, bez obzira da li će je iko primeniti...

Sticajem okolnosti sam bio prinuđen da upravljam spravama od milivata do megavata te otud i posmatranje u tom rasponu "signala" i opasnosti koje slede uz to :-).

Pozdrav drugar,
Macola
Reply
Meni je uvijek interesantno citati Macoline tekstove, posebno one duze.
Posebno ovo jer bas imam zadatak da otkrijem ne samo reset nego zaglupljivanje ili kvar bilo procesora bilo neke periferije, i nesto sam skockao,
ali bih volio cuti Macolino misljenje ili ideju.
Stvar je na komsijskom forumu  : http://www.elitesecurity.org/t498549-kon...spravnosti
E da, stvar ima elektrolit odvojen diodom od napajanja, a kapacitet elektrolita je dovoljan da okine ventil, tako da i kvar napajanja ( baterije) nece zaustaviti zatvaranje ventila u nuzdi.
Stvar radi, probano.
Reply
Veselinoviću,

Voleo bih saznati malo više podataka o samom punjenju rezervoara, poput:

- da li je tečnost u pitanju?
- da li je dopunjavanje u pitanju ili kompletno punjenje po ispražnjenom stanju?
- šta to pogoni bistabilni ventil? Tj. da li se koristi hidraulični pritisak za prelazak u drugo stanje, započeto elktromagnetom ili sličnom električnom spravom (kako ti reče, zalihom iz elko)? Ili je možda nešto drugo u pitanju?
Pritisak pare možda ili neko drugo snabdevanje samog ventila?
- ako je dopunjavanje, da li je kontinualno, pulsno proporcionalno ili šta već drugo?

Sviđaju mi se tvoji niskopotrošni monoflopovi, ali mislim da se sećam jednog zero-power rešenja od pokojnog Jimm Williams-a i u sledećih pola sata ću ti to iskopati iz moje arhive. Stvarno sam zaboravio to briljantno rešenje i moraću da se podsetim literaturom.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)