Jump to content
ELFORUM - Forumul Electronistilor

core

Membru activ
  • Content Count

    278
  • Joined

  • Last visited

Community Reputation

8 core_reputation_level_3

About core

  • Rank
    Developer
  • Birthday 07/11/1978

core_pfieldgroups_2

  • core_pfield_6
    Iasi

Recent Profile Visitors

306 profile views
  1. La final, mai afisezi un zero, sunt curios.. de ce il mai pui acolo? Mi se pare putin confuz ca ai pus in acelasi post doua solutii diferite la aceasi problema, cu citirea pe ADC. Eu eram curios ca vad unde apare in schema generatorul de zgomot, ca sa vad ca e de fapt un ADC pe 22 de biti care nici nu mai are nevoie de oversampling.
  2. Da, am folosit xc8. Am facut modif si pentru mikroc, dar pe simulator ledurile clipesc mai repede la mine, fata de compilarea pe xc8. O fi ceva in neregula cu setarea timer-ului. E xc8, timpul de clipire corespunde. #define BUTON RA0_bit #define INPUT 1 #define OUTPUT 0 #define APASAT 0 #define NR_JOCURI 4 #define SIZE( x ) ( sizeof( x ) / sizeof( x[ 0 ] ) ) struct Step { unsigned char portData; unsigned short time; }; static volatile unsigned int i; static volatile unsigned int s_pos; static volatile unsigned int counterMs; const struct Step c_joc1[] = { { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, { 0xCC, 300 }, { 0x33, 300 }, { 0x55, 300 }, { 0xAA, 300 }, { 0x55, 300 }, { 0xAA, 300 }, { 0xCC, 300 }, { 0x33, 300 }, { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, { 0xF0, 500 }, { 0x0F, 500 }, { 0x99, 500 }, { 0x66, 500 }, { 0x99, 500 }, { 0x66, 500 }, { 0x80, 100 }, { 0xC0, 100 }, { 0xE0, 100 }, { 0xF0, 100 }, { 0xF8, 100 }, { 0xFC, 100 }, { 0xFE, 100 }, { 0xFF, 100 }, { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 } }; const struct Step c_joc2[] = { { 0x80, 100 }, { 0xC0, 100 }, { 0xE0, 100 }, { 0xF0, 100 }, { 0xF8, 100 }, { 0xFC, 100 }, { 0xFE, 100 }, { 0xFF, 100 }, }; const struct Step c_joc3[] = { { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, { 0x01, 1000 }, { 0x02, 1000 }, { 0x04, 1000 }, { 0x08, 1000 }, { 0x10, 1000 }, { 0x20, 1000 }, { 0x40, 1000 }, { 0x80, 1000 }, { 0x80, 1000 }, { 0x40, 1000 }, { 0x20, 1000 }, { 0x10, 1000 }, { 0x08, 1000 }, { 0x04, 1000 }, { 0x02, 1000 }, { 0x01, 1000 }, }; const struct Step c_joc4[] = { { 0x80, 100 }, { 0xC0, 100 }, { 0xE0, 100 }, { 0xF0, 100 }, { 0xF8, 100 }, { 0xFC, 100 }, { 0xFE, 100 }, { 0xFF, 100 }, }; const const struct Step* c_jocuri[] = { c_joc1, c_joc2, c_joc3, c_joc4 }; const const int c_jocuriSize[] = { SIZE( c_joc1 ), SIZE( c_joc2 ), SIZE( c_joc3 ), SIZE( c_joc4 ) }; //Timer0 //Prescaler 1:4; TMR0 Preload = 6; Actual Interrupt Time : 1 ms void InitTimer0() { OPTION_REG = 0x81; TMR0 = 6; INTCON = 0xA0; } void init_sys() { CMCON = 0x07; // To turn off comparators VREN_bit = 0; // Disable voltage reference TRISB = 0b00000000; // portul B este numai IESIRI PORTB = 0b00000000; // se porneste cu toti pinii port B in stare LOW TRISA0_bit = INPUT; // RA0 este intrare digitala - asigura-te ca ai un rezistor de pull-up connectat de pe pin catre VCC } void Interrupt() { static unsigned char counter = 0; static unsigned char ultima_apasare_reala = 0; if (TMR0IF_bit) { TMR0IF_bit = 0; TMR0 = 6; ++counterMs; // daca chiar si numai odata butonul nu este apasat atunci // ori avem bouncing ori butonul nu mai este apasat asadar in 'else' facem variabila counter = 0 if (BUTON == APASAT) { counter++; /* Daca var. counter ajunge la 10 atunci au trecut 10ms cu butonul apasat, deci suntem siguri ca avem o apasare reala */ if (counter >= 10) { counter = 0; if (ultima_apasare_reala == 0) { // i este un contor care numara circular la fiecare apasare reala pana la NR_JOCURI // daca NR_JOCURI este 4 ca in cazul curent atunci variabila i va lua valorile: 0,1,2,,3,0,1,2,3 samd if (i >= NR_JOCURI - 1) i = 0; else i++; s_pos = 0; ultima_apasare_reala = 1; } } } else { counter = 0; ultima_apasare_reala = 0; } } } void main() { init_sys(); InitTimer0(); // bucla infinita while (1) { if ( counterMs >= c_jocuri[ i ][s_pos].time ) { counterMs = 0; if ( ++s_pos >= c_jocuriSize[ i ] ) s_pos = 0; PORTB = c_jocuri[ i ][s_pos].portData; } } }
  3. poti incerca sa vezi ce face codul asta: #include <pic.h> #include <pic16f628.h> #define BUTON RA0 #define INPUT 1 #define OUTPUT 0 #define APASAT 0 #define NR_JOCURI 4 #define SIZE( x ) ( sizeof( x ) / sizeof( x[ 0 ] ) ) static volatile unsigned int i; static volatile unsigned int s_pos; static volatile unsigned int counterMs; struct Step { unsigned char data; unsigned short time; }; const struct Step c_joc1[] = { { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, { 0xCC, 300 }, { 0x33, 300 }, { 0x55, 300 }, { 0xAA, 300 }, { 0x55, 300 }, { 0xAA, 300 }, { 0xCC, 300 }, { 0x33, 300 }, { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, { 0xF0, 500 }, { 0x0F, 500 }, { 0x99, 500 }, { 0x66, 500 }, { 0x99, 500 }, { 0x66, 500 }, { 0x80, 100 }, { 0xC0, 100 }, { 0xE0, 100 }, { 0xF0, 100 }, { 0xF8, 100 }, { 0xFC, 100 }, { 0xFE, 100 }, { 0xFF, 100 }, { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, }; const struct Step c_joc2[] = { { 0x80, 100 }, { 0xC0, 100 }, { 0xE0, 100 }, { 0xF0, 100 }, { 0xF8, 100 }, { 0xFC, 100 }, { 0xFE, 100 }, { 0xFF, 100 }, }; const struct Step c_joc3[] = { { 0x01, 50 }, { 0x02, 50 }, { 0x04, 50 }, { 0x08, 50 }, { 0x10, 50 }, { 0x20, 50 }, { 0x40, 50 }, { 0x80, 50 }, { 0x80, 50 }, { 0x40, 50 }, { 0x20, 50 }, { 0x10, 50 }, { 0x08, 50 }, { 0x04, 50 }, { 0x02, 50 }, { 0x01, 50 }, { 0x01, 1000 }, { 0x02, 1000 }, { 0x04, 1000 }, { 0x08, 1000 }, { 0x10, 1000 }, { 0x20, 1000 }, { 0x40, 1000 }, { 0x80, 1000 }, { 0x80, 1000 }, { 0x40, 1000 }, { 0x20, 1000 }, { 0x10, 1000 }, { 0x08, 1000 }, { 0x04, 1000 }, { 0x02, 1000 }, { 0x01, 1000 }, }; const struct Step c_joc4[] = { { 0x80, 100 }, { 0xC0, 100 }, { 0xE0, 100 }, { 0xF0, 100 }, { 0xF8, 100 }, { 0xFC, 100 }, { 0xFE, 100 }, { 0xFF, 100 }, }; const const struct Step* c_jocuri[] = { c_joc1, c_joc2, c_joc3, c_joc4 }; const const int c_jocuriSize[] = { SIZE( c_joc1 ), SIZE( c_joc2 ), SIZE( c_joc3 ), SIZE( c_joc4 ) }; //Timer0 //Prescaler 1:4; TMR0 Preload = 6; Actual Interrupt Time : 1 ms void InitTimer0() { OPTION_REG = 0x81; TMR0 = 6; INTCON = 0xA0; } void init_sys() { CMCON = 0x07; // To turn off comparators VREN = 0; // Disable voltage reference TRISB = 0b00000000; // portul B este numai IESIRI PORTB = 0b00000000; // se porneste cu toti pinii port B in stare LOW TRISA0 = INPUT; // RA0 este intrare digitala - asigura-te ca ai un rezistor de pull-up connectat de pe pin catre VCC } void interrupt ISR() { static unsigned char counter = 0; static unsigned char ultima_apasare_reala = 0; if (TMR0IF) { TMR0IF = 0; TMR0 = 6; ++counterMs; // daca chiar si numai odata butonul nu este apasat atunci // ori avem bouncing ori butonul nu mai este apasat asadar in 'else' facem variabila counter = 0 if (BUTON == APASAT) { counter++; /* Daca var. counter ajunge la 10 atunci au trecut 10ms cu butonul apasat, deci suntem siguri ca avem o apasare reala */ if (counter >= 10) { counter = 0; if (ultima_apasare_reala == 0) { // i este un contor care numara circular la fiecare apasare reala pana la NR_JOCURI // daca NR_JOCURI este 4 ca in cazul curent atunci variabila i va lua valorile: 0,1,2,,3,0,1,2,3 samd if (i >= NR_JOCURI - 1) i = 0; else i++; s_pos = 0; ultima_apasare_reala = 1; } } } else { counter = 0; ultima_apasare_reala = 0; } } } void main() { init_sys(); InitTimer0(); // bucla infinita while (1) { if ( counterMs >= c_jocuri[ i ][s_pos].time ) { counterMs = 0; if ( ++s_pos >= c_jocuriSize[ i ] ) s_pos = 0; PORTB = c_jocuri[ i ][s_pos].data; } } }
  4. in intrerupere se modifica i-ul dar ar trebui facut o versiune fara delay-uri, eventual cu delay pe timer, sa fie responsive. eventual cu state machines sa fie mai usor de citit, si cu array de parametri (port value, delay value) care se pot procesa toate intr-o iteratie.
  5. joc1 are 8.6 secunde, timp in care nu poate executa alt joc, pana nu termina. daca ai rabdare, nu ar trebui sa ramana blocat pe joc 1.
  6. Daca OP vrea sa-si formeze o baza de programare pentru microcontrolere, nu cred ca Arduino e o solutie buna pentru inceput. Arduino e pentru cei care vor sa faca chestii relativ complexe, rapid si fara sa se concentreze pe detalii. Arduino Uno nici macar nu suporta functionalitatea de debug. Cred ca cel mai bine e sa incerce cu un PIC din seria 16F, eventual cu o placa de dezvoltare pentru el. Se documenteaza despre hardware intai, PIC16 avand un set relativ restrans de "features". Apoi sa faca teste basic, incepand de la "blinker" si testand fiecare feature in parte separat, sau in combinatii de 2-3 maxim: un timer, un PWM, o captura de frecventa, etc. Asa isi formeaza o baza. Limbajul de programare se poate si schimba, sau chiar mixa (asm+c), si in general nu ai nevoie de cunostinte avansate de programare pentru embedded, decat cand lucrez la proiecte mari si iti trebui o organizare a codului, in module, librarii, layer-e cu izolarea detaliilor de implementare.
  7. Eu sunt de parere ca ar trebui lasate asa, daca nu vrei sa le vinzi. Afecteaza sunetul defectul? Daca nu, nu vad motivul sa te apuci sa le carpesti. Nu par in asa hal afectate, incat sa necesite reparative iminenta, altfel sa se strice mai tare..
  8. Earl Gray e bun, era intr-un timp si la l..l. Alte ceaiuri aromate sunt de la zauberer.
  9. Va salut, Am un HUD (head-up display) cu display custom, care afiseaza viteza/ora in forma de 7 segment, dar la care am de la un timp, segmentele cifrelor incomplete. Am incercat sa masor rezistori/condensatori de pe placuta si par ok. Display-ul foloseste integratul ST2225A. Pentru ceas foloseste HYM1302. Mai exista pe placate: CD4093BC (Quad 2-Input NAND Schmitt Trigger), AT1796ADJ (150kHz, 3A Step-Down Switching Regulator), HOLTEK HT46R47(Cost-Effective A/D Type 8-Bit MCU). Functiile HUD lucreaza ok, viteza se schimba la timp, doar ca afisarea are digiti cu segmente stinse. Am incercat sa trag usor de display, sa curat contactele mufelor de conexiune intre placa de baza si ce de display, fara nici un rezultat. Exista un senzor de lumina, in functie de care se autoregleaza luminozitatea la display. Cand este lumina puternica, anumite segmente care lumineaza mai slab cand nu e lumina, vor lumina puternic. Cand nu este luminat, anumite segmente se vad puternic, altele mia slab, altele deloc. La lumina puternica pe senzor, toate segmentele partial luminate se aprind puternic, insa cele care nu se aprind continua sa fie stinse. O alta observatie e ca nu toate segmentele care nu se aprind raman stinse tot timpul. Cand se schimba valoarea de afisat, se schimba si segmentele care nu se aprind. Aveti ceva idei care ar putea fi cauza? Multumesc.
  10. Un vulcan ar putea sa creeze mai multe probleme: https://en.wikipedia.org/wiki/Year_Without_a_Summer
  11. Cu DHL nu rezolvi nimic, daca nu platesti comisionul lor, adica optiunea sa trimita si sa faca plata catre vama. Am cod EORI, am avut pachet prin DHL, toate actele puse la dispozitie din ziua doi. Mi-au cerut factura fiscala cu transport evidentiat separat care sa coincida cu sumarul de plata din aplicatia online. Fiind pachet din China, acestea nu coincideau, bine-nteles. Au trimis pachetul inapoi dupa o luna. Pachetul cumparat prin magazinul Wish, are support gen call center, nu ai legatura cu vanzatorul, practic nu am putut cu cine discuta pentru o noua factura. Am trimis mail-uri la vama Otopeni si la ANPC. Vama mi-a spus ca nu e nevoie de transport evidentiat pe factura, firma de curierat poate estima pretul de transport pentru un pachet asemanator, pentru a rezolva problema. De la ANPC nu am primit raspuns dupa 30 de zile, au trecut vreo 2 luni jumate si inca nici un raspuns. Nu se baga nimeni cu DHL. EU nu pot decat sa-i evit pe cat posibil, insa pe Wish, nu am posibilitatea sa vad ce transport foloseste vanzatorul, deci e o loterie oricum. Inainte sa am cod EORI, am cumparat culmea de la acelasi vanzator, insa prin alt magazin online, au rezolvat ei tot si am platit comisioanele lor, acum un an si ceva. Cu posta romana nu am avut niciodata probleme, insa dureaza mai mult. Macar sunt destul de organizati si preturi/taxe mult mai mici (inmagazinaj 2-3 lei pe zi fata de 24 lei/zi la DHL).
  12. Cred ca sunt doar doua tipuri cu bani: 1. nou, 690 lei: https://www.microsoft.com/ro-ro/p/windows-10-home/d76qx4bznwk4 (1200 lei e Pro) 2. SH, 8 lei sau mai mult, depinde de unde le iei
  13. Macar daca cele facute, ar fi decente, ai spune, ok, pas cu pas se rezolva ceva. Dar, nu au statii peco, nu au parazapezi, nu exista panouri fonice, majoritatea iesirilor se termina in semafoare, separatoarele de sens sunt destul de periculoase (bare metalice sau borduri de ciment inalte, foarte aproape de banda de rulaj), lipsa banda de urgenta, e foarte ingusta sau in cel mai bun caz au o banda neasfaltata, dar cu pietris, sistemul de plata este greoi (nu exista plata automata la trecere).
  14. E o intersectie banala intre doua autotrazi, ce permite iesire in 3 directii fara oprire, cu o banda express pe centru. Dupa cum e de circulata, pare ca taxa de drum e cam ridicata.
  15. Demersul, desi pare hilar la prima vedere, sau cel putin asa cred ca a fost si conceput, are mare impact de propagare, si este o palma data celor de la Bucuresti, care in atatia ani au construit bucati de autostrada, in Muntenia si Transilvania, dar in Moldova ioc, nici macar nu au inceput ceva. Palma va fi cu atat mai grea cu cat cei din Europa, vor afla ca o treime din ROmania nu are decat 1Km de autostrada. De asta probabil s-a si enervat Dragnea si a inceput sa jigneasca, dar cand se vor rasvrati, la vot, moldovenii, nu prea il vad bine la toamna.
×
×
  • 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.