Jump to content
ELFORUM - Forumul Electronistilor

mihaicozac

Membru activ
  • Content Count

    577
  • Joined

  • Last visited

Community Reputation

31 core_reputation_level_4

About mihaicozac

  • Rank
    core_member_rank_2
  • Birthday 04/11/1965

core_pfieldgroups_2

  • core_pfield_6
    Luftenberg, Austria

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Înseamnă unsigned integer pe 32 biţi, în Arduino corespunde la "unsigned long". !Int" are doar 16 biţi.
  2. Ai nevoie de un convertor de nivel cu operaţionale începând cu a doua celulă. Cam ca în desen. În felul ăsta o să ai Tensiunea celulei respective pe fiecare ieşire. Poţi folosi chiar şi multiplexor analogic dacă ai multe celule, că viteza de citire nu e critică în aplicaţia de faţă. Rezistenţele sunt toate de aceeaşi valoare, orientativ 100k ar merge foarte bine. Ai grijă doar la tensiunea maximă de alimentare a operaţionalelor, să nu fie depăşită valoarea de catalog. LM324 suportă parcă 40V.
  3. Cu ani în urmă am realizat o comandă pt. luminile de afară, numărul de la casă şi cele perimetrale, folosind un Pro Mini şi o fotorezistenţă pe post de detector de lumină. La lăsarea întunericului se aprinde treptat numărul, apoi dacă se primeşte semnal de la unul din senzorii IR pornesc şi luminile mari, care apoi se sting progresiv după un timp de aşteptare. Poate te ajută programul meu, ar fi câteva modificări mici de făcut la valori. int IR2 = 2; int IR3 = 3; int IR4 = 4; int IR5 = 5; int counter; int lightValue; int dawn = 9; int pwm = 10; int dawnValue = 0; int pwmValue = 16; int IR = 0; int light = 0; void setup() { pinMode(IR2, INPUT); pinMode(IR3, INPUT); pinMode(IR4, INPUT); pinMode(IR5, INPUT); counter = 0; } void loop(){ IR = (digitalRead(IR2) || digitalRead(IR3) || digitalRead(IR4) || digitalRead(IR5)); lightValue = analogRead(A0); if(lightValue < 68) {light = 1;} else if(lightValue > 96) {light = 0;} if(light) {dawnValue += 8; if(counter) {pwmValue +=32;} else {pwmValue -= 8;} pwmValue = constrain(pwmValue, 16, 255); } else {dawnValue = 0; pwmValue = 0; counter = 0;} dawnValue = constrain(dawnValue, 0, 255); if(IR) {counter = 240;} counter --; if(counter <= 0) {counter = 0;} analogWrite(dawn, dawnValue); analogWrite(pwm, pwmValue); delay(50); }
  4. Pt. delay sub 1ms se foloseşte funcţia delayMicroseconds(). La senzorul ăla trebuie să citeşti mai atent, eu am văzut că transformatorul e de tensiune nu de curent şi scoate tensiune alternativă de 2,5V pt. 230V la reţea.
  5. Practic acolo ai nevoie de 2 ori de aproximativ acelaşi cod plus un comparator, adică un numărător primeşte impulsuri de la traductor, celălalt de la butonul tău sau 2 butoane UP şi DOWN, din care selectezi o valoare care-ţi convine. Celălalt numărător (practic o variabilă unsigned integer) incrementează în ritm cu impulsurile releului, iar când cele 2 valori coincid se întâmplă 2 lucruri, primul numărătorul extern se resetează, al doilea o ieşire dă o tensiune spre ceva ce vrei tu. În principiu ai avea nevoie de 2 afişaje LED separate sau unul LCD pe care pe fiecare rând afişezi câte unul din numărătoare. Codul e foarte simplu de scris.
  6. Eu am folosit la un aparat medical un display de 7" rezoluţie 800x480 echipat cu controllerul FT813 de la Riverdi, ăsta vine împreună cu o bibliotecă pt. scrierea rapidă de aplicaţii, însă eu am folosit altă bibliotecă scrisă de un neamţ, care mi s-a părut mai intuitivă şi oferă rezultate bune. Procesorul utilizat este ESP32, conexiunea cu display-ul SPI.
  7. Treabă are doar dacă ai date stocate în flash şi le accesezi sau scrii în timpul programului, că la ESP-uri EEPROM-ul este emulat în flash (ceea ce e o porcărie). De pierdut nu se pierd date doar stai până se eliberează bus-ul, asta înseamnă că timpul de execuţie al buclei va fi variabil de la o tură la alta.
  8. Cred că există ceva limitări la SPI pin sharing. De ex. nu prea poţi folosi afişaje care au rate mari de refresh sau vrei să trimiţi multe date spre ele, cum sunt cele grafice gen 128x64.. Iar dacă ai arii stocate în flash cu parametrul PROGMEM şi sunt accesate periodic asta va interfera cu display-ul şi pot apărea pâlpâiri sau afişări eronate. Dacă ai nevoie de mai mulţi GPIO poate ar fi mai comod să foloseşti un ESP32, mai ales că diferenţa de preţ e foarte mică.
  9. Ai dreptate... trebuie modificat. Cred că aşa a r fi corect: bool buttons[4]; void setup() { for (i = 0; i < 4; i++) { pinMode(i + 2, INPUT); pinMode(i + 6, OUTPUT); } } void loop() { for (int i = 0; i < 4; i++) { if (digitalRead(i + 4)) { for (int j = 0; j < 4; j++) buttons[j] = false; buttons[i] = true; } digitalWrite(i + 6, buttons[i]); } } Mai e varianta cu mărirea ariei de biţi în codul vechi, de ex. buttons[6]...
  10. Am 2 typos în cod, dar scris corect acesta se compilează, mai daparte nu am stat să verific. Codul complet ar fi ăsta: bool buttons[4]; void setup() { for (i = 2; i < 6; i++) { pinMode(i, INPUT); pinMode(i + 4, OUTPUT); } } void loop() { for (int i = 2; i < 6; i++) { if (digitalRead(i)) { for (int j = 2; j < 6; j++) buttons[j] = false; buttons[i] = true; } digitalWrite(i + 4, buttons[i]); } }
  11. bool buttons[4]; for (int i = 2; i < 6; i++) { if (digitalRead(i) { for (int j = 2; j < 6; i++) buttons[j] = false; buttons[i] = true; } digitalWrite(i + 4, buttons[i]); } Asta ar fi o idee de cod cu 4 intrări pinii 2-5 şi 4 ieşiri pinii 6-9. Pinii trebuie declaraţi separat cu pinMode şi restul, ăsta este doar algoritmul de selecţie. La fiecare apăsare de buton se şterg toţi biţii din arie şi se rescrie doar cel corespunzător butonului apăsat. Apoi se trimit stările pe ieşiri.
  12. merge debug-ul pe platform.io la ESP-uri? că ultima dată când am încercat zicea că încă nu e implementată funcţia.
  13. Eu aş încerca aşa ceva: for (int i = 0; i < 16; i++) { digitalWrite(mnch, bitRead(manchester16Bits, i)); if(i % 2 = 0) { digitalWrite(data, bitRead(dataByte, i)....... ... ... digitalWrite(clock, HIGH); } else digitalWrite(clock, LOW); } Desigur ]mpreună cu restul codului de declarare şi conversie în Manchester. Semnalele nrzl şi restul inclusiv un clock sincron vor fi generate tot la 2 incrementări ale lui i. Folosire fără delay! oricum nu cred că ajunge la 2MHz cu i-ul la 16, teoretic ar fi undeva la 500kHz cu Arduino Uno.
  14. Vrei clock-ul procesorului la 2MHz sau cel al semnalului de ieşire?
  15. Cu portul pe direct e mai dificil, că nu ştim ce placă şi procesor foloseşte.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.