Vizitator Random.raku Postat Iunie 4, 2016 Partajează Postat Iunie 4, 2016 nu se poate pune un semireglabil sa se varieze frecventa clipirii? Link spre comentariu
Liviu M Postat Iunie 4, 2016 Partajează Postat Iunie 4, 2016 Presupun ca te referi la proiectul lui bandi12 (postul 54), da' ca sa fim siguri (ca intre timp m-am amestecat si eu pe aici si incurc putin discutiile), data viitoare poate spui si la care varianta te referi. Link spre comentariu
kinderu56 Postat Iunie 4, 2016 Partajează Postat Iunie 4, 2016 asa am vrut si eu dar nu se poate pentru ca nu are ADC dar este ok cu cele doua sw-uri Link spre comentariu
Vizitator Random.raku Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 da liviu , la schmea lui bandi faceam referire pur si simplu era o idee , nu ma pricep la programare Link spre comentariu
UDAR Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 nu se poate pune un semireglabil sa se varieze frecventa clipirii? Se poate , implementând un oscilator cu unul din comparatoarele existente în PIC . Link spre comentariu
Bandi Szasz Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 (editat) Se poate , implementând un oscilator cu unul din comparatoarele existente în PIC . La asta nu ma pricep . In schimb pot sa postez codul sursa daca vrea cineva sa-l modifice. Codul sursa: #define timeStep 25 //msunsigned char LATB = 0;unsigned char LATA = 0;unsigned long millis = 0;char timeSetting = 1;unsigned long timeUntilNextStep = 0;char oldstate1 = 0;char oldstate2 = 0;void fill() { if(millis-timeUntilNextStep >= timeSetting*timeStep) { if(LATA == 255) { LATA = 0; LATB = 0; } else if (LATB<255) { LATB <<=1; LATB|=1; } else { if(LATA == 0xF) { LATA <<=1; LATA|=1; LATA <<=1; LATA|=1; LATA <<=1; LATA|=1; } else { LATA <<=1; LATA|=1; } } PORTB = LATB; PORTA = LATA; timeUntilNextStep = millis; }}void buttons(){ if (oldstate1 == 0 && Button(&PORTA, 4, 5, 0)) { oldstate1 = 1; } if (oldstate1 && Button(&PORTA, 4, 5, 1)) { timeSetting++; delay_ms(10); EEPROM_Write(0x02,timeSetting); delay_ms(10); oldstate1 = 0; } if (oldstate2 == 0 && Button(&PORTA, 5, 5, 0)) { oldstate2 = 1; } if (oldstate2 && Button(&PORTA,5, 5, 1)) { if(timeSetting > 1) { timeSetting--; delay_ms(10); EEPROM_Write(0x02,timeSetting); delay_ms(10); } oldstate2 = 0; }}void InitTimer0(){ OPTION_REG = 0x81; TMR0 = 6; INTCON = 0xA0;}void Interrupt(){ if (TMR0IF_bit){ TMR0IF_bit = 0; TMR0 = 6; millis++; }}void main() {PCON.F3 = 1;TRISB = 0x00;PORTB = 0x00;TRISA = 0x30;InitTimer0(); while(1) { timeSetting = EEPROM_Read(0x02); if(timeSetting == 0xFF) timeSetting = 1; fill(); buttons(); }} Editat Iunie 5, 2016 de bandi12 Link spre comentariu
UDAR Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 (editat) Din păcate nu am timp până spre sfârșitul lunii . Pot eventual să încerc să postez câteva detalii , poate te încumeți să continui ! Ideea e că acel oscilator poate genera o întrerupere la intevale reglabile prin potențiometru ( de la , să zicem , 1ms la 100ms ) . Aceste durate ar înlocui timeSetting din codul tău . În plus nici nu ar mai fi nevoie de scriere/citire în/din EEPROM . Varianta imediată este cu configurarea comparatoarelor în modul 110 . RA0, RA2 ar fi intrări iar RA3 ar fi ieșire . RA1 și RA4 ar fi , din păcate , irosite . O altă variantă care complică puțin lucrurile în soft ar fi fără scoaterea ieșirii la exterior . Aici s-ar putea folosi modul 101 care ar consuma doar doi pini de la comparator plus un pin oarecare , ieșire digitală. Pot să detaliez dacă există interes . Evident că pinii menționați de mine nu mai pot fi folosiți ca ieșiri pentru LED-uri . Editat Iunie 5, 2016 de UDAR Link spre comentariu
Bandi Szasz Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 Pentru intreruperi nu cred ca avem nevoie de comparator, putem folosii RB0 care e pin "External interrupt" si masuram intervalul intre cele doua intreruperi generate de un 555 sau alte circuite mai simple ?. Acuma depinde daca se merita adaugarea unui 555 fata de un pic gen PIC16F1503/7 care costa 5 respectiv 7 lei. Daca e ok asa cu 555 pot incerca realizarea. Link spre comentariu
UDAR Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 (editat) Ideea cu comparatorul din PIC era tocmai de a nu adăuga alte circuite . În fine , desigur există multe soluții . PS Eu m-am referit strict la F628A - asta am înțeles că e tema . Evident că folosind un PIC cu ADC lucrurile se simplifică enorm . Editat Iunie 5, 2016 de UDAR Link spre comentariu
Bandi Szasz Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 Am inteles, eu credeam ca era vorba de un oscilator extern ( am fost neatent cand am citit). Si da era vorba de F628/A, eu m-am referit la faptul ca daca trebuie folosit un oscilator extern nu merita munca depusa cand un PIC cu adc la un pret relativ mic rezolva mult mai elegant problema. Interesanta treaba si folosirea comparatorului pe post de "adc", din pacate saptamana viitoare cel putin pana joi sunt ocupat si nu am timp de studii probabil spre weekend daca nu e problema sa renuntam la cateva leduri pentru a include semireglabilul o sa ma documentez si sa incerc o implementare. Link spre comentariu
Liviu M Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 (editat) daca nu e problema sa renuntam la cateva leduri Nu-i nevoie sa renunti, folosesti codul potrivit si le folosesti pe toate 24. 24 pe o parte, bineinteles. : Editat Iunie 5, 2016 de Liviu M Link spre comentariu
Bandi Szasz Postat Iunie 5, 2016 Partajează Postat Iunie 5, 2016 Nu-i nevoie sa renunti, folosesti codul potrivit si le folosesti pe toate 24. 24 pe o parte, bineinteles. : Am cam amestecat doua proiecte pe un topic . Eu vorbeam de codul meu fara banda digitala pe care il foloseste @kinderu56. Si da cu banda led digitala nu se pune problema renuntarii la LED-uri findca este nevoie doar de 2 pini pentru cele doua benzi a cate 24 de leduri Link spre comentariu
Liviu M Postat Iunie 7, 2016 Partajează Postat Iunie 7, 2016 (editat) Salut, Am urcat pe github o varianta care aprinde ledurile (eu am lasat 12 active, ca 24 mi s-au parut multe) cam ca in filmuletul din primul post. N-are posibilitati de reglaj al vitezei si nici nu cred ca ma intereseaza sa-i fac. Din punctul meu de vedere (sa vad daca sunt in stare sa aprind cum vreau led-uri ws2812b), "proiectul" e terminat. Daca e cineva interesat sa-l continue, sursele sunt disponibile pe github. Utilizarea in scopuri personale (invatat, facut montaje prin casa/masina proprie) e libera de orice constrangere. Pentru utilizarea comerciala, mi-ar placea sa fiu macar anuntat (daca nu intrebat) inainte. Spor, Liviu Editat Iunie 7, 2016 de Liviu M Link spre comentariu
Liviu M Postat Iunie 9, 2016 Partajează Postat Iunie 9, 2016 Probabil ca nu intereseaza pe nimeni, da' cum nu cere de mancare, scriu in continuare aici. Pentru ca ma rodea putin structura programului (nu reuseam sa mut o parte din operatiii intr-o functie), am mai sapat putin la program. Pana la urma am reusit sa-i dau de cap. Si pentru ca tot eram la el, l-am si periat si comentat putin. Ultima versiune, ca intotdeauna pe github. Numai bine, Liviu 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