Vreau sa prezint un proiect, destul de simplu si cam inutil dar simpatic. Sper sa va placa, astept comentariile si opiniile voastre.
Consta prin controlul unui bargraph Nixie, printr-un port serial emulat prin USB. Pentru inceput, schema:
Tot montajul se alimenteaza din portul USB, adica de la 5V.
Cablajul l-am facut pnp cu foaie de revista prin metoda pnp, asa ca FT232RL l-am pus pe o placuta separata, ca sa nu am grija unei bune rezolutii la placa mare. De remarcat, driverul pentru FT232 trebuie musai luat de pe saitul FTDI. Driverul de Windows face Windowsul sa crape (blue screen, apoi restart) la fiecare conectare.
PIC12F675, sau PIC12F629 is mici, dar au dezavantajul ca-s vechi si chele. Asa ca a trebuit sa emulez doua generatoare de impulsuri si o receptie seriala asincrona. Nu am folosit intreruperi, lucreaza doar prin polling. Toate delayurile se obtin software. Q2, L1, R4, D2 formeaza un convertor boost, cu factor de umplere fix, comandat de PIC. Este esential sa se foloseasca o bobina cu circuit magnetic deschis si pierderi cat mai mici, din cauza raportului mare de tensiuni de iesire si de intrare. La iesire este nevoie de 100V. Curentul maxim este de 4mA. Acest semnal se opreste pe perioada receptionarii unui byte, ceea ce duce la o scadere usoara a tensiunii la fiecare byte receptionat. (pe un PIC cu modul USART, problema se poate rezolva)
Tensiunea de comanda a lungimii aprinse se face prin PWM, din iesirea GP2, la o frecventa de cca 20Hz. R1 si C2 formeaza un filtru trece jos cu tau destul de mare cat sa nu se simta PWM-ul. La iesirea filtrului se afla o sursa de curent constant comandata in tensiune, formata din Q1 si R3.
Programul pemtru PIC:
#include #include #include #pragma CLOCK_FREQ 4000000 #pragma DATA _CONFIG, _CP_OFF & _BODEN_OFF &_PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON char i,j,duty, out, rxbuf, volt; //unsigned int j; void rxdata(){ tmr0=151; tmr0=255; gpio.1=0; rxbuf=0; for (i=0;i<10;i++){ if ((i>0)&&(i<9)){ gpio.5=1; rxbuf=(rxbuf>>1);rxbuf.7=gpio.4; gpio.5=0; } while (tmr0!=255){} tmr0=35; //perioada intre citirea a 2 biti din RS232 } trisio.2=0; } void pwm(){ gpio.1=0; for (i=1;i<2;i++) if (gpio.4==0){trisio.2=1;rxdata();} gpio.1=1; for (i=1;i<4;i++) //4 asta depinde de bobina boost, ar trebui incercate valori pana se obtine un transfer maxim de putere. if (gpio.4==0){trisio.2=1;rxdata();} } void main() { intcon=0b00000000; option_reg=0b10000001; trisio=0b11010001; adcon0=0b00000001; ansel=0b01100001; gpio=0;rxbuf=5; while (1) for (j=0;j<255;j++){ pwm(); //PWM-ul pentru boost if (j==rxbuf) gpio.2=0; //PWM-ul pentru comanda if (j==0) gpio.2=1; } }
Ca exemplu aplicatie, se gaseste pe net un program ‘CPU Usage in tray by edgemeal’, scris in Visual Basic. Cu fisierul mscomm32.dll, se poate comunica direct cu portul emulat. In fond, se poate folosi orice program. Trebuie transmis spre port un singur byte, la 1200 baud, fara bit de paritate si cu un singur bit de stop. (oricum ignora bitii de control).
Montajul realizat arata astfel:
Executabilul si codul sursa se gasesc aici sau:
http://www.mediafire.com/?uu7dhndvs6z1413
Foarte interesant proiectul, am vazut pe un forum un ceas nixie pe USB.
Mersi pentru apreciere. Da, se pot face chestii interesante pe USB. Deşi se lucrează mai dificil decît cu RS232 sau LPT, portul serial are avantajul că poate furniza un curent de 1A, ceea ce este suficient pentru multe proiecte. Inclusiv un ceas Nixie.