
نوشته اصلی توسط
alidehghan288 دوستان اگر می خوان شروع کنیم به تحلیل کد های نسخه قدیمی این دستگاه و خط به خط
ببینیم هر کدوم برای چی هستم آخه خوب نیست که یه نفر زحمت بکشه این همه کد بنویسه
و ما فقط استفاده کنیم.بعد از تحلیل کد ها میتونیم از میکروی mega128 و tftlcd رنگی استفاده
کنیم.و حتی تمام این امکانات پیشرفته رو بهش اضافه کنیم.
برای شروع این پروژه کامپایل شده atmel studio این دستگاه:
http://up.electro2014.ir/up/electro2014/AVR/Tester.rar
این هم لینک دانلود atmel studio 7:
http://www.atmel.com/System/BaseForm.aspx?target=tcm:26-77367
بعد از ثبت نام لینک دانلود کاملا رایگان در اختیارتون قرار میگیره.
خوب حالا کد ها ی مهم رو تحلیل میکنیم:
[code=c]#define ADC_PORT PORTC
#define ADC_DDR DDRC
#define ADC_PIN PINC
#define TP1 PC0
#define TP2 PC1
#define TP3 PC2[/code]
این کدها پورت و پین هایی که مستقیم به سیم های 1 و2و3 وصل شده رو تعریف کرده و باید adc باشد.
[code=c]#if defined(GERMAN) //deutsch
unsigned char TestRunning[] EEMEM = "Test lلuft...¤¤¤¤";
unsigned char Bat[] EEMEM = "Batterie ";
unsigned char BatWeak[] EEMEM = "schwach";
unsigned char BatEmpty[] EEMEM = "leer!¤¤¤";
unsigned char TestFailed1[] EEMEM = "Kein,unbek. oder";
unsigned char TestFailed2[] EEMEM = "defektes ¤¤¤";
unsigned char Bauteil[] EEMEM = "Bauteil¤¤¤";
unsigned char Unknown[] EEMEM = " unbek.¤¤";
unsigned char Diode[] EEMEM = "Diode: ";
unsigned char DualDiode[] EEMEM = "Doppeldiode ¤¤";
unsigned char TwoDiodes[] EEMEM = "2 Dioden";
unsigned char Antiparallel[] EEMEM = "antiparallel¤";
unsigned char InSeries[] EEMEM = "in Serie A=";
unsigned char K1[] EEMEM = ";K1=";
unsigned char K2[] EEMEM = ";K2=";
unsigned char GAK[] EEMEM = "GAK=";
unsigned char NextK[] EEMEM = ";K=";
unsigned char K[] EEMEM = "K=";
unsigned char Triac[] EEMEM = "Triac";
unsigned char Thyristor[] EEMEM = "Thyristor";
#ifdef UseM8
unsigned char OrBroken[] EEMEM = "oder defekt ¤";
unsigned char Resistor[] EEMEM = "Widerstand: ";
unsigned char Capacitor[] EEMEM = "Kondensator: ";
#endif
#elif defined(ENGLISH) //englisch
unsigned char TestRunning[] EEMEM = "Pleas Wait ...¤¤";
unsigned char Bat[] EEMEM = "Battery ¤";
unsigned char BatWeak[] EEMEM = "weak¤¤¤";
unsigned char BatEmpty[] EEMEM = "empty!¤¤";
unsigned char TestFailed1[] EEMEM = "No, unknown, or¤";
unsigned char TestFailed2[] EEMEM = "damaged ¤¤¤¤";
unsigned char Bauteil[] EEMEM = "part¤¤¤¤¤¤";
unsigned char Unknown[] EEMEM = " unknown¤";
unsigned char Diode[] EEMEM = "Diode: ";
unsigned char DualDiode[] EEMEM = "Double diode ¤";
unsigned char TwoDiodes[] EEMEM = "2 diodes";
unsigned char Antiparallel[] EEMEM = "anti-parallel";
unsigned char InSeries[] EEMEM = "serial A=¤¤";
unsigned char K1[] EEMEM = ";C1=";
unsigned char K2[] EEMEM = ";C2=";
unsigned char GAK[] EEMEM = "GAC=";
unsigned char NextK[] EEMEM = ";C=";
unsigned char K[] EEMEM = "C=";
unsigned char Triac[] EEMEM = "Triac";
unsigned char Thyristor[] EEMEM = "Thyristor";
#ifdef UseM8
unsigned char OrBroken[] EEMEM = "or damaged ¤¤";
unsigned char Resistor[] EEMEM = "Resistor: ¤¤";
unsigned char Capacitor[] EEMEM = "Capacitor: ¤¤";
#endif
#elif defined(POLISH) //polnisch
unsigned char TestRunning[] EEMEM = "Testowanie...¤¤¤¤";
unsigned char Bat[] EEMEM = "Bateria¤¤";
unsigned char BatWeak[] EEMEM = "slaba¤¤";
unsigned char BatEmpty[] EEMEM = "za slaba";
unsigned char TestFailed1[] EEMEM = "brak elementu¤¤¤";
unsigned char TestFailed2[] EEMEM = "lub uszkodz.";
unsigned char Bauteil[] EEMEM = "Element¤¤¤";
unsigned char Unknown[] EEMEM = " nieznany";
unsigned char Diode[] EEMEM = "Dioda: ";
unsigned char DualDiode[] EEMEM = "Duodioda ¤¤¤¤¤";
unsigned char TwoDiodes[] EEMEM = "2 diody¤";
unsigned char Antiparallel[] EEMEM = "przeciwsobnie";
unsigned char InSeries[] EEMEM = "Szereg. A=¤";
unsigned char K1[] EEMEM = ";K1=";
unsigned char K2[] EEMEM = ";K2=";
unsigned char GAK[] EEMEM = "GAK=";
unsigned char NextK[] EEMEM = ";K=";
unsigned char K[] EEMEM = "K=";
unsigned char Triac[] EEMEM = "Triak";
unsigned char Thyristor[] EEMEM = "Tyrystor¤";
#ifdef UseM8
unsigned char OrBroken[] EEMEM = "lub uszkodz. ";
unsigned char Resistor[] EEMEM = "Opornosc: ¤¤";
unsigned char Capacitor[] EEMEM = "Pojemnosc: ¤¤";
#endif
#elif defined(CZECH) //tschechisch
unsigned char TestRunning[] EEMEM = "Probiha mereni...";
unsigned char Bat[] EEMEM = "Baterie ¤";
unsigned char BatWeak[] EEMEM = "slaba¤¤";
unsigned char BatEmpty[] EEMEM = "prazdna!";
unsigned char TestFailed1[] EEMEM = "Zadna, neznama¤¤";
unsigned char TestFailed2[] EEMEM = "vadna ¤¤¤¤¤¤";
unsigned char Bauteil[] EEMEM = "soucastka¤";
unsigned char Unknown[] EEMEM = " neznama¤";
unsigned char Diode[] EEMEM = "Dioda: ";
unsigned char DualDiode[] EEMEM = "Dvojita dioda ";
unsigned char TwoDiodes[] EEMEM = "2 Diody¤";
unsigned char Antiparallel[] EEMEM = "antiparalelni";
unsigned char InSeries[] EEMEM = "v serii A=¤";
unsigned char K1[] EEMEM = ";K1=";
unsigned char K2[] EEMEM = ";K2=";
unsigned char GAK[] EEMEM = "GAK=";
unsigned char NextK[] EEMEM = ";K=";
unsigned char K[] EEMEM = "K=";
unsigned char Triac[] EEMEM = "Triak";
unsigned char Thyristor[] EEMEM = "Tyristor¤";
#ifdef UseM8
unsigned char OrBroken[] EEMEM = "nebo vadna ¤¤";
unsigned char Resistor[] EEMEM = "Rezistor: ¤¤";
unsigned char Capacitor[] EEMEM = "Kondenzator: ";
#endif
#elif defined(SLOVAK) //slowakisch
unsigned char TestRunning[] EEMEM = "PREBIEHA TEST¤¤¤¤";
unsigned char Bat[] EEMEM = "Bateria ¤";
unsigned char BatWeak[] EEMEM = "slaba¤¤";
unsigned char BatEmpty[] EEMEM = "prazdna!";
unsigned char TestFailed1[] EEMEM = "Ziadna, neznama¤";
unsigned char TestFailed2[] EEMEM = "vadna ¤¤¤¤¤¤";
unsigned char Bauteil[] EEMEM = "suciastka!";
unsigned char Unknown[] EEMEM = " neznama¤";
unsigned char Diode[] EEMEM = "Dioda: ";
unsigned char DualDiode[] EEMEM = "Dvojdioda ¤¤¤¤";
unsigned char TwoDiodes[] EEMEM = "2 Diody¤";
unsigned char Antiparallel[] EEMEM = "antiparalelne";
unsigned char InSeries[] EEMEM = "v Serii A=¤";
unsigned char K1[] EEMEM = ";K1=";
unsigned char K2[] EEMEM = ";K2=";
unsigned char GAK[] EEMEM = "GAK=";
unsigned char NextK[] EEMEM = ";K=";
unsigned char K[] EEMEM = "K=";
unsigned char Triac[] EEMEM = "Triak";
unsigned char Thyristor[] EEMEM = "Tyristor¤";
#ifdef UseM8
unsigned char OrBroken[] EEMEM = "alebo vadna ¤";
unsigned char Resistor[] EEMEM = "Rezistor: ¤¤";
unsigned char Capacitor[] EEMEM = "Kondenzator: ";
#endif
#endif
//Sprachunabhنngige EEPROM-Strings
unsigned char mosfet[] EEMEM = "-MOS";
unsigned char emode[] EEMEM = "-E";
unsigned char dmode[] EEMEM = "-D";
unsigned char jfet[] EEMEM = "-JFET";
unsigned char A1[] EEMEM = ";A1=";
unsigned char A2[] EEMEM = ";A2=";
unsigned char NullDot[] EEMEM = "0,";
unsigned char GateCap[] EEMEM = " C=";
unsigned char hfestr[] EEMEM ="hFE=";
unsigned char NPN[] EEMEM = "NPN";
unsigned char PNP[] EEMEM = "PNP";
unsigned char bstr[] EEMEM = " B=";
unsigned char cstr[] EEMEM = ";C=";
unsigned char estr[] EEMEM = ";E=";
unsigned char gds[] EEMEM = "GDS=";
unsigned char Uf[] EEMEM = "Uf=";
unsigned char vt[] EEMEM = "Vt=";
unsigned char mV[] EEMEM = "mV";
unsigned char Anode[] EEMEM = "A=";
unsigned char Gate[] EEMEM = "G=";
unsigned char CA[] EEMEM = "CA";
unsigned char CC[] EEMEM = "CC";
unsigned char TestTimedOut[] EEMEM = "Timeout!";
unsigned char DiodeIcon[] EEMEM = {4,31,31,14,14,4,31,4}; //Dioden-Icon
#ifdef LCD_CYRILLIC //Omega- und µ-Zeichen als Custom-Zeichen erzeugen, weil diese Zeichen im kyrillischen Zeichensatz nicht enthalten sind
unsigned char CyrillicOmegaIcon[] EEMEM = {0,0,14,17,17,10,27,0}; //Omega
unsigned char CyrillicMuIcon[] EEMEM = {0,17,17,17,19,29,16,16}; //µ
#endif[/code]
این کد های متن ها و اشکالی هست که روی lcd به نمایش در میاد و EEMEM به معنای این است که این ها در حافظه eeprom ذخیره شود.
[code=c]void CheckPins(uint8_t HighPin, uint8_t LowPin, uint8_t TristatePin);
void DischargePin(uint8_t PinToDischarge, uint8_t DischargeDirection);
unsigned int ReadADC(uint8_t mux);
void lcd_show_format_cap(char outval[], uint8_t strlength, uint8_t CommaPos);
#ifdef UseM8
void ReadCapacity(uint8_t HighPin, uint8_t LowPin); //Kapazitنtsmessung nur auf Mega8 verfügbar
#endif[/code]
این برنامه دارای چند تا تابع هست که در بالا به کامپایلر معرفی شدند.
[code=c]#define R_DDR DDRB
#define R_PORT PORTB[/code]
این کد ها پورتی که به مقاومت ها وصل شده رو تعریف میکنه پس در ادامه کد هر جایی به R_PORT رسیدیم یعنی PORTB.
[code=c]#define ON_DDR DDRD
#define ON_PORT PORTD
#define ON_PIN_REG PIND
#define ON_PIN PD6
#define RST_PIN PD7[/code]
این کد هم اسم پایه ای که به کلید وصل هست رو به RST_PIN تغیر میده.
[code=c]#define PART_NONE 0
#define PART_DIODE 1
#define PART_TRANSISTOR 2
#define PART_FET 3
#define PART_TRIAC 4
#define PART_THYRISTOR 5
#define PART_RESISTOR 6
#define PART_CAPACITOR 7[/code]
توی این کد ها هم به هر قطعه ای یه عددی اختصاص داده شده تا برنامه قابل فهم شود.
[code=c]#define PART_MODE_N_E_MOS 1
#define PART_MODE_P_E_MOS 2
#define PART_MODE_N_D_MOS 3
#define PART_MODE_P_D_MOS 4
#define PART_MODE_N_JFET 5
#define PART_MODE_P_JFET 6
#define PART_MODE_NPN 1
#define PART_MODE_PNP 2[/code]
این هم برای انواع ترانزیستور ها یه عددی اختصاص داده.
[code=c]struct Diode {
uint8_t Anode;
uint8_t Cathode;
int Voltage;
};
struct Diode diodes[6];
uint8_t NumOfDiodes;
uint8_t b,c,e; //Anschlüsse des Transistors
unsigned long lhfe; //Verstنrkungsfaktor
uint8_t PartReady; //Bauteil fertig erkannt
unsigned int hfe[2]; //Verstنrkungsfaktoren
unsigned int uBE[2]; //B-E-Spannung für Transistoren
uint8_t PartMode;
uint8_t tmpval, tmpval2;
#ifdef UseM8 //Widerstands- und Kondensatormessung nur auf dem Mega8 verfügbar
uint8_t ra, rb; //Widerstands-Pins
unsigned int rv[2]; //Spannungsabfall am Widerstand
unsigned int radcmax[2]; //Maximal erreichbarer ADC-Wert (geringer als 1023, weil Spannung am Low-Pin bei Widerstandsmessung über Null liegt)
uint8_t ca, cb; //Kondensator-Pins
uint8_t cp1, cp2; //Zu testende Kondensator-Pins, wenn Messung für einzelne Pins gewنhlt
uint8_t ctmode; //Kondensator-Test-Modus (siehe ab Zeile 40)
#ifdef SWUART_INVERT
#define TXD_VAL 0
#else
#define TXD_VAL (1<<TxD)
#endif
#endif
unsigned long cv;
uint8_t PartFound, tmpPartFound; //das gefundene Bauteil
char outval[8];
unsigned int adcv[4];
unsigned int gthvoltage; //Gate-Schwellspannung
uint8_t tmpval, tmpval2;
#ifdef UseM8
char outval2[6];
#endif[/code]
این ها هم یه سری متفیر ها هستند که تو برنامه استفاده شده.
خوب کد هایی که تنها کارشون تغیر دادن نام کد های اصلی بود و معرفی متغیر ها بود تمام شدند و در ادامه به کد های حلقه main
میریم و اونا رو توضیح میدم.
سوالی بود در خدمتم.