amudsen Postat Martie 2, 2015 Partajează Postat Martie 2, 2015 Apelez la colegii cu experienta privind realizarea unui voltmetru cu memorie, gama de tensiune sa fie 0 - 1v, clasa de precizie 1 (mediu), memoria sa fie timp de 10 sec. (sau sa fie cu un buton reset), 1 citire pe secunda, iar afisarea sa se faca pe un display led cu 3 digiti (poate pe viitor cineva doreste sa se extinda domeniul de masura). Este posibil ca acest montaj sa fie un inceput pentru un clamp ampermetru ceva gen imaginea de mai jos. O posibila idee ar fi aici> http://www.best-microcontroller-projects.com/lcd-volt-meter.html Link spre comentariu
franzm Postat Martie 2, 2015 Partajează Postat Martie 2, 2015 Exista deja ceva asemanator realizat cu C520d. Amanunte gasiti în schema aparatului AMPA300 produs de catre AEM. 1 Link spre comentariu
amudsen Postat Martie 2, 2015 Autor Partajează Postat Martie 2, 2015 (editat) Cam pe acolo, iar partea de memorie cum se poate implementa? Ma gandeam ca se poate realiza ceva mai nou cu un pic, iesirea sa fie pe display led 3 digiti fara virgula 0 - 999mV. http://www.elforum.info/topic/61105-c520d/page-2 Editat Martie 2, 2015 de amudsen Link spre comentariu
amudsen Postat Martie 2, 2015 Autor Partajează Postat Martie 2, 2015 Exista deja ceva asemanator realizat cu C520d. Amanunte gasiti în schema aparatului AMPA300 produs de catre AEM. Ce echivalent ar fi pentru ROS05B? Link spre comentariu
franzm Postat Martie 2, 2015 Partajează Postat Martie 2, 2015 (editat) Seriile SMY50, SMY60. Editat Martie 2, 2015 de franzm Link spre comentariu
amudsen Postat Martie 2, 2015 Autor Partajează Postat Martie 2, 2015 Cam nu prea sunt pe la noi in tara seriile respective (sau motorul meu da rateuri). Nu se pot inlocui cu doua mos-uri? Link spre comentariu
franzm Postat Martie 3, 2015 Partajează Postat Martie 3, 2015 (editat) Gasiti MOSFET dublu cu canal p si la Vishay (IR). Editat Martie 3, 2015 de franzm Link spre comentariu
amudsen Postat Martie 3, 2015 Autor Partajează Postat Martie 3, 2015 Am gasit pe respectivul, saptamana asta sper sa fac montajul de test pentru schema din Tehnium, numai ca montajul se alimenteaza la o sursa diferentiala de 12v, vreau sa il fac portabil, alimentat de la 4 baterii 1,5v ... partea de afisare sa o fac cu led 3 digiti ........ ii dau eu de capat. Link spre comentariu
amudsen Postat Martie 5, 2015 Autor Partajează Postat Martie 5, 2015 (editat) Am facut pe o placa de test un voltmetru cu pic 16f676 dupa schema cam asa arata functional codul in C ar fi........ #include <16F676.h>#device adc=10#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,BROWNOUT,NOMCLR#use delay (clock=4000000) // 4MHz clock#rom 0x3ff={0x3444}#byte PORTA = 0x05#byte PORTC = 0x07#byte TRISA = 0x85#byte TRISC = 0x87#define SPORTA PORTA#define SPORTC PORTC#define TICKS_BETWEEN_INTERRUPTS 5000 //5000#define INTERRUPT_OVERHEAD 35#define TMR1RESET (0xFFFF-(TICKS_BETWEEN_INTERRUPTS-INTERRUPT_OVERHEAD))const char SegCode[11] = {0x40,0x57,0x22,0x06,0x15,0x0C,0x08,0x56,0x00,0x04,0xFF}; // 0 1 2 3 4 5 6 7 8 9const char Column[3] = {0x02,0x01,0x04};static char Segment[3] = {0x7f,0x7f,0x7f}; static unsigned char ColCount=0x00;void CPU_SETUP(void);void Display(void);void HTO7S(unsigned int32 Num);byte i;unsigned int32 result;#INT_TIMER1void Timer1(void){ set_timer1(TMR1RESET); Display(); } void main(){ unsigned char i; CPU_SETUP(); while(true) { result=0; for (i=0;i<20;i++) { set_adc_channel(3); delay_ms(1); result=result+read_adc(); } //result = 0x3fe; HTO7S(result/20); delay_ms(200); } }void CPU_SETUP(){ setup_comparator(NC_NC_NC_NC); // not use comparator module setup_adc_ports( sAN3 | VSS_VDD); setup_adc(ADC_CLOCK_DIV_64); TRISA=0b00011000; PORTA=0x27; TRISC=0b00000000; PORTC=0x37; setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(TMR1RESET); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); }//-------------------------------------// Display routine//-------------------------------------void Display(){ PORTA = 0b00100111; // off all digits column and Segment G PORTC = 0b00111111; // off segment a-f delay_cycles(2); if (ColCount>=3) ColCount=0; SPORTC = Segment[ColCount]; SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | (Column[ColCount]^0x07); ColCount++; } //--------------------------------------// Convet HEX 2 byte to 7-Segment code//--------------------------------------void HTO7S(unsigned int32 Num){ unsigned int32 res; Segment[0]=SegCode[30*Num/10230]; if (Segment[0]==0x40) Segment[0]=0xFF; res = 30*Num%10230; Segment[1]=SegCode[10*res/10230]; res=10*res%10230; Segment[2]=SegCode[10*res/10230];} Rog un coleg daca poate sa modifice programul astfel incat afisarea sa fie pana la 1V (adica maxim sa arate 999 mV) si daca ar fi posibil, citirea sa ramana "stand-by" (adica dupa ce luam testerele de la tensiune) cam 5 - 7 sec. Cu multumiri. Editat Martie 5, 2015 de amudsen Link spre comentariu
sofian Postat Martie 5, 2015 Partajează Postat Martie 5, 2015 Prima data trebuie scos divizorul rezistiv de la intrare in PIC 47k si 33k + 50k atentie daca depasesti 5v pe intrare la PIC se poate arde trebuie modificata functia asta //--------------------------------------// Convet HEX 2 byte to 7-Segment code//--------------------------------------void HTO7S(unsigned int32 Num){ unsigned int32 res;// test pentru depasire 999mv// ADC are 10bit deci 1024 pentru 5v rezulta ca pentru 999mv in ADC o sa avem 203// 1024 / 5v = 203 if (Num >= 203) { Segment[0] = 0x28; // "E" de la ERROR Segment[1] = 0x28; // "E" Segment[2] = 0x28; // "E" } else { Segment[2]=SegCode[Num%10]; Num = Num/10; Segment[1]=SegCode[Num%10]; Num = Num/10; Segment[0]=SegCode[Num]; }// test pentru "0" daca da digit off if (Segment[0]==0x40) Segment[0]=0xFF;} Link spre comentariu
amudsen Postat Martie 6, 2015 Autor Partajează Postat Martie 6, 2015 Deci fisierul ar trebui sa arate asa> #include <16F676.h>#device adc=10#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,BROWNOUT,NOMCLR#use delay (clock=4000000) // 4MHz clock#rom 0x3ff={0x3444}#byte PORTA = 0x05#byte PORTC = 0x07#byte TRISA = 0x85#byte TRISC = 0x87#define SPORTA PORTA#define SPORTC PORTC#define TICKS_BETWEEN_INTERRUPTS 5000 //5000#define INTERRUPT_OVERHEAD 35#define TMR1RESET (0xFFFF-(TICKS_BETWEEN_INTERRUPTS-INTERRUPT_OVERHEAD))const char SegCode[11] = {0x40,0x57,0x22,0x06,0x15,0x0C,0x08,0x56,0x00,0x04,0xFF}; // 0 1 2 3 4 5 6 7 8 9const char Column[3] = {0x02,0x01,0x04};static char Segment[3] = {0x7f,0x7f,0x7f}; static unsigned char ColCount=0x00;void CPU_SETUP(void);void Display(void);void HTO7S(unsigned int32 Num);byte i;unsigned int32 result;#INT_TIMER1void Timer1(void){ set_timer1(TMR1RESET); Display(); } void main(){ unsigned char i; CPU_SETUP(); while(true) { result=0; for (i=0;i<20;i++) { set_adc_channel(3); delay_ms(1); result=result+read_adc(); } //result = 0x3fe; HTO7S(result/20); delay_ms(200); } }void CPU_SETUP(){ setup_comparator(NC_NC_NC_NC); // not use comparator module setup_adc_ports( sAN3 | VSS_VDD); setup_adc(ADC_CLOCK_DIV_64); TRISA=0b00011000; PORTA=0x27; TRISC=0b00000000; PORTC=0x37; setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(TMR1RESET); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); }//-------------------------------------// Display routine//-------------------------------------void Display(){ PORTA = 0b00100111; // off all digits column and Segment G PORTC = 0b00111111; // off segment a-f delay_cycles(2); if (ColCount>=3) ColCount=0; SPORTC = Segment[ColCount]; SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | (Column[ColCount]^0x07); ColCount++; } //--------------------------------------// Convet HEX 2 byte to 7-Segment code//--------------------------------------void HTO7S(unsigned int32 Num){ unsigned int32 res;// test pentru depasire 999mv// ADC are 10bit deci 1024 pentru 5v rezulta ca pentru 999mv in ADC o sa avem 203// 1024 / 5v = 203 if (Num >= 203) { Segment[0] = 0x28; // "E" de la ERROR Segment[1] = 0x28; // "E" Segment[2] = 0x28; // "E" } else { Segment[2]=SegCode[Num%10]; Num = Num/10; Segment[1]=SegCode[Num%10]; Num = Num/10; Segment[0]=SegCode[Num]; }// test pentru "0" daca da digit off if (Segment[0]==0x40) Segment[0]=0xFF;} Sa vad cum generez hex-ul........ sa iau o piatra in gura, e cam prima oara Chiar mi-am spart dintii ...... ma puteti ajuta cu generarea hex-ului? Cand se poate, bineinteles. Link spre comentariu
Marius Rotundu Postat Martie 7, 2015 Partajează Postat Martie 7, 2015 (editat) Ai nevoie de CCS C sa-l poti compila, din nefericire nu-l folosesc dar poate te ajuta vreun alt coleg, sau poti incerca sa-l downlodezi de aici: http://www.ccsinfo.com/compdemo.php Editat Martie 7, 2015 de Marius Rotundu Link spre comentariu
amudsen Postat Martie 8, 2015 Autor Partajează Postat Martie 8, 2015 (editat) Imi apare eroarea la linia 37, *** Error 128 "VOLT METER.c" Line 37(1,5): A #DEVICE required before this line 1 Errors, 0 Warnings. {#include <16F676.h> #device adc=10 #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,BROWNOUT,NOMCLR #use delay (clock=4000000) // 4MHz clock #rom 0x3ff={0x3444} #byte PORTA = 0x05 #byte PORTC = 0x07 #byte TRISA = 0x85 #byte TRISC = 0x87 #define SPORTA PORTA #define SPORTC PORTC #define TICKS_BETWEEN_INTERRUPTS 5000 //5000 #define INTERRUPT_OVERHEAD 35 #define TMR1RESET (0xFFFF-(TICKS_BETWEEN_INTERRUPTS-INTERRUPT_OVERHEAD)) const char SegCode[11] = {0x40,0x57,0x22,0x06,0x15,0x0C,0x08,0x56,0x00,0x04,0xFF}; // 0 1 2 3 4 5 6 7 8 9 const char Column[3] = {0x02,0x01,0x04}; static char Segment[3] = {0x7f,0x7f,0x7f}; static unsigned char ColCount=0x00; void CPU_SETUP(void); void Display(void); void HTO7S(unsigned int32 Num); byte i; unsigned int32 result; // Device setup #include "16F676.h" #device *=16 #device adc=10 #INT_TIMER1 void Timer1(void) { set_timer1(TMR1RESET); Display(); } void main() { unsigned char i; CPU_SETUP(); while(true) { result=0; for (i=0;i<20;i++) { set_adc_channel(3); delay_ms(1); result=result+read_adc(); } //result = 0x3fe; HTO7S(result/20); delay_ms(200); } } void CPU_SETUP() { setup_comparator(NC_NC_NC_NC); // not use comparator module setup_adc_ports( sAN3 | VSS_VDD); setup_adc(ADC_CLOCK_DIV_64); TRISA=0b00011000; PORTA=0x27; TRISC=0b00000000; PORTC=0x37; setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(TMR1RESET); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); } //------------------------------------- // Display routine //------------------------------------- void Display() { PORTA = 0b00100111; // off all digits column and Segment G PORTC = 0b00111111; // off segment a-f delay_cycles(2); if (ColCount>=3) ColCount=0; SPORTC = Segment[ColCount]; SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | (Column[ColCount]^0x07); ColCount++; } //-------------------------------------- // Convet HEX 2 byte to 7-Segment code //-------------------------------------- void HTO7S(unsigned int32 Num) { unsigned int32 res; // test pentru depasire 999mv // ADC are 10bit deci 1024 pentru 5v rezulta ca pentru 999mv in ADC o sa avem 203 // 1024 / 5v = 203 if (Num >= 203) { Segment[0] = 0x28; // "E" de la ERROR Segment[1] = 0x28; // "E" Segment[2] = 0x28; // "E" } else { Segment[2]=SegCode[Num%10]; Num = Num/10; Segment[1]=SegCode[Num%10]; Num = Num/10; Segment[0]=SegCode[Num]; } // test pentru "0" daca da digit off if (Segment[0]==0x40) Segment[0]=0xFF; } Editat Martie 8, 2015 de amudsen Link spre comentariu
sofian Postat Martie 9, 2015 Partajează Postat Martie 9, 2015 Din pacate nici eu nu folosesc CCS, dar am instalat programul si a compilat perfect Voltmetru.txt trebuie schimbat extensia in hex daca programatorul nu stie sa incarce direct din txt Voltmetru.txt 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