Gilbert Sparios Postat Iunie 26, 2021 Partajează Postat Iunie 26, 2021 Cu toate ca nu vorbesc despre exact o placa de dezvoltare Arduino, ma refer pe platforma Arduino IDE cu un 328PU. Dar se poate considera doua module arduino uno in discutie. care ar fi cea mai simplista metoda si cu un consum mai mic de resurse pentru a comunica de la modulul A la modulul B un status pe 1 fir exceptând UART si I2C hardware.. Statusul e doar un byte sau un număr de la 1-9, pr care modulul B trebuie sa-l primească. Eu m-am gândit ca cel mai simplist ar fi sa folosesc un timer cu frecventa variabila. de ex pentru status 1 frecventa de 100Hz, 2=110 Hz.. etc modulul doi va folosi pulseIn pentru decodare frecventa ai cam atat. exista totuși o alta varianta mai minimalista?.. Link spre comentariu
Mircea Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Cum 328PU nu are DAC, daca iei iesirea PWM si odata ai 50% factorul de umplere, si altadata 100%, atunci simulezi un DAC. Citesti pe ADC la capatul celalalt. Ca sa nu folosesti functii care au nevoie de timp sa se execute. Link spre comentariu
nico_2010 Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Citeste despre libraria OneWire. Link spre comentariu
mihaicozac Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Cu PulseIn poţi face numărător de impulsuri care să reprezinte statusul, adică trimiţi 3 impulsuri pt. status 3, sincronizarea se face dacă un anumit timp nu se mai primeşte nimic. Adică pt. impulsuri cu perioada de 1ms aştepţi 10ms de ex. apoi faci strobe in Link spre comentariu
Liviu M Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Dacă tot ce vrei e număr mic de sârme, poți folosi liniștit uart. Un cip doar transmite, unul doar recepționează. La cel care doar transmite legi eventual rx la + printr-o rezistență. Link spre comentariu
Vizitator Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Daca vrei neapărat să inventezi roata , ai putea să utilizezi ceva gen Codul Morse. Link spre comentariu
va_cristi Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Acum 15 ore, Gilbert Sparios a spus: ... care ar fi cea mai simplista metoda si cu un consum mai mic de resurse pentru a comunica de la modulul A la modulul B un status pe 1 fir exceptând UART si I2C hardware.. ... Poti sa te foloseste de exemplele cu modulele RF, 433Mhz de exemplu, care au un singur pin, DATA. Am postat asa ceva pe forum mai de mult, cu exemplu, dar din anumite motive, am iesit de pe forum si am pierdut controlul la vechile postari. Link spre comentariu
mihaicozac Postat Iunie 27, 2021 Partajează Postat Iunie 27, 2021 Acum 4 ore, Liviu M a spus: Dacă tot ce vrei e număr mic de sârme, poți folosi liniștit uart. Un cip doar transmite, unul doar recepționează. La cel care doar transmite legi eventual rx la + printr-o rezistență. Aşa am făcut eu la un proiect cu un 328P care controlează starea unei baterii şi raportează unui ESP32 pe serial. Tx ATMega la Rx ESP32 şi gata legătura. Link spre comentariu
Gilbert Sparios Postat Iunie 28, 2021 Autor Partajează Postat Iunie 28, 2021 (editat) transmisii am făcut si nu e vorba ca nu as ști dar. modulul A care ar fi Tx-ul, e cu timpul de execuție la critic. chiar nu merge cu transmisia fara sa fie afectate cadentele, timerele.. o sa incerc si cu librăria de la rs485 a lui Cameron dar dacă îmi aduc aminte bine si acolo am cli() pe undeva. asa cum am spus. UART nu se mai poate fizic. Editat Iunie 28, 2021 de Gilbert Sparios Link spre comentariu
nico_2010 Postat Iunie 28, 2021 Partajează Postat Iunie 28, 2021 Iti mai spun odata, ca poate nu ai citit postarea anterioara: cauta libraria OneWire. Are nevoie de timpi stricti,dar nu foloseste timere. Link spre comentariu
Gilbert Sparios Postat Iunie 28, 2021 Autor Partajează Postat Iunie 28, 2021 vazusem dar...stiu ca are delayMicroseconds(). o sa incerc sa vad in ce masura imi strica aplicatia. daca nu...merg pe ideea ...cu care-am inceput... Link spre comentariu
core Postat Iunie 28, 2021 Partajează Postat Iunie 28, 2021 Poate te ajuta: https://en.wikipedia.org/wiki/Manchester_code Link spre comentariu
Marin1960 Postat Iunie 28, 2021 Partajează Postat Iunie 28, 2021 One Wire are delayMicroseconds(), dar le poti inlocui cu micros() sau millis(), astfel incat programul tau sa nu aiba intarzieri. Fiind un 1wire personalizat, poti avea timinguri mai flexibile, un reset urmat de 3-4 biti (asta iti ofera deja 8-16 stari transmise) fiind suficient, cred, pentru ceea ce vrei. One Wire este destul de usor de implementat, fie cu delay-uri, fie cu micros sau millis. Link spre comentariu
Vizitator Postat Iunie 28, 2021 Partajează Postat Iunie 28, 2021 (editat) 5 hours ago, Gilbert Sparios said: modulul A care ar fi Tx-ul, e cu timpul de execuție la critic. Poate dacă ai posta ceva din codul sursa utilizat, ideiile ar fi mai aproape de ce doresti. Si UART si 1Wire (sau alt protocol) se pot face si fără delay dacă ai ceva timer pornit si nu opresti intreruperile (prea mult si des. sau mai bine deloc). Nu am glumit (prea tare) cand ti-am propus mai sus "Codul Morse". Editat Iunie 28, 2021 de Vizitator Link spre comentariu
Gilbert Sparios Postat Iunie 28, 2021 Autor Partajează Postat Iunie 28, 2021 (editat) eu cred ca raman la ce am gandit initial. cred ca e cea mai simplista metoda. modulul A nu trebuie decat sa comute un pin intr-un timer care oricum face si altceva o frecventa acolo..si nimic mai mult. cred ca ar fi ok si cu micros() in functie apelata in loop() la frecvente de 100Hz..1K, asta nu neaparat. iar modulul B, nici macar nu trebuie sa sincronizeze, citeste cand vrea el ce frecventa e pe pinul X si asta e tot. daca ar fi fost nevoie sa trimit o structura sau un byte* poate s-ar merita dar pentru ce vreau eu zic ca e cel mai minimalist. de fapt..cred ca o sa incerc tone() cu timer2.. /* 0x00 NO ERROR / STANDBY 0x01 MOTOR ERROR 0x02 OVERVOLTAGE 0x03 UNDERVOLTAGE 0x04 TO MANY RETRY-FAIL 0x05 OVERHEAT 0x06 SENSOR ERROR */ /*-------------------------------------------------------------------------------------------*/ void status_output(byte ERRORCODE) { static byte prevERROR = ERRORCODE; if (prevERROR != ERRORCODE) { prevERROR = ERRORCODE; noTone(PIN_STATUS); if (ERRORCODE == 0) tone(PIN_STATUS, 100); // NO ERRORS / STANDBY if (ERRORCODE == 1) tone(PIN_STATUS, 120); if (ERRORCODE == 2) tone(PIN_STATUS, 140); if (ERRORCODE == 3) tone(PIN_STATUS, 160); if (ERRORCODE == 4) tone(PIN_STATUS, 180); if (ERRORCODE == 5) tone(PIN_STATUS, 200); if (ERRORCODE == 6) tone(PIN_STATUS, 220); } } /*-------------------------------------------------------------------------------------------*/ Editat Iunie 29, 2021 de Gilbert Sparios Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum